Commit 363a37d52016e0a16e3599d690f610346fc6898a

Authored by blueswir1
1 parent c93e7817

Fix OpenBSD linker warnings

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5044 c046a42c-6fe2-441c-8c8c-71466251a162
audio/audio.c
@@ -211,8 +211,8 @@ static char *audio_alloc_prefix (const char *s) @@ -211,8 +211,8 @@ static char *audio_alloc_prefix (const char *s)
211 size_t i; 211 size_t i;
212 char *u = r + sizeof (qemu_prefix) - 1; 212 char *u = r + sizeof (qemu_prefix) - 1;
213 213
214 - strcpy (r, qemu_prefix);  
215 - strcat (r, s); 214 + pstrcpy (r, len + sizeof (qemu_prefix), qemu_prefix);
  215 + pstrcat (r, len, s);
216 216
217 for (i = 0; i < len; ++i) { 217 for (i = 0; i < len; ++i) {
218 u[i] = toupper (u[i]); 218 u[i] = toupper (u[i]);
@@ -430,7 +430,7 @@ static void audio_process_options (const char *prefix, @@ -430,7 +430,7 @@ static void audio_process_options (const char *prefix,
430 { 430 {
431 char *optname; 431 char *optname;
432 const char qemu_prefix[] = "QEMU_"; 432 const char qemu_prefix[] = "QEMU_";
433 - size_t preflen; 433 + size_t preflen, optlen;
434 434
435 if (audio_bug (AUDIO_FUNC, !prefix)) { 435 if (audio_bug (AUDIO_FUNC, !prefix)) {
436 dolog ("prefix = NULL\n"); 436 dolog ("prefix = NULL\n");
@@ -458,21 +458,25 @@ static void audio_process_options (const char *prefix, @@ -458,21 +458,25 @@ static void audio_process_options (const char *prefix,
458 /* len of opt->name + len of prefix + size of qemu_prefix 458 /* len of opt->name + len of prefix + size of qemu_prefix
459 * (includes trailing zero) + zero + underscore (on behalf of 459 * (includes trailing zero) + zero + underscore (on behalf of
460 * sizeof) */ 460 * sizeof) */
461 - optname = qemu_malloc (len + preflen + sizeof (qemu_prefix) + 1); 461 + optlen = len + preflen + sizeof (qemu_prefix) + 1;
  462 + optname = qemu_malloc (optlen);
462 if (!optname) { 463 if (!optname) {
463 dolog ("Could not allocate memory for option name `%s'\n", 464 dolog ("Could not allocate memory for option name `%s'\n",
464 opt->name); 465 opt->name);
465 continue; 466 continue;
466 } 467 }
467 468
468 - strcpy (optname, qemu_prefix); 469 + pstrcpy (optname, optlen, qemu_prefix);
  470 + optlen -= preflen;
469 471
470 /* copy while upper-casing, including trailing zero */ 472 /* copy while upper-casing, including trailing zero */
471 for (i = 0; i <= preflen; ++i) { 473 for (i = 0; i <= preflen; ++i) {
472 optname[i + sizeof (qemu_prefix) - 1] = toupper (prefix[i]); 474 optname[i + sizeof (qemu_prefix) - 1] = toupper (prefix[i]);
473 } 475 }
474 - strcat (optname, "_");  
475 - strcat (optname, opt->name); 476 + pstrcat (optname, optlen, "_");
  477 + optlen--;
  478 + pstrcat (optname, optlen, opt->name);
  479 + optlen -= len;
476 480
477 def = 1; 481 def = 1;
478 switch (opt->tag) { 482 switch (opt->tag) {
block-vmdk.c
@@ -153,11 +153,11 @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid) @@ -153,11 +153,11 @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid)
153 return -1; 153 return -1;
154 154
155 tmp_str = strstr(desc,"parentCID"); 155 tmp_str = strstr(desc,"parentCID");
156 - strcpy(tmp_desc, tmp_str); 156 + pstrcpy(tmp_desc, sizeof(tmp_desc), tmp_str);
157 if ((p_name = strstr(desc,"CID")) != 0) { 157 if ((p_name = strstr(desc,"CID")) != 0) {
158 p_name += sizeof("CID"); 158 p_name += sizeof("CID");
159 - sprintf(p_name,"%x\n",cid);  
160 - strcat(desc,tmp_desc); 159 + snprintf(p_name, sizeof(desc) - (p_name - desc), "%x\n", cid);
  160 + pstrcat(desc, sizeof(desc), tmp_desc);
161 } 161 }
162 162
163 if (bdrv_pwrite(s->hd, 0x200, desc, DESC_SIZE) != DESC_SIZE) 163 if (bdrv_pwrite(s->hd, 0x200, desc, DESC_SIZE) != DESC_SIZE)
@@ -252,8 +252,8 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file) @@ -252,8 +252,8 @@ static int vmdk_snapshot_create(const char *filename, const char *backing_file)
252 if ((temp_str = strrchr(real_filename, ':')) != NULL) 252 if ((temp_str = strrchr(real_filename, ':')) != NULL)
253 real_filename = temp_str + 1; 253 real_filename = temp_str + 1;
254 254
255 - sprintf(s_desc, desc_template, p_cid, p_cid, backing_file  
256 - , (uint32_t)header.capacity, real_filename); 255 + snprintf(s_desc, sizeof(s_desc), desc_template, p_cid, p_cid, backing_file,
  256 + (uint32_t)header.capacity, real_filename);
257 257
258 /* write the descriptor */ 258 /* write the descriptor */
259 if (lseek(snp_fd, 0x200, SEEK_SET) == -1) 259 if (lseek(snp_fd, 0x200, SEEK_SET) == -1)
@@ -349,7 +349,8 @@ static int vmdk_parent_open(BlockDriverState *bs, const char * filename) @@ -349,7 +349,8 @@ static int vmdk_parent_open(BlockDriverState *bs, const char * filename)
349 path_combine(parent_img_name, sizeof(parent_img_name), 349 path_combine(parent_img_name, sizeof(parent_img_name),
350 filename, s->hd->backing_file); 350 filename, s->hd->backing_file);
351 } else { 351 } else {
352 - strcpy(parent_img_name, s->hd->backing_file); 352 + pstrcpy(parent_img_name, sizeof(parent_img_name),
  353 + s->hd->backing_file);
353 } 354 }
354 355
355 s->hd->backing_hd = bdrv_new(""); 356 s->hd->backing_hd = bdrv_new("");
@@ -790,8 +791,8 @@ static int vmdk_create(const char *filename, int64_t total_size, @@ -790,8 +791,8 @@ static int vmdk_create(const char *filename, int64_t total_size,
790 real_filename = temp_str + 1; 791 real_filename = temp_str + 1;
791 if ((temp_str = strrchr(real_filename, ':')) != NULL) 792 if ((temp_str = strrchr(real_filename, ':')) != NULL)
792 real_filename = temp_str + 1; 793 real_filename = temp_str + 1;
793 - sprintf(desc, desc_template, time(NULL), (unsigned long)total_size,  
794 - real_filename, (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), total_size / (63 * 16)); 794 + snprintf(desc, sizeof(desc), desc_template, time(NULL), (unsigned long)total_size,
  795 + real_filename, (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), total_size / (63 * 16));
795 796
796 /* write the descriptor */ 797 /* write the descriptor */
797 lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET); 798 lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET);
block-vvfat.c
@@ -1733,7 +1733,7 @@ static int check_directory_consistency(BDRVVVFATState *s, @@ -1733,7 +1733,7 @@ static int check_directory_consistency(BDRVVVFATState *s,
1733 char path2[PATH_MAX]; 1733 char path2[PATH_MAX];
1734 1734
1735 assert(path_len < PATH_MAX); /* len was tested before! */ 1735 assert(path_len < PATH_MAX); /* len was tested before! */
1736 - strcpy(path2, path); 1736 + pstrcpy(path2, sizeof(path2), path);
1737 path2[path_len] = '/'; 1737 path2[path_len] = '/';
1738 path2[path_len + 1] = '\0'; 1738 path2[path_len + 1] = '\0';
1739 1739
@@ -1807,7 +1807,8 @@ DLOG(fprintf(stderr, &quot;check direntry %d: \n&quot;, i); print_direntry(direntries + i) @@ -1807,7 +1807,8 @@ DLOG(fprintf(stderr, &quot;check direntry %d: \n&quot;, i); print_direntry(direntries + i)
1807 fprintf(stderr, "Name too long: %s/%s\n", path, lfn.name); 1807 fprintf(stderr, "Name too long: %s/%s\n", path, lfn.name);
1808 goto fail; 1808 goto fail;
1809 } 1809 }
1810 - strcpy(path2 + path_len + 1, (char*)lfn.name); 1810 + pstrcpy(path2 + path_len + 1, sizeof(path2) - path_len - 1,
  1811 + (char*)lfn.name);
1811 1812
1812 if (is_directory(direntries + i)) { 1813 if (is_directory(direntries + i)) {
1813 if (begin_of_direntry(direntries + i) == 0) { 1814 if (begin_of_direntry(direntries + i) == 0) {
@@ -2372,8 +2373,9 @@ static int handle_renames_and_mkdirs(BDRVVVFATState* s) @@ -2372,8 +2373,9 @@ static int handle_renames_and_mkdirs(BDRVVVFATState* s)
2372 2373
2373 assert(!strncmp(m->path, mapping->path, l2)); 2374 assert(!strncmp(m->path, mapping->path, l2));
2374 2375
2375 - strcpy(new_path, mapping->path);  
2376 - strcpy(new_path + l1, m->path + l2); 2376 + pstrcpy(new_path, l + diff + 1, mapping->path);
  2377 + pstrcpy(new_path + l1, l + diff + 1 - l1,
  2378 + m->path + l2);
2377 2379
2378 schedule_rename(s, m->begin, new_path); 2380 schedule_rename(s, m->begin, new_path);
2379 } 2381 }
dis-asm.h
@@ -20,6 +20,7 @@ typedef uint64_t bfd_vma; @@ -20,6 +20,7 @@ typedef uint64_t bfd_vma;
20 typedef int64_t bfd_signed_vma; 20 typedef int64_t bfd_signed_vma;
21 typedef uint8_t bfd_byte; 21 typedef uint8_t bfd_byte;
22 #define sprintf_vma(s,x) sprintf (s, "%0" PRIx64, x) 22 #define sprintf_vma(s,x) sprintf (s, "%0" PRIx64, x)
  23 +#define snprintf_vma(s,ss,x) snprintf (s, ss, "%0" PRIx64, x)
23 24
24 #define BFD64 25 #define BFD64
25 26
gdbstub.c
@@ -1173,10 +1173,10 @@ static int gdb_handle_packet(GDBState *s, CPUState *env, const char *line_buf) @@ -1173,10 +1173,10 @@ static int gdb_handle_packet(GDBState *s, CPUState *env, const char *line_buf)
1173 /* parse any 'q' packets here */ 1173 /* parse any 'q' packets here */
1174 if (!strcmp(p,"qemu.sstepbits")) { 1174 if (!strcmp(p,"qemu.sstepbits")) {
1175 /* Query Breakpoint bit definitions */ 1175 /* Query Breakpoint bit definitions */
1176 - sprintf(buf,"ENABLE=%x,NOIRQ=%x,NOTIMER=%x",  
1177 - SSTEP_ENABLE,  
1178 - SSTEP_NOIRQ,  
1179 - SSTEP_NOTIMER); 1176 + snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
  1177 + SSTEP_ENABLE,
  1178 + SSTEP_NOIRQ,
  1179 + SSTEP_NOTIMER);
1180 put_packet(s, buf); 1180 put_packet(s, buf);
1181 break; 1181 break;
1182 } else if (strncmp(p,"qemu.sstep",10) == 0) { 1182 } else if (strncmp(p,"qemu.sstep",10) == 0) {
@@ -1184,7 +1184,7 @@ static int gdb_handle_packet(GDBState *s, CPUState *env, const char *line_buf) @@ -1184,7 +1184,7 @@ static int gdb_handle_packet(GDBState *s, CPUState *env, const char *line_buf)
1184 p += 10; 1184 p += 10;
1185 if (*p != '=') { 1185 if (*p != '=') {
1186 /* Display current setting */ 1186 /* Display current setting */
1187 - sprintf(buf,"0x%x", sstep_flags); 1187 + snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
1188 put_packet(s, buf); 1188 put_packet(s, buf);
1189 break; 1189 break;
1190 } 1190 }
@@ -1198,12 +1198,12 @@ static int gdb_handle_packet(GDBState *s, CPUState *env, const char *line_buf) @@ -1198,12 +1198,12 @@ static int gdb_handle_packet(GDBState *s, CPUState *env, const char *line_buf)
1198 else if (strncmp(p, "Offsets", 7) == 0) { 1198 else if (strncmp(p, "Offsets", 7) == 0) {
1199 TaskState *ts = env->opaque; 1199 TaskState *ts = env->opaque;
1200 1200
1201 - sprintf(buf,  
1202 - "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx  
1203 - ";Bss=" TARGET_ABI_FMT_lx,  
1204 - ts->info->code_offset,  
1205 - ts->info->data_offset,  
1206 - ts->info->data_offset); 1201 + snprintf(buf, sizeof(buf),
  1202 + "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
  1203 + ";Bss=" TARGET_ABI_FMT_lx,
  1204 + ts->info->code_offset,
  1205 + ts->info->data_offset,
  1206 + ts->info->data_offset);
1207 put_packet(s, buf); 1207 put_packet(s, buf);
1208 break; 1208 break;
1209 } 1209 }
@@ -1286,17 +1286,18 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, char *fmt, ...) @@ -1286,17 +1286,18 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, char *fmt, ...)
1286 switch (*fmt++) { 1286 switch (*fmt++) {
1287 case 'x': 1287 case 'x':
1288 addr = va_arg(va, target_ulong); 1288 addr = va_arg(va, target_ulong);
1289 - p += sprintf(p, TARGET_FMT_lx, addr); 1289 + p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx, addr);
1290 break; 1290 break;
1291 case 'l': 1291 case 'l':
1292 if (*(fmt++) != 'x') 1292 if (*(fmt++) != 'x')
1293 goto bad_format; 1293 goto bad_format;
1294 i64 = va_arg(va, uint64_t); 1294 i64 = va_arg(va, uint64_t);
1295 - p += sprintf(p, "%" PRIx64, i64); 1295 + p += snprintf(p, &buf[sizeof(buf)] - p, "%" PRIx64, i64);
1296 break; 1296 break;
1297 case 's': 1297 case 's':
1298 addr = va_arg(va, target_ulong); 1298 addr = va_arg(va, target_ulong);
1299 - p += sprintf(p, TARGET_FMT_lx "/%x", addr, va_arg(va, int)); 1299 + p += snprintf(p, &buf[sizeof(buf)] - p, TARGET_FMT_lx "/%x",
  1300 + addr, va_arg(va, int));
1300 break; 1301 break;
1301 default: 1302 default:
1302 bad_format: 1303 bad_format:
hw/sun4m.c
@@ -159,7 +159,8 @@ static int nvram_boot_set(void *opaque, const char *boot_device) @@ -159,7 +159,8 @@ static int nvram_boot_set(void *opaque, const char *boot_device)
159 for (i = 0; i < sizeof(image); i++) 159 for (i = 0; i < sizeof(image); i++)
160 image[i] = m48t59_read(nvram, i) & 0xff; 160 image[i] = m48t59_read(nvram, i) & 0xff;
161 161
162 - strcpy((char *)header->boot_devices, boot_device); 162 + pstrcpy((char *)header->boot_devices, sizeof(header->boot_devices),
  163 + boot_device);
163 header->nboot_devices = strlen(boot_device) & 0xff; 164 header->nboot_devices = strlen(boot_device) & 0xff;
164 header->crc = cpu_to_be16(OHW_compute_crc(header, 0x00, 0xF8)); 165 header->crc = cpu_to_be16(OHW_compute_crc(header, 0x00, 0xF8));
165 166
@@ -187,17 +188,19 @@ static void nvram_init(m48t59_t *nvram, uint8_t *macaddr, const char *cmdline, @@ -187,17 +188,19 @@ static void nvram_init(m48t59_t *nvram, uint8_t *macaddr, const char *cmdline,
187 memset(image, '\0', sizeof(image)); 188 memset(image, '\0', sizeof(image));
188 189
189 // Try to match PPC NVRAM 190 // Try to match PPC NVRAM
190 - strcpy((char *)header->struct_ident, "QEMU_BIOS"); 191 + pstrcpy((char *)header->struct_ident, sizeof(header->struct_ident),
  192 + "QEMU_BIOS");
191 header->struct_version = cpu_to_be32(3); /* structure v3 */ 193 header->struct_version = cpu_to_be32(3); /* structure v3 */
192 194
193 header->nvram_size = cpu_to_be16(0x2000); 195 header->nvram_size = cpu_to_be16(0x2000);
194 header->nvram_arch_ptr = cpu_to_be16(sizeof(ohwcfg_v3_t)); 196 header->nvram_arch_ptr = cpu_to_be16(sizeof(ohwcfg_v3_t));
195 header->nvram_arch_size = cpu_to_be16(sizeof(struct sparc_arch_cfg)); 197 header->nvram_arch_size = cpu_to_be16(sizeof(struct sparc_arch_cfg));
196 - strcpy((char *)header->arch, arch); 198 + pstrcpy((char *)header->arch, sizeof(header->arch), arch);
197 header->nb_cpus = smp_cpus & 0xff; 199 header->nb_cpus = smp_cpus & 0xff;
198 header->RAM0_base = 0; 200 header->RAM0_base = 0;
199 header->RAM0_size = cpu_to_be64((uint64_t)RAM_size); 201 header->RAM0_size = cpu_to_be64((uint64_t)RAM_size);
200 - strcpy((char *)header->boot_devices, boot_devices); 202 + pstrcpy((char *)header->boot_devices, sizeof(header->boot_devices),
  203 + boot_devices);
201 header->nboot_devices = strlen(boot_devices) & 0xff; 204 header->nboot_devices = strlen(boot_devices) & 0xff;
202 header->kernel_image = cpu_to_be64((uint64_t)KERNEL_LOAD_ADDR); 205 header->kernel_image = cpu_to_be64((uint64_t)KERNEL_LOAD_ADDR);
203 header->kernel_size = cpu_to_be64((uint64_t)kernel_size); 206 header->kernel_size = cpu_to_be64((uint64_t)kernel_size);
@@ -225,7 +228,7 @@ static void nvram_init(m48t59_t *nvram, uint8_t *macaddr, const char *cmdline, @@ -225,7 +228,7 @@ static void nvram_init(m48t59_t *nvram, uint8_t *macaddr, const char *cmdline,
225 // Variable partition 228 // Variable partition
226 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start]; 229 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
227 part_header->signature = OPENBIOS_PART_SYSTEM; 230 part_header->signature = OPENBIOS_PART_SYSTEM;
228 - strcpy(part_header->name, "system"); 231 + pstrcpy(part_header->name, sizeof(part_header->name), "system");
229 232
230 end = start + sizeof(struct OpenBIOS_nvpart_v1); 233 end = start + sizeof(struct OpenBIOS_nvpart_v1);
231 for (i = 0; i < nb_prom_envs; i++) 234 for (i = 0; i < nb_prom_envs; i++)
@@ -241,7 +244,7 @@ static void nvram_init(m48t59_t *nvram, uint8_t *macaddr, const char *cmdline, @@ -241,7 +244,7 @@ static void nvram_init(m48t59_t *nvram, uint8_t *macaddr, const char *cmdline,
241 start = end; 244 start = end;
242 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start]; 245 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
243 part_header->signature = OPENBIOS_PART_FREE; 246 part_header->signature = OPENBIOS_PART_FREE;
244 - strcpy(part_header->name, "free"); 247 + pstrcpy(part_header->name, sizeof(part_header->name), "free");
245 248
246 end = 0x1fd0; 249 end = 0x1fd0;
247 OpenBIOS_finish_partition(part_header, end - start); 250 OpenBIOS_finish_partition(part_header, end - start);
hw/sun4u.c
@@ -82,7 +82,8 @@ static int nvram_boot_set(void *opaque, const char *boot_device) @@ -82,7 +82,8 @@ static int nvram_boot_set(void *opaque, const char *boot_device)
82 for (i = 0; i < sizeof(image); i++) 82 for (i = 0; i < sizeof(image); i++)
83 image[i] = m48t59_read(nvram, i) & 0xff; 83 image[i] = m48t59_read(nvram, i) & 0xff;
84 84
85 - strcpy((char *)header->boot_devices, boot_device); 85 + pstrcpy((char *)header->boot_devices, sizeof(header->boot_devices),
  86 + boot_device);
86 header->nboot_devices = strlen(boot_device) & 0xff; 87 header->nboot_devices = strlen(boot_device) & 0xff;
87 header->crc = cpu_to_be16(OHW_compute_crc(header, 0x00, 0xF8)); 88 header->crc = cpu_to_be16(OHW_compute_crc(header, 0x00, 0xF8));
88 89
@@ -115,17 +116,19 @@ static int sun4u_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size, @@ -115,17 +116,19 @@ static int sun4u_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
115 memset(image, '\0', sizeof(image)); 116 memset(image, '\0', sizeof(image));
116 117
117 // Try to match PPC NVRAM 118 // Try to match PPC NVRAM
118 - strcpy((char *)header->struct_ident, "QEMU_BIOS"); 119 + pstrcpy((char *)header->struct_ident, sizeof(header->struct_ident),
  120 + "QEMU_BIOS");
119 header->struct_version = cpu_to_be32(3); /* structure v3 */ 121 header->struct_version = cpu_to_be32(3); /* structure v3 */
120 122
121 header->nvram_size = cpu_to_be16(NVRAM_size); 123 header->nvram_size = cpu_to_be16(NVRAM_size);
122 header->nvram_arch_ptr = cpu_to_be16(sizeof(ohwcfg_v3_t)); 124 header->nvram_arch_ptr = cpu_to_be16(sizeof(ohwcfg_v3_t));
123 header->nvram_arch_size = cpu_to_be16(sizeof(struct sparc_arch_cfg)); 125 header->nvram_arch_size = cpu_to_be16(sizeof(struct sparc_arch_cfg));
124 - strcpy((char *)header->arch, arch); 126 + pstrcpy((char *)header->arch, sizeof(header->arch), arch);
125 header->nb_cpus = smp_cpus & 0xff; 127 header->nb_cpus = smp_cpus & 0xff;
126 header->RAM0_base = 0; 128 header->RAM0_base = 0;
127 header->RAM0_size = cpu_to_be64((uint64_t)RAM_size); 129 header->RAM0_size = cpu_to_be64((uint64_t)RAM_size);
128 - strcpy((char *)header->boot_devices, boot_devices); 130 + pstrcpy((char *)header->boot_devices, sizeof(header->boot_devices),
  131 + boot_devices);
129 header->nboot_devices = strlen(boot_devices) & 0xff; 132 header->nboot_devices = strlen(boot_devices) & 0xff;
130 header->kernel_image = cpu_to_be64((uint64_t)kernel_image); 133 header->kernel_image = cpu_to_be64((uint64_t)kernel_image);
131 header->kernel_size = cpu_to_be64((uint64_t)kernel_size); 134 header->kernel_size = cpu_to_be64((uint64_t)kernel_size);
@@ -156,7 +159,7 @@ static int sun4u_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size, @@ -156,7 +159,7 @@ static int sun4u_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
156 // Variable partition 159 // Variable partition
157 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start]; 160 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
158 part_header->signature = OPENBIOS_PART_SYSTEM; 161 part_header->signature = OPENBIOS_PART_SYSTEM;
159 - strcpy(part_header->name, "system"); 162 + pstrcpy(part_header->name, sizeof(part_header->name), "system");
160 163
161 end = start + sizeof(struct OpenBIOS_nvpart_v1); 164 end = start + sizeof(struct OpenBIOS_nvpart_v1);
162 for (i = 0; i < nb_prom_envs; i++) 165 for (i = 0; i < nb_prom_envs; i++)
@@ -172,7 +175,7 @@ static int sun4u_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size, @@ -172,7 +175,7 @@ static int sun4u_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
172 start = end; 175 start = end;
173 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start]; 176 part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
174 part_header->signature = OPENBIOS_PART_FREE; 177 part_header->signature = OPENBIOS_PART_FREE;
175 - strcpy(part_header->name, "free"); 178 + pstrcpy(part_header->name, sizeof(part_header->name), "free");
176 179
177 end = 0x1fd0; 180 end = 0x1fd0;
178 OpenBIOS_finish_partition(part_header, end - start); 181 OpenBIOS_finish_partition(part_header, end - start);
hw/usb-net.c
@@ -625,7 +625,8 @@ typedef struct USBNetState { @@ -625,7 +625,8 @@ typedef struct USBNetState {
625 } USBNetState; 625 } USBNetState;
626 626
627 static int ndis_query(USBNetState *s, uint32_t oid, 627 static int ndis_query(USBNetState *s, uint32_t oid,
628 - uint8_t *inbuf, unsigned int inlen, uint8_t *outbuf) 628 + uint8_t *inbuf, unsigned int inlen, uint8_t *outbuf,
  629 + size_t outlen)
629 { 630 {
630 unsigned int i, count; 631 unsigned int i, count;
631 632
@@ -680,7 +681,7 @@ static int ndis_query(USBNetState *s, uint32_t oid, @@ -680,7 +681,7 @@ static int ndis_query(USBNetState *s, uint32_t oid,
680 681
681 /* mandatory */ 682 /* mandatory */
682 case OID_GEN_VENDOR_DESCRIPTION: 683 case OID_GEN_VENDOR_DESCRIPTION:
683 - strcpy(outbuf, "QEMU USB RNDIS Net"); 684 + pstrcpy(outbuf, outlen, "QEMU USB RNDIS Net");
684 return strlen(outbuf) + 1; 685 return strlen(outbuf) + 1;
685 686
686 case OID_GEN_VENDOR_DRIVER_VERSION: 687 case OID_GEN_VENDOR_DRIVER_VERSION:
@@ -882,7 +883,8 @@ static int rndis_query_response(USBNetState *s, @@ -882,7 +883,8 @@ static int rndis_query_response(USBNetState *s,
882 return USB_RET_STALL; 883 return USB_RET_STALL;
883 884
884 infobuflen = ndis_query(s, le32_to_cpu(buf->OID), 885 infobuflen = ndis_query(s, le32_to_cpu(buf->OID),
885 - bufoffs + (uint8_t *) buf, buflen, infobuf); 886 + bufoffs + (uint8_t *) buf, buflen, infobuf,
  887 + sizeof(infobuf));
886 resplen = sizeof(rndis_query_cmplt_type) + 888 resplen = sizeof(rndis_query_cmplt_type) +
887 ((infobuflen < 0) ? 0 : infobuflen); 889 ((infobuflen < 0) ? 0 : infobuflen);
888 resp = rndis_queue_response(s, resplen); 890 resp = rndis_queue_response(s, resplen);
hw/vga.c
@@ -1726,7 +1726,8 @@ static void vga_update_text(void *opaque, console_ch_t *chardata) @@ -1726,7 +1726,8 @@ static void vga_update_text(void *opaque, console_ch_t *chardata)
1726 if (!full_update) 1726 if (!full_update)
1727 return; 1727 return;
1728 1728
1729 - sprintf(msg_buffer, "%i x %i Text mode", width, height); 1729 + snprintf(msg_buffer, sizeof(msg_buffer), "%i x %i Text mode",
  1730 + width, height);
1730 break; 1731 break;
1731 } 1732 }
1732 1733
@@ -1799,14 +1800,15 @@ static void vga_update_text(void *opaque, console_ch_t *chardata) @@ -1799,14 +1800,15 @@ static void vga_update_text(void *opaque, console_ch_t *chardata)
1799 return; 1800 return;
1800 1801
1801 s->get_resolution(s, &width, &height); 1802 s->get_resolution(s, &width, &height);
1802 - sprintf(msg_buffer, "%i x %i Graphic mode", width, height); 1803 + snprintf(msg_buffer, sizeof(msg_buffer), "%i x %i Graphic mode",
  1804 + width, height);
1803 break; 1805 break;
1804 case GMODE_BLANK: 1806 case GMODE_BLANK:
1805 default: 1807 default:
1806 if (!full_update) 1808 if (!full_update)
1807 return; 1809 return;
1808 1810
1809 - sprintf(msg_buffer, "VGA Blank mode"); 1811 + snprintf(msg_buffer, sizeof(msg_buffer), "VGA Blank mode");
1810 break; 1812 break;
1811 } 1813 }
1812 1814
i386-dis.c
@@ -37,6 +37,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -37,6 +37,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
37 37
38 #include <stdlib.h> 38 #include <stdlib.h>
39 #include "dis-asm.h" 39 #include "dis-asm.h"
  40 +#include "qemu-common.h"
40 41
41 #define MAXLEN 20 42 #define MAXLEN 20
42 43
@@ -59,7 +60,8 @@ static int putop PARAMS ((const char *, int)); @@ -59,7 +60,8 @@ static int putop PARAMS ((const char *, int));
59 static void oappend PARAMS ((const char *)); 60 static void oappend PARAMS ((const char *));
60 static void append_seg PARAMS ((void)); 61 static void append_seg PARAMS ((void));
61 static void OP_indirE PARAMS ((int, int)); 62 static void OP_indirE PARAMS ((int, int));
62 -static void print_operand_value PARAMS ((char *, int, bfd_vma)); 63 +static void print_operand_value (char *buf, size_t bufsize, int hex,
  64 + bfd_vma disp);
63 static void OP_E PARAMS ((int, int)); 65 static void OP_E PARAMS ((int, int));
64 static void OP_G PARAMS ((int, int)); 66 static void OP_G PARAMS ((int, int));
65 static bfd_vma get64 PARAMS ((void)); 67 static bfd_vma get64 PARAMS ((void));
@@ -2512,7 +2514,7 @@ dofloat (sizeflag) @@ -2512,7 +2514,7 @@ dofloat (sizeflag)
2512 2514
2513 /* Instruction fnstsw is only one with strange arg. */ 2515 /* Instruction fnstsw is only one with strange arg. */
2514 if (floatop == 0xdf && codep[-1] == 0xe0) 2516 if (floatop == 0xdf && codep[-1] == 0xe0)
2515 - strcpy (op1out, names16[0]); 2517 + pstrcpy (op1out, sizeof(op1out), names16[0]);
2516 } 2518 }
2517 else 2519 else
2518 { 2520 {
@@ -2540,7 +2542,7 @@ OP_STi (bytemode, sizeflag) @@ -2540,7 +2542,7 @@ OP_STi (bytemode, sizeflag)
2540 int bytemode; 2542 int bytemode;
2541 int sizeflag; 2543 int sizeflag;
2542 { 2544 {
2543 - sprintf (scratchbuf, "%%st(%d)", rm); 2545 + snprintf (scratchbuf, sizeof(scratchbuf), "%%st(%d)", rm);
2544 oappend (scratchbuf + intel_syntax); 2546 oappend (scratchbuf + intel_syntax);
2545 } 2547 }
2546 2548
@@ -2573,7 +2575,7 @@ putop (template, sizeflag) @@ -2573,7 +2575,7 @@ putop (template, sizeflag)
2573 if (*p == '}') 2575 if (*p == '}')
2574 { 2576 {
2575 /* Alternative not valid. */ 2577 /* Alternative not valid. */
2576 - strcpy (obuf, "(bad)"); 2578 + pstrcpy (obuf, sizeof(obuf), "(bad)");
2577 obufp = obuf + 5; 2579 obufp = obuf + 5;
2578 return 1; 2580 return 1;
2579 } 2581 }
@@ -2824,7 +2826,7 @@ static void @@ -2824,7 +2826,7 @@ static void
2824 oappend (s) 2826 oappend (s)
2825 const char *s; 2827 const char *s;
2826 { 2828 {
2827 - strcpy (obufp, s); 2829 + pstrcpy (obufp, (size_t)(obufp - obuf), s);
2828 obufp += strlen (s); 2830 obufp += strlen (s);
2829 } 2831 }
2830 2832
@@ -2874,10 +2876,7 @@ OP_indirE (bytemode, sizeflag) @@ -2874,10 +2876,7 @@ OP_indirE (bytemode, sizeflag)
2874 } 2876 }
2875 2877
2876 static void 2878 static void
2877 -print_operand_value (buf, hex, disp)  
2878 - char *buf;  
2879 - int hex;  
2880 - bfd_vma disp; 2879 +print_operand_value (char *buf, size_t bufsize, int hex, bfd_vma disp)
2881 { 2880 {
2882 if (mode_64bit) 2881 if (mode_64bit)
2883 { 2882 {
@@ -2887,9 +2886,9 @@ print_operand_value (buf, hex, disp) @@ -2887,9 +2886,9 @@ print_operand_value (buf, hex, disp)
2887 int i; 2886 int i;
2888 buf[0] = '0'; 2887 buf[0] = '0';
2889 buf[1] = 'x'; 2888 buf[1] = 'x';
2890 - sprintf_vma (tmp, disp); 2889 + snprintf_vma (tmp, sizeof(tmp), disp);
2891 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++); 2890 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
2892 - strcpy (buf + 2, tmp + i); 2891 + pstrcpy (buf + 2, bufsize - 2, tmp + i);
2893 } 2892 }
2894 else 2893 else
2895 { 2894 {
@@ -2903,13 +2902,13 @@ print_operand_value (buf, hex, disp) @@ -2903,13 +2902,13 @@ print_operand_value (buf, hex, disp)
2903 /* Check for possible overflow on 0x8000000000000000. */ 2902 /* Check for possible overflow on 0x8000000000000000. */
2904 if (v < 0) 2903 if (v < 0)
2905 { 2904 {
2906 - strcpy (buf, "9223372036854775808"); 2905 + pstrcpy (buf, bufsize, "9223372036854775808");
2907 return; 2906 return;
2908 } 2907 }
2909 } 2908 }
2910 if (!v) 2909 if (!v)
2911 { 2910 {
2912 - strcpy (buf, "0"); 2911 + pstrcpy (buf, bufsize, "0");
2913 return; 2912 return;
2914 } 2913 }
2915 2914
@@ -2921,15 +2920,15 @@ print_operand_value (buf, hex, disp) @@ -2921,15 +2920,15 @@ print_operand_value (buf, hex, disp)
2921 v /= 10; 2920 v /= 10;
2922 i++; 2921 i++;
2923 } 2922 }
2924 - strcpy (buf, tmp + 29 - i); 2923 + pstrcpy (buf, bufsize, tmp + 29 - i);
2925 } 2924 }
2926 } 2925 }
2927 else 2926 else
2928 { 2927 {
2929 if (hex) 2928 if (hex)
2930 - sprintf (buf, "0x%x", (unsigned int) disp); 2929 + snprintf (buf, bufsize, "0x%x", (unsigned int) disp);
2931 else 2930 else
2932 - sprintf (buf, "%d", (int) disp); 2931 + snprintf (buf, bufsize, "%d", (int) disp);
2933 } 2932 }
2934 } 2933 }
2935 2934
@@ -3054,7 +3053,7 @@ OP_E (bytemode, sizeflag) @@ -3054,7 +3053,7 @@ OP_E (bytemode, sizeflag)
3054 if (!intel_syntax) 3053 if (!intel_syntax)
3055 if (mod != 0 || (base & 7) == 5) 3054 if (mod != 0 || (base & 7) == 5)
3056 { 3055 {
3057 - print_operand_value (scratchbuf, !riprel, disp); 3056 + print_operand_value (scratchbuf, sizeof(scratchbuf), !riprel, disp);
3058 oappend (scratchbuf); 3057 oappend (scratchbuf);
3059 if (riprel) 3058 if (riprel)
3060 { 3059 {
@@ -3115,14 +3114,14 @@ OP_E (bytemode, sizeflag) @@ -3115,14 +3114,14 @@ OP_E (bytemode, sizeflag)
3115 *obufp++ = separator_char; 3114 *obufp++ = separator_char;
3116 *obufp = '\0'; 3115 *obufp = '\0';
3117 } 3116 }
3118 - sprintf (scratchbuf, "%s",  
3119 - mode_64bit && (sizeflag & AFLAG)  
3120 - ? names64[index] : names32[index]); 3117 + snprintf (scratchbuf, sizeof(scratchbuf), "%s",
  3118 + mode_64bit && (sizeflag & AFLAG)
  3119 + ? names64[index] : names32[index]);
3121 } 3120 }
3122 else 3121 else
3123 - sprintf (scratchbuf, ",%s",  
3124 - mode_64bit && (sizeflag & AFLAG)  
3125 - ? names64[index] : names32[index]); 3122 + snprintf (scratchbuf, sizeof(scratchbuf), ",%s",
  3123 + mode_64bit && (sizeflag & AFLAG)
  3124 + ? names64[index] : names32[index]);
3126 oappend (scratchbuf); 3125 oappend (scratchbuf);
3127 } 3126 }
3128 if (!intel_syntax 3127 if (!intel_syntax
@@ -3133,7 +3132,7 @@ OP_E (bytemode, sizeflag) @@ -3133,7 +3132,7 @@ OP_E (bytemode, sizeflag)
3133 { 3132 {
3134 *obufp++ = scale_char; 3133 *obufp++ = scale_char;
3135 *obufp = '\0'; 3134 *obufp = '\0';
3136 - sprintf (scratchbuf, "%d", 1 << scale); 3135 + snprintf (scratchbuf, sizeof(scratchbuf), "%d", 1 << scale);
3137 oappend (scratchbuf); 3136 oappend (scratchbuf);
3138 } 3137 }
3139 } 3138 }
@@ -3149,7 +3148,8 @@ OP_E (bytemode, sizeflag) @@ -3149,7 +3148,8 @@ OP_E (bytemode, sizeflag)
3149 *obufp = '\0'; 3148 *obufp = '\0';
3150 } 3149 }
3151 3150
3152 - print_operand_value (scratchbuf, 0, disp); 3151 + print_operand_value (scratchbuf, sizeof(scratchbuf), 0,
  3152 + disp);
3153 oappend (scratchbuf); 3153 oappend (scratchbuf);
3154 } 3154 }
3155 } 3155 }
@@ -3169,7 +3169,7 @@ OP_E (bytemode, sizeflag) @@ -3169,7 +3169,7 @@ OP_E (bytemode, sizeflag)
3169 oappend (names_seg[ds_reg - es_reg]); 3169 oappend (names_seg[ds_reg - es_reg]);
3170 oappend (":"); 3170 oappend (":");
3171 } 3171 }
3172 - print_operand_value (scratchbuf, 1, disp); 3172 + print_operand_value (scratchbuf, sizeof(scratchbuf), 1, disp);
3173 oappend (scratchbuf); 3173 oappend (scratchbuf);
3174 } 3174 }
3175 } 3175 }
@@ -3202,7 +3202,7 @@ OP_E (bytemode, sizeflag) @@ -3202,7 +3202,7 @@ OP_E (bytemode, sizeflag)
3202 if (!intel_syntax) 3202 if (!intel_syntax)
3203 if (mod != 0 || (rm & 7) == 6) 3203 if (mod != 0 || (rm & 7) == 6)
3204 { 3204 {
3205 - print_operand_value (scratchbuf, 0, disp); 3205 + print_operand_value (scratchbuf, sizeof(scratchbuf), 0, disp);
3206 oappend (scratchbuf); 3206 oappend (scratchbuf);
3207 } 3207 }
3208 3208
@@ -3504,7 +3504,7 @@ OP_I (bytemode, sizeflag) @@ -3504,7 +3504,7 @@ OP_I (bytemode, sizeflag)
3504 3504
3505 op &= mask; 3505 op &= mask;
3506 scratchbuf[0] = '$'; 3506 scratchbuf[0] = '$';
3507 - print_operand_value (scratchbuf + 1, 1, op); 3507 + print_operand_value (scratchbuf + 1, sizeof(scratchbuf) - 1, 1, op);
3508 oappend (scratchbuf + intel_syntax); 3508 oappend (scratchbuf + intel_syntax);
3509 scratchbuf[0] = '\0'; 3509 scratchbuf[0] = '\0';
3510 } 3510 }
@@ -3557,7 +3557,7 @@ OP_I64 (bytemode, sizeflag) @@ -3557,7 +3557,7 @@ OP_I64 (bytemode, sizeflag)
3557 3557
3558 op &= mask; 3558 op &= mask;
3559 scratchbuf[0] = '$'; 3559 scratchbuf[0] = '$';
3560 - print_operand_value (scratchbuf + 1, 1, op); 3560 + print_operand_value (scratchbuf + 1, sizeof(scratchbuf) - 1, 1, op);
3561 oappend (scratchbuf + intel_syntax); 3561 oappend (scratchbuf + intel_syntax);
3562 scratchbuf[0] = '\0'; 3562 scratchbuf[0] = '\0';
3563 } 3563 }
@@ -3609,7 +3609,7 @@ OP_sI (bytemode, sizeflag) @@ -3609,7 +3609,7 @@ OP_sI (bytemode, sizeflag)
3609 } 3609 }
3610 3610
3611 scratchbuf[0] = '$'; 3611 scratchbuf[0] = '$';
3612 - print_operand_value (scratchbuf + 1, 1, op); 3612 + print_operand_value (scratchbuf + 1, sizeof(scratchbuf) - 1, 1, op);
3613 oappend (scratchbuf + intel_syntax); 3613 oappend (scratchbuf + intel_syntax);
3614 } 3614 }
3615 3615
@@ -3647,7 +3647,7 @@ OP_J (bytemode, sizeflag) @@ -3647,7 +3647,7 @@ OP_J (bytemode, sizeflag)
3647 } 3647 }
3648 disp = (start_pc + codep - start_codep + disp) & mask; 3648 disp = (start_pc + codep - start_codep + disp) & mask;
3649 set_op (disp, 0); 3649 set_op (disp, 0);
3650 - print_operand_value (scratchbuf, 1, disp); 3650 + print_operand_value (scratchbuf, sizeof(scratchbuf), 1, disp);
3651 oappend (scratchbuf); 3651 oappend (scratchbuf);
3652 } 3652 }
3653 3653
@@ -3678,9 +3678,9 @@ OP_DIR (dummy, sizeflag) @@ -3678,9 +3678,9 @@ OP_DIR (dummy, sizeflag)
3678 } 3678 }
3679 used_prefixes |= (prefixes & PREFIX_DATA); 3679 used_prefixes |= (prefixes & PREFIX_DATA);
3680 if (intel_syntax) 3680 if (intel_syntax)
3681 - sprintf (scratchbuf, "0x%x,0x%x", seg, offset); 3681 + snprintf (scratchbuf, sizeof(scratchbuf), "0x%x,0x%x", seg, offset);
3682 else 3682 else
3683 - sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset); 3683 + snprintf (scratchbuf, sizeof(scratchbuf), "$0x%x,$0x%x", seg, offset);
3684 oappend (scratchbuf); 3684 oappend (scratchbuf);
3685 } 3685 }
3686 3686
@@ -3707,7 +3707,7 @@ OP_OFF (bytemode, sizeflag) @@ -3707,7 +3707,7 @@ OP_OFF (bytemode, sizeflag)
3707 oappend (":"); 3707 oappend (":");
3708 } 3708 }
3709 } 3709 }
3710 - print_operand_value (scratchbuf, 1, off); 3710 + print_operand_value (scratchbuf, sizeof(scratchbuf), 1, off);
3711 oappend (scratchbuf); 3711 oappend (scratchbuf);
3712 } 3712 }
3713 3713
@@ -3737,7 +3737,7 @@ OP_OFF64 (bytemode, sizeflag) @@ -3737,7 +3737,7 @@ OP_OFF64 (bytemode, sizeflag)
3737 oappend (":"); 3737 oappend (":");
3738 } 3738 }
3739 } 3739 }
3740 - print_operand_value (scratchbuf, 1, off); 3740 + print_operand_value (scratchbuf, sizeof(scratchbuf), 1, off);
3741 oappend (scratchbuf); 3741 oappend (scratchbuf);
3742 } 3742 }
3743 3743
@@ -3806,7 +3806,7 @@ OP_C (dummy, sizeflag) @@ -3806,7 +3806,7 @@ OP_C (dummy, sizeflag)
3806 USED_REX (REX_EXTX); 3806 USED_REX (REX_EXTX);
3807 if (rex & REX_EXTX) 3807 if (rex & REX_EXTX)
3808 add = 8; 3808 add = 8;
3809 - sprintf (scratchbuf, "%%cr%d", reg + add); 3809 + snprintf (scratchbuf, sizeof(scratchbuf), "%%cr%d", reg + add);
3810 oappend (scratchbuf + intel_syntax); 3810 oappend (scratchbuf + intel_syntax);
3811 } 3811 }
3812 3812
@@ -3820,9 +3820,9 @@ OP_D (dummy, sizeflag) @@ -3820,9 +3820,9 @@ OP_D (dummy, sizeflag)
3820 if (rex & REX_EXTX) 3820 if (rex & REX_EXTX)
3821 add = 8; 3821 add = 8;
3822 if (intel_syntax) 3822 if (intel_syntax)
3823 - sprintf (scratchbuf, "db%d", reg + add); 3823 + snprintf (scratchbuf, sizeof(scratchbuf), "db%d", reg + add);
3824 else 3824 else
3825 - sprintf (scratchbuf, "%%db%d", reg + add); 3825 + snprintf (scratchbuf, sizeof(scratchbuf), "%%db%d", reg + add);
3826 oappend (scratchbuf); 3826 oappend (scratchbuf);
3827 } 3827 }
3828 3828
@@ -3831,7 +3831,7 @@ OP_T (dummy, sizeflag) @@ -3831,7 +3831,7 @@ OP_T (dummy, sizeflag)
3831 int dummy; 3831 int dummy;
3832 int sizeflag; 3832 int sizeflag;
3833 { 3833 {
3834 - sprintf (scratchbuf, "%%tr%d", reg); 3834 + snprintf (scratchbuf, sizeof(scratchbuf), "%%tr%d", reg);
3835 oappend (scratchbuf + intel_syntax); 3835 oappend (scratchbuf + intel_syntax);
3836 } 3836 }
3837 3837
@@ -3857,9 +3857,9 @@ OP_MMX (bytemode, sizeflag) @@ -3857,9 +3857,9 @@ OP_MMX (bytemode, sizeflag)
3857 add = 8; 3857 add = 8;
3858 used_prefixes |= (prefixes & PREFIX_DATA); 3858 used_prefixes |= (prefixes & PREFIX_DATA);
3859 if (prefixes & PREFIX_DATA) 3859 if (prefixes & PREFIX_DATA)
3860 - sprintf (scratchbuf, "%%xmm%d", reg + add); 3860 + snprintf (scratchbuf, sizeof(scratchbuf), "%%xmm%d", reg + add);
3861 else 3861 else
3862 - sprintf (scratchbuf, "%%mm%d", reg + add); 3862 + snprintf (scratchbuf, sizeof(scratchbuf), "%%mm%d", reg + add);
3863 oappend (scratchbuf + intel_syntax); 3863 oappend (scratchbuf + intel_syntax);
3864 } 3864 }
3865 3865
@@ -3872,7 +3872,7 @@ OP_XMM (bytemode, sizeflag) @@ -3872,7 +3872,7 @@ OP_XMM (bytemode, sizeflag)
3872 USED_REX (REX_EXTX); 3872 USED_REX (REX_EXTX);
3873 if (rex & REX_EXTX) 3873 if (rex & REX_EXTX)
3874 add = 8; 3874 add = 8;
3875 - sprintf (scratchbuf, "%%xmm%d", reg + add); 3875 + snprintf (scratchbuf, sizeof(scratchbuf), "%%xmm%d", reg + add);
3876 oappend (scratchbuf + intel_syntax); 3876 oappend (scratchbuf + intel_syntax);
3877 } 3877 }
3878 3878
@@ -3896,9 +3896,9 @@ OP_EM (bytemode, sizeflag) @@ -3896,9 +3896,9 @@ OP_EM (bytemode, sizeflag)
3896 codep++; 3896 codep++;
3897 used_prefixes |= (prefixes & PREFIX_DATA); 3897 used_prefixes |= (prefixes & PREFIX_DATA);
3898 if (prefixes & PREFIX_DATA) 3898 if (prefixes & PREFIX_DATA)
3899 - sprintf (scratchbuf, "%%xmm%d", rm + add); 3899 + snprintf (scratchbuf, sizeof(scratchbuf), "%%xmm%d", rm + add);
3900 else 3900 else
3901 - sprintf (scratchbuf, "%%mm%d", rm + add); 3901 + snprintf (scratchbuf, sizeof(scratchbuf), "%%mm%d", rm + add);
3902 oappend (scratchbuf + intel_syntax); 3902 oappend (scratchbuf + intel_syntax);
3903 } 3903 }
3904 3904
@@ -3920,7 +3920,7 @@ OP_EX (bytemode, sizeflag) @@ -3920,7 +3920,7 @@ OP_EX (bytemode, sizeflag)
3920 /* Skip mod/rm byte. */ 3920 /* Skip mod/rm byte. */
3921 MODRM_CHECK; 3921 MODRM_CHECK;
3922 codep++; 3922 codep++;
3923 - sprintf (scratchbuf, "%%xmm%d", rm + add); 3923 + snprintf (scratchbuf, sizeof(scratchbuf), "%%xmm%d", rm + add);
3924 oappend (scratchbuf + intel_syntax); 3924 oappend (scratchbuf + intel_syntax);
3925 } 3925 }
3926 3926
@@ -4079,8 +4079,8 @@ OP_SIMD_Suffix (bytemode, sizeflag) @@ -4079,8 +4079,8 @@ OP_SIMD_Suffix (bytemode, sizeflag)
4079 suffix1 = 's', suffix2 = 'd'; 4079 suffix1 = 's', suffix2 = 'd';
4080 } 4080 }
4081 } 4081 }
4082 - sprintf (scratchbuf, "cmp%s%c%c",  
4083 - simd_cmp_op[cmp_type], suffix1, suffix2); 4082 + snprintf (scratchbuf, sizeof(scratchbuf), "cmp%s%c%c",
  4083 + simd_cmp_op[cmp_type], suffix1, suffix2);
4084 used_prefixes |= (prefixes & PREFIX_REPZ); 4084 used_prefixes |= (prefixes & PREFIX_REPZ);
4085 oappend (scratchbuf); 4085 oappend (scratchbuf);
4086 } 4086 }
monitor.c
@@ -2251,7 +2251,7 @@ static void monitor_handle_command(const char *cmdline) @@ -2251,7 +2251,7 @@ static void monitor_handle_command(const char *cmdline)
2251 goto fail; 2251 goto fail;
2252 } 2252 }
2253 str = qemu_malloc(strlen(buf) + 1); 2253 str = qemu_malloc(strlen(buf) + 1);
2254 - strcpy(str, buf); 2254 + pstrcpy(str, sizeof(buf), buf);
2255 str_allocated[nb_args] = str; 2255 str_allocated[nb_args] = str;
2256 add_str: 2256 add_str:
2257 if (nb_args >= MAX_ARGS) { 2257 if (nb_args >= MAX_ARGS) {
@@ -2518,7 +2518,7 @@ static void file_completion(const char *input) @@ -2518,7 +2518,7 @@ static void file_completion(const char *input)
2518 if (!p) { 2518 if (!p) {
2519 input_path_len = 0; 2519 input_path_len = 0;
2520 pstrcpy(file_prefix, sizeof(file_prefix), input); 2520 pstrcpy(file_prefix, sizeof(file_prefix), input);
2521 - strcpy(path, "."); 2521 + pstrcpy(path, sizeof(path), ".");
2522 } else { 2522 } else {
2523 input_path_len = p - input + 1; 2523 input_path_len = p - input + 1;
2524 memcpy(path, input, input_path_len); 2524 memcpy(path, input, input_path_len);
@@ -2540,13 +2540,15 @@ static void file_completion(const char *input) @@ -2540,13 +2540,15 @@ static void file_completion(const char *input)
2540 break; 2540 break;
2541 if (strstart(d->d_name, file_prefix, NULL)) { 2541 if (strstart(d->d_name, file_prefix, NULL)) {
2542 memcpy(file, input, input_path_len); 2542 memcpy(file, input, input_path_len);
2543 - strcpy(file + input_path_len, d->d_name); 2543 + if (input_path_len < sizeof(file))
  2544 + pstrcpy(file + input_path_len, sizeof(file) - input_path_len,
  2545 + d->d_name);
2544 /* stat the file to find out if it's a directory. 2546 /* stat the file to find out if it's a directory.
2545 * In that case add a slash to speed up typing long paths 2547 * In that case add a slash to speed up typing long paths
2546 */ 2548 */
2547 stat(file, &sb); 2549 stat(file, &sb);
2548 if(S_ISDIR(sb.st_mode)) 2550 if(S_ISDIR(sb.st_mode))
2549 - strcat(file, "/"); 2551 + pstrcat(file, sizeof(file), "/");
2550 add_completion(file); 2552 add_completion(file);
2551 } 2553 }
2552 } 2554 }
qemu-malloc.c
@@ -56,9 +56,10 @@ void *qemu_mallocz(size_t size) @@ -56,9 +56,10 @@ void *qemu_mallocz(size_t size)
56 char *qemu_strdup(const char *str) 56 char *qemu_strdup(const char *str)
57 { 57 {
58 char *ptr; 58 char *ptr;
59 - ptr = qemu_malloc(strlen(str) + 1); 59 + size_t len = strlen(str);
  60 + ptr = qemu_malloc(len + 1);
60 if (!ptr) 61 if (!ptr)
61 return NULL; 62 return NULL;
62 - strcpy(ptr, str); 63 + pstrcpy(ptr, len, str);
63 return ptr; 64 return ptr;
64 } 65 }
slirp/misc.c
@@ -417,8 +417,9 @@ fork_exec(struct socket *so, const char *ex, int do_pty) @@ -417,8 +417,9 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
417 { 417 {
418 char buff[256]; 418 char buff[256];
419 419
420 - sprintf(buff, "Error: execvp of %s failed: %s\n",  
421 - argv[0], strerror(errno)); 420 + snprintf(buff, sizeof(buff),
  421 + "Error: execvp of %s failed: %s\n",
  422 + argv[0], strerror(errno));
422 write(2, buff, strlen(buff)+1); 423 write(2, buff, strlen(buff)+1);
423 } 424 }
424 close(0); close(1); close(2); /* XXX */ 425 close(0); close(1); close(2); /* XXX */
slirp/slirp.c
@@ -84,7 +84,7 @@ static int get_dns_addr(struct in_addr *pdns_addr) @@ -84,7 +84,7 @@ static int get_dns_addr(struct in_addr *pdns_addr)
84 static int get_dns_addr(struct in_addr *pdns_addr) 84 static int get_dns_addr(struct in_addr *pdns_addr)
85 { 85 {
86 char buff[512]; 86 char buff[512];
87 - char buff2[256]; 87 + char buff2[257];
88 FILE *f; 88 FILE *f;
89 int found = 0; 89 int found = 0;
90 struct in_addr tmp_addr; 90 struct in_addr tmp_addr;
slirp/tcp_subr.c
@@ -629,7 +629,7 @@ tcp_emu(so, m) @@ -629,7 +629,7 @@ tcp_emu(so, m)
629 struct mbuf *m; 629 struct mbuf *m;
630 { 630 {
631 u_int n1, n2, n3, n4, n5, n6; 631 u_int n1, n2, n3, n4, n5, n6;
632 - char buff[256]; 632 + char buff[257];
633 u_int32_t laddr; 633 u_int32_t laddr;
634 u_int lport; 634 u_int lport;
635 char *bptr; 635 char *bptr;
@@ -673,7 +673,9 @@ tcp_emu(so, m) @@ -673,7 +673,9 @@ tcp_emu(so, m)
673 } 673 }
674 } 674 }
675 } 675 }
676 - so_rcv->sb_cc = sprintf(so_rcv->sb_data, "%d,%d\r\n", n1, n2); 676 + so_rcv->sb_cc = snprintf(so_rcv->sb_data,
  677 + so_rcv->sb_datalen,
  678 + "%d,%d\r\n", n1, n2);
677 so_rcv->sb_rptr = so_rcv->sb_data; 679 so_rcv->sb_rptr = so_rcv->sb_data;
678 so_rcv->sb_wptr = so_rcv->sb_data + so_rcv->sb_cc; 680 so_rcv->sb_wptr = so_rcv->sb_data + so_rcv->sb_cc;
679 } 681 }
@@ -1007,8 +1009,9 @@ do_prompt: @@ -1007,8 +1009,9 @@ do_prompt:
1007 n4 = (laddr & 0xff); 1009 n4 = (laddr & 0xff);
1008 1010
1009 m->m_len = bptr - m->m_data; /* Adjust length */ 1011 m->m_len = bptr - m->m_data; /* Adjust length */
1010 - m->m_len += sprintf(bptr,"ORT %d,%d,%d,%d,%d,%d\r\n%s",  
1011 - n1, n2, n3, n4, n5, n6, x==7?buff:""); 1012 + m->m_len += snprintf(bptr, m->m_hdr.mh_size - m->m_len,
  1013 + "ORT %d,%d,%d,%d,%d,%d\r\n%s",
  1014 + n1, n2, n3, n4, n5, n6, x==7?buff:"");
1012 return 1; 1015 return 1;
1013 } else if ((bptr = (char *)strstr(m->m_data, "27 Entering")) != NULL) { 1016 } else if ((bptr = (char *)strstr(m->m_data, "27 Entering")) != NULL) {
1014 /* 1017 /*
@@ -1038,8 +1041,9 @@ do_prompt: @@ -1038,8 +1041,9 @@ do_prompt:
1038 n4 = (laddr & 0xff); 1041 n4 = (laddr & 0xff);
1039 1042
1040 m->m_len = bptr - m->m_data; /* Adjust length */ 1043 m->m_len = bptr - m->m_data; /* Adjust length */
1041 - m->m_len += sprintf(bptr,"27 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n%s",  
1042 - n1, n2, n3, n4, n5, n6, x==7?buff:""); 1044 + m->m_len += snprintf(bptr, m->m_hdr.mh_size - m->m_len,
  1045 + "27 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n%s",
  1046 + n1, n2, n3, n4, n5, n6, x==7?buff:"");
1043 1047
1044 return 1; 1048 return 1;
1045 } 1049 }
@@ -1062,7 +1066,8 @@ do_prompt: @@ -1062,7 +1066,8 @@ do_prompt:
1062 } 1066 }
1063 if (m->m_data[m->m_len-1] == '\0' && lport != 0 && 1067 if (m->m_data[m->m_len-1] == '\0' && lport != 0 &&
1064 (so = solisten(0, so->so_laddr.s_addr, htons(lport), SS_FACCEPTONCE)) != NULL) 1068 (so = solisten(0, so->so_laddr.s_addr, htons(lport), SS_FACCEPTONCE)) != NULL)
1065 - m->m_len = sprintf(m->m_data, "%d", ntohs(so->so_fport))+1; 1069 + m->m_len = snprintf(m->m_data, m->m_hdr.mh_size, "%d",
  1070 + ntohs(so->so_fport)) + 1;
1066 return 1; 1071 return 1;
1067 1072
1068 case EMU_IRC: 1073 case EMU_IRC:
@@ -1079,25 +1084,28 @@ do_prompt: @@ -1079,25 +1084,28 @@ do_prompt:
1079 return 1; 1084 return 1;
1080 1085
1081 m->m_len = bptr - m->m_data; /* Adjust length */ 1086 m->m_len = bptr - m->m_data; /* Adjust length */
1082 - m->m_len += sprintf(bptr, "DCC CHAT chat %lu %u%c\n",  
1083 - (unsigned long)ntohl(so->so_faddr.s_addr),  
1084 - ntohs(so->so_fport), 1); 1087 + m->m_len += snprintf(bptr, m->m_hdr.mh_size,
  1088 + "DCC CHAT chat %lu %u%c\n",
  1089 + (unsigned long)ntohl(so->so_faddr.s_addr),
  1090 + ntohs(so->so_fport), 1);
1085 } else if (sscanf(bptr, "DCC SEND %256s %u %u %u", buff, &laddr, &lport, &n1) == 4) { 1091 } else if (sscanf(bptr, "DCC SEND %256s %u %u %u", buff, &laddr, &lport, &n1) == 4) {
1086 if ((so = solisten(0, htonl(laddr), htons(lport), SS_FACCEPTONCE)) == NULL) 1092 if ((so = solisten(0, htonl(laddr), htons(lport), SS_FACCEPTONCE)) == NULL)
1087 return 1; 1093 return 1;
1088 1094
1089 m->m_len = bptr - m->m_data; /* Adjust length */ 1095 m->m_len = bptr - m->m_data; /* Adjust length */
1090 - m->m_len += sprintf(bptr, "DCC SEND %s %lu %u %u%c\n",  
1091 - buff, (unsigned long)ntohl(so->so_faddr.s_addr),  
1092 - ntohs(so->so_fport), n1, 1); 1096 + m->m_len += snprintf(bptr, m->m_hdr.mh_size,
  1097 + "DCC SEND %s %lu %u %u%c\n", buff,
  1098 + (unsigned long)ntohl(so->so_faddr.s_addr),
  1099 + ntohs(so->so_fport), n1, 1);
1093 } else if (sscanf(bptr, "DCC MOVE %256s %u %u %u", buff, &laddr, &lport, &n1) == 4) { 1100 } else if (sscanf(bptr, "DCC MOVE %256s %u %u %u", buff, &laddr, &lport, &n1) == 4) {
1094 if ((so = solisten(0, htonl(laddr), htons(lport), SS_FACCEPTONCE)) == NULL) 1101 if ((so = solisten(0, htonl(laddr), htons(lport), SS_FACCEPTONCE)) == NULL)
1095 return 1; 1102 return 1;
1096 1103
1097 m->m_len = bptr - m->m_data; /* Adjust length */ 1104 m->m_len = bptr - m->m_data; /* Adjust length */
1098 - m->m_len += sprintf(bptr, "DCC MOVE %s %lu %u %u%c\n",  
1099 - buff, (unsigned long)ntohl(so->so_faddr.s_addr),  
1100 - ntohs(so->so_fport), n1, 1); 1105 + m->m_len += snprintf(bptr, m->m_hdr.mh_size,
  1106 + "DCC MOVE %s %lu %u %u%c\n", buff,
  1107 + (unsigned long)ntohl(so->so_faddr.s_addr),
  1108 + ntohs(so->so_fport), n1, 1);
1101 } 1109 }
1102 return 1; 1110 return 1;
1103 1111
@@ -1285,8 +1293,8 @@ tcp_ctl(so) @@ -1285,8 +1293,8 @@ tcp_ctl(so)
1285 1293
1286 /* FALLTHROUGH */ 1294 /* FALLTHROUGH */
1287 case CTL_ALIAS: 1295 case CTL_ALIAS:
1288 - sb->sb_cc = sprintf(sb->sb_wptr,  
1289 - "Error: No application configured.\r\n"); 1296 + sb->sb_cc = snprintf(sb->sb_wptr, sb->sb_datalen - (sb->sb_wptr - sb->sb_data),
  1297 + "Error: No application configured.\r\n");
1290 sb->sb_wptr += sb->sb_cc; 1298 sb->sb_wptr += sb->sb_cc;
1291 return(0); 1299 return(0);
1292 1300
slirp/tftp.c
@@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
23 */ 23 */
24 24
25 #include <slirp.h> 25 #include <slirp.h>
  26 +#include "qemu-common.h" // for pstrcpy
26 27
27 struct tftp_session { 28 struct tftp_session {
28 int in_use; 29 int in_use;
@@ -148,8 +149,8 @@ static int tftp_send_oack(struct tftp_session *spt, @@ -148,8 +149,8 @@ static int tftp_send_oack(struct tftp_session *spt,
148 m->m_data += sizeof(struct udpiphdr); 149 m->m_data += sizeof(struct udpiphdr);
149 150
150 tp->tp_op = htons(TFTP_OACK); 151 tp->tp_op = htons(TFTP_OACK);
151 - n += sprintf(tp->x.tp_buf + n, "%s", key) + 1;  
152 - n += sprintf(tp->x.tp_buf + n, "%u", value) + 1; 152 + n += snprintf(tp->x.tp_buf + n, sizeof(tp->x.tp_buf) - n, "%s", key) + 1;
  153 + n += snprintf(tp->x.tp_buf + n, sizeof(tp->x.tp_buf) - n, "%u", value) + 1;
153 154
154 saddr.sin_addr = recv_tp->ip.ip_dst; 155 saddr.sin_addr = recv_tp->ip.ip_dst;
155 saddr.sin_port = recv_tp->udp.uh_dport; 156 saddr.sin_port = recv_tp->udp.uh_dport;
@@ -189,7 +190,7 @@ static int tftp_send_error(struct tftp_session *spt, @@ -189,7 +190,7 @@ static int tftp_send_error(struct tftp_session *spt,
189 190
190 tp->tp_op = htons(TFTP_ERROR); 191 tp->tp_op = htons(TFTP_ERROR);
191 tp->x.tp_error.tp_error_code = htons(errorcode); 192 tp->x.tp_error.tp_error_code = htons(errorcode);
192 - strcpy(tp->x.tp_error.tp_msg, msg); 193 + pstrcpy(tp->x.tp_error.tp_msg, sizeof(tp->x.tp_error.tp_msg), msg);
193 194
194 saddr.sin_addr = recv_tp->ip.ip_dst; 195 saddr.sin_addr = recv_tp->ip.ip_dst;
195 saddr.sin_port = recv_tp->udp.uh_dport; 196 saddr.sin_port = recv_tp->udp.uh_dport;
@@ -1915,11 +1915,12 @@ static void mux_print_help(CharDriverState *chr) @@ -1915,11 +1915,12 @@ static void mux_print_help(CharDriverState *chr)
1915 char cbuf[50] = "\n\r"; 1915 char cbuf[50] = "\n\r";
1916 1916
1917 if (term_escape_char > 0 && term_escape_char < 26) { 1917 if (term_escape_char > 0 && term_escape_char < 26) {
1918 - sprintf(cbuf,"\n\r");  
1919 - sprintf(ebuf,"C-%c", term_escape_char - 1 + 'a'); 1918 + snprintf(cbuf, sizeof(cbuf), "\n\r");
  1919 + snprintf(ebuf, sizeof(ebuf), "C-%c", term_escape_char - 1 + 'a');
1920 } else { 1920 } else {
1921 - sprintf(cbuf,"\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",  
1922 - term_escape_char); 1921 + snprintf(cbuf, sizeof(cbuf),
  1922 + "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
  1923 + term_escape_char);
1923 } 1924 }
1924 chr->chr_write(chr, (uint8_t *)cbuf, strlen(cbuf)); 1925 chr->chr_write(chr, (uint8_t *)cbuf, strlen(cbuf));
1925 for (i = 0; mux_help[i] != NULL; i++) { 1926 for (i = 0; mux_help[i] != NULL; i++) {
@@ -4385,7 +4386,7 @@ static int tap_open(char *ifname, int ifname_size) @@ -4385,7 +4386,7 @@ static int tap_open(char *ifname, int ifname_size)
4385 * Allocate TAP device, returns opened fd. 4386 * Allocate TAP device, returns opened fd.
4386 * Stores dev name in the first arg(must be large enough). 4387 * Stores dev name in the first arg(must be large enough).
4387 */ 4388 */
4388 -int tap_alloc(char *dev) 4389 +int tap_alloc(char *dev, size_t dev_size)
4389 { 4390 {
4390 int tap_fd, if_fd, ppa = -1; 4391 int tap_fd, if_fd, ppa = -1;
4391 static int ip_fd = 0; 4392 static int ip_fd = 0;
@@ -4498,7 +4499,7 @@ int tap_alloc(char *dev) @@ -4498,7 +4499,7 @@ int tap_alloc(char *dev)
4498 syslog (LOG_ERR, "Can't set multiplexor id"); 4499 syslog (LOG_ERR, "Can't set multiplexor id");
4499 } 4500 }
4500 4501
4501 - sprintf(dev, "tap%d", ppa); 4502 + snprintf(dev, dev_size, "tap%d", ppa);
4502 return tap_fd; 4503 return tap_fd;
4503 } 4504 }
4504 4505
@@ -4506,7 +4507,7 @@ static int tap_open(char *ifname, int ifname_size) @@ -4506,7 +4507,7 @@ static int tap_open(char *ifname, int ifname_size)
4506 { 4507 {
4507 char dev[10]=""; 4508 char dev[10]="";
4508 int fd; 4509 int fd;
4509 - if( (fd = tap_alloc(dev)) < 0 ){ 4510 + if( (fd = tap_alloc(dev, sizeof(dev))) < 0 ){
4510 fprintf(stderr, "Cannot allocate TAP device\n"); 4511 fprintf(stderr, "Cannot allocate TAP device\n");
4511 return -1; 4512 return -1;
4512 } 4513 }
@@ -5461,11 +5462,11 @@ static int drive_init(struct drive_opt *arg, int snapshot, @@ -5461,11 +5462,11 @@ static int drive_init(struct drive_opt *arg, int snapshot,
5461 !strcmp(machine->name, "versatileab")) { 5462 !strcmp(machine->name, "versatileab")) {
5462 type = IF_SCSI; 5463 type = IF_SCSI;
5463 max_devs = MAX_SCSI_DEVS; 5464 max_devs = MAX_SCSI_DEVS;
5464 - strcpy(devname, "scsi"); 5465 + pstrcpy(devname, sizeof(devname), "scsi");
5465 } else { 5466 } else {
5466 type = IF_IDE; 5467 type = IF_IDE;
5467 max_devs = MAX_IDE_DEVS; 5468 max_devs = MAX_IDE_DEVS;
5468 - strcpy(devname, "ide"); 5469 + pstrcpy(devname, sizeof(devname), "ide");
5469 } 5470 }
5470 media = MEDIA_DISK; 5471 media = MEDIA_DISK;
5471 5472