Commit d6c1a327a94437f0ed74ba970b97fd962462bc77
1 parent
a06e5a3c
Fix memory corruption: bdrv_read/write API has been changed to take
nb_sectors instead of len in bytes but the fdc driver has never been fixed. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3532 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
2 additions
and
4 deletions
hw/fdc.c
| ... | ... | @@ -1213,8 +1213,7 @@ static uint32_t fdctrl_read_data (fdctrl_t *fdctrl) |
| 1213 | 1213 | len = fdctrl->data_len - fdctrl->data_pos; |
| 1214 | 1214 | if (len > FD_SECTOR_LEN) |
| 1215 | 1215 | len = FD_SECTOR_LEN; |
| 1216 | - bdrv_read(cur_drv->bs, fd_sector(cur_drv), | |
| 1217 | - fdctrl->fifo, len); | |
| 1216 | + bdrv_read(cur_drv->bs, fd_sector(cur_drv), fdctrl->fifo, 1); | |
| 1218 | 1217 | } |
| 1219 | 1218 | } |
| 1220 | 1219 | retval = fdctrl->fifo[pos]; |
| ... | ... | @@ -1321,8 +1320,7 @@ static void fdctrl_write_data (fdctrl_t *fdctrl, uint32_t value) |
| 1321 | 1320 | fdctrl->fifo[fdctrl->data_pos++] = value; |
| 1322 | 1321 | if (fdctrl->data_pos % FD_SECTOR_LEN == (FD_SECTOR_LEN - 1) || |
| 1323 | 1322 | fdctrl->data_pos == fdctrl->data_len) { |
| 1324 | - bdrv_write(cur_drv->bs, fd_sector(cur_drv), | |
| 1325 | - fdctrl->fifo, FD_SECTOR_LEN); | |
| 1323 | + bdrv_write(cur_drv->bs, fd_sector(cur_drv), fdctrl->fifo, 1); | |
| 1326 | 1324 | } |
| 1327 | 1325 | /* Switch from transfer mode to status mode |
| 1328 | 1326 | * then from status mode to command mode | ... | ... |