Commit 363a37d52016e0a16e3599d690f610346fc6898a
1 parent
c93e7817
Fix OpenBSD linker warnings
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5044 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
17 changed files
with
170 additions
and
137 deletions
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, "check direntry %d: \n", i); print_direntry(direntries + i) | @@ -1807,7 +1807,8 @@ DLOG(fprintf(stderr, "check direntry %d: \n", 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; |
vl.c
@@ -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 |