Commit b5eff355460643d09e533024360fe0522f368c07
1 parent
24988dc2
Revert fix for CVE-2008-0928. Will be fixed in a different way later.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4041 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
7 changed files
with
6 additions
and
79 deletions
block-qcow.c
... | ... | @@ -95,7 +95,7 @@ static int qcow_open(BlockDriverState *bs, const char *filename, int flags) |
95 | 95 | int len, i, shift, ret; |
96 | 96 | QCowHeader header; |
97 | 97 | |
98 | - ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW); | |
98 | + ret = bdrv_file_open(&s->hd, filename, flags); | |
99 | 99 | if (ret < 0) |
100 | 100 | return ret; |
101 | 101 | if (bdrv_pread(s->hd, 0, &header, sizeof(header)) != sizeof(header)) | ... | ... |
block-qcow2.c
... | ... | @@ -191,7 +191,7 @@ static int qcow_open(BlockDriverState *bs, const char *filename, int flags) |
191 | 191 | int len, i, shift, ret; |
192 | 192 | QCowHeader header; |
193 | 193 | |
194 | - ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW); | |
194 | + ret = bdrv_file_open(&s->hd, filename, flags); | |
195 | 195 | if (ret < 0) |
196 | 196 | return ret; |
197 | 197 | if (bdrv_pread(s->hd, 0, &header, sizeof(header)) != sizeof(header)) | ... | ... |
block-vmdk.c
... | ... | @@ -378,7 +378,7 @@ static int vmdk_open(BlockDriverState *bs, const char *filename, int flags) |
378 | 378 | flags = BDRV_O_RDONLY; |
379 | 379 | fprintf(stderr, "(VMDK) image open: flags=0x%x filename=%s\n", flags, bs->filename); |
380 | 380 | |
381 | - ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW); | |
381 | + ret = bdrv_file_open(&s->hd, filename, flags); | |
382 | 382 | if (ret < 0) |
383 | 383 | return ret; |
384 | 384 | if (bdrv_pread(s->hd, 0, &magic, sizeof(magic)) != sizeof(magic)) | ... | ... |
block.c
... | ... | @@ -123,60 +123,6 @@ void path_combine(char *dest, int dest_size, |
123 | 123 | } |
124 | 124 | } |
125 | 125 | |
126 | -static int bdrv_rd_badreq_sectors(BlockDriverState *bs, | |
127 | - int64_t sector_num, int nb_sectors) | |
128 | -{ | |
129 | - return | |
130 | - nb_sectors < 0 || | |
131 | - sector_num < 0 || | |
132 | - nb_sectors > bs->total_sectors || | |
133 | - sector_num > bs->total_sectors - nb_sectors; | |
134 | -} | |
135 | - | |
136 | -static int bdrv_rd_badreq_bytes(BlockDriverState *bs, | |
137 | - int64_t offset, int count) | |
138 | -{ | |
139 | - int64_t size = bs->total_sectors << SECTOR_BITS; | |
140 | - return | |
141 | - count < 0 || | |
142 | - size < 0 || | |
143 | - count > size || | |
144 | - offset > size - count; | |
145 | -} | |
146 | - | |
147 | -static int bdrv_wr_badreq_sectors(BlockDriverState *bs, | |
148 | - int64_t sector_num, int nb_sectors) | |
149 | -{ | |
150 | - if (sector_num < 0 || | |
151 | - nb_sectors < 0) | |
152 | - return 1; | |
153 | - | |
154 | - if (sector_num > bs->total_sectors - nb_sectors) { | |
155 | - if (bs->autogrow) | |
156 | - bs->total_sectors = sector_num + nb_sectors; | |
157 | - else | |
158 | - return 1; | |
159 | - } | |
160 | - return 0; | |
161 | -} | |
162 | - | |
163 | -static int bdrv_wr_badreq_bytes(BlockDriverState *bs, | |
164 | - int64_t offset, int count) | |
165 | -{ | |
166 | - int64_t size = bs->total_sectors << SECTOR_BITS; | |
167 | - if (count < 0 || | |
168 | - offset < 0) | |
169 | - return 1; | |
170 | - | |
171 | - if (offset > size - count) { | |
172 | - if (bs->autogrow) | |
173 | - bs->total_sectors = (offset + count + SECTOR_SIZE - 1) >> SECTOR_BITS; | |
174 | - else | |
175 | - return 1; | |
176 | - } | |
177 | - return 0; | |
178 | -} | |
179 | - | |
180 | 126 | |
181 | 127 | static void bdrv_register(BlockDriver *bdrv) |
182 | 128 | { |
... | ... | @@ -389,10 +335,6 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, |
389 | 335 | bs->read_only = 0; |
390 | 336 | bs->is_temporary = 0; |
391 | 337 | bs->encrypted = 0; |
392 | - bs->autogrow = 0; | |
393 | - | |
394 | - if (flags & BDRV_O_AUTOGROW) | |
395 | - bs->autogrow = 1; | |
396 | 338 | |
397 | 339 | if (flags & BDRV_O_SNAPSHOT) { |
398 | 340 | BlockDriverState *bs1; |
... | ... | @@ -437,7 +379,6 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, |
437 | 379 | } |
438 | 380 | bs->drv = drv; |
439 | 381 | bs->opaque = qemu_mallocz(drv->instance_size); |
440 | - bs->total_sectors = 0; /* driver will set if it does not do getlength */ | |
441 | 382 | if (bs->opaque == NULL && drv->instance_size > 0) |
442 | 383 | return -1; |
443 | 384 | /* Note: for compatibility, we open disk image files as RDWR, and |
... | ... | @@ -503,7 +444,6 @@ void bdrv_close(BlockDriverState *bs) |
503 | 444 | bs->drv = NULL; |
504 | 445 | |
505 | 446 | /* call the change callback */ |
506 | - bs->total_sectors = 0; | |
507 | 447 | bs->media_changed = 1; |
508 | 448 | if (bs->change_cb) |
509 | 449 | bs->change_cb(bs->change_opaque); |
... | ... | @@ -569,8 +509,6 @@ int bdrv_read(BlockDriverState *bs, int64_t sector_num, |
569 | 509 | if (!drv) |
570 | 510 | return -ENOMEDIUM; |
571 | 511 | |
572 | - if (bdrv_rd_badreq_sectors(bs, sector_num, nb_sectors)) | |
573 | - return -EDOM; | |
574 | 512 | if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) { |
575 | 513 | memcpy(buf, bs->boot_sector_data, 512); |
576 | 514 | sector_num++; |
... | ... | @@ -611,8 +549,6 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num, |
611 | 549 | return -ENOMEDIUM; |
612 | 550 | if (bs->read_only) |
613 | 551 | return -EACCES; |
614 | - if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors)) | |
615 | - return -EDOM; | |
616 | 552 | if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) { |
617 | 553 | memcpy(bs->boot_sector_data, buf, 512); |
618 | 554 | } |
... | ... | @@ -738,8 +674,6 @@ int bdrv_pread(BlockDriverState *bs, int64_t offset, |
738 | 674 | return -ENOMEDIUM; |
739 | 675 | if (!drv->bdrv_pread) |
740 | 676 | return bdrv_pread_em(bs, offset, buf1, count1); |
741 | - if (bdrv_rd_badreq_bytes(bs, offset, count1)) | |
742 | - return -EDOM; | |
743 | 677 | return drv->bdrv_pread(bs, offset, buf1, count1); |
744 | 678 | } |
745 | 679 | |
... | ... | @@ -755,8 +689,6 @@ int bdrv_pwrite(BlockDriverState *bs, int64_t offset, |
755 | 689 | return -ENOMEDIUM; |
756 | 690 | if (!drv->bdrv_pwrite) |
757 | 691 | return bdrv_pwrite_em(bs, offset, buf1, count1); |
758 | - if (bdrv_wr_badreq_bytes(bs, offset, count1)) | |
759 | - return -EDOM; | |
760 | 692 | return drv->bdrv_pwrite(bs, offset, buf1, count1); |
761 | 693 | } |
762 | 694 | |
... | ... | @@ -1023,8 +955,6 @@ int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num, |
1023 | 955 | return -ENOMEDIUM; |
1024 | 956 | if (!drv->bdrv_write_compressed) |
1025 | 957 | return -ENOTSUP; |
1026 | - if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors)) | |
1027 | - return -EDOM; | |
1028 | 958 | return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors); |
1029 | 959 | } |
1030 | 960 | |
... | ... | @@ -1171,8 +1101,6 @@ BlockDriverAIOCB *bdrv_aio_read(BlockDriverState *bs, int64_t sector_num, |
1171 | 1101 | |
1172 | 1102 | if (!drv) |
1173 | 1103 | return NULL; |
1174 | - if (bdrv_rd_badreq_sectors(bs, sector_num, nb_sectors)) | |
1175 | - return NULL; | |
1176 | 1104 | |
1177 | 1105 | /* XXX: we assume that nb_sectors == 0 is suppored by the async read */ |
1178 | 1106 | if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) { |
... | ... | @@ -1204,8 +1132,6 @@ BlockDriverAIOCB *bdrv_aio_write(BlockDriverState *bs, int64_t sector_num, |
1204 | 1132 | return NULL; |
1205 | 1133 | if (bs->read_only) |
1206 | 1134 | return NULL; |
1207 | - if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors)) | |
1208 | - return NULL; | |
1209 | 1135 | if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) { |
1210 | 1136 | memcpy(bs->boot_sector_data, buf, 512); |
1211 | 1137 | } | ... | ... |
block.h
... | ... | @@ -45,7 +45,6 @@ typedef struct QEMUSnapshotInfo { |
45 | 45 | it (default for |
46 | 46 | bdrv_file_open()) */ |
47 | 47 | #define BDRV_O_DIRECT 0x0020 |
48 | -#define BDRV_O_AUTOGROW 0x0040 /* Allow backing file to extend when writing past end of file */ | |
49 | 48 | |
50 | 49 | #ifndef QEMU_IMG |
51 | 50 | void bdrv_info(void); | ... | ... |
block_int.h
... | ... | @@ -97,7 +97,6 @@ struct BlockDriverState { |
97 | 97 | int locked; /* if true, the media cannot temporarily be ejected */ |
98 | 98 | int encrypted; /* if true, the media is encrypted */ |
99 | 99 | int sg; /* if true, the device is a /dev/sg* */ |
100 | - int autogrow; /* if true, the backing store can auto-extend to allocate new extents */ | |
101 | 100 | /* event callback when inserting/removing */ |
102 | 101 | void (*change_cb)(void *opaque); |
103 | 102 | void *change_opaque; | ... | ... |
linux-user/syscall.c
... | ... | @@ -3514,6 +3514,9 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, |
3514 | 3514 | CPUMIPSState *env = (CPUMIPSState*)cpu_env; |
3515 | 3515 | env->gpr[env->current_tc][3] = host_pipe[1]; |
3516 | 3516 | ret = host_pipe[0]; |
3517 | +#elif defined(TARGET_SH4) | |
3518 | + ((CPUSH4State*)cpu_env)->gregs[1] = host_pipe[1]; | |
3519 | + ret = host_pipe[0]; | |
3517 | 3520 | #else |
3518 | 3521 | if (put_user_s32(host_pipe[0], arg1) |
3519 | 3522 | || put_user_s32(host_pipe[1], arg1 + sizeof(host_pipe[0]))) | ... | ... |