Skip to contentSkip to conversation

FDC: Fix buffer overflow

PATCH New Hervé Poussineau 1 participant 1 message Apr 29, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 FDC: Fix buffer overflow

Hi,

In floppy controller, programming PIO writes which are more than one sector long leads to a buffer overflow of the fdtrl->fifo[] array. Attached patch fixes it.

Hervé

fdc.c +4 -2
Index: hw/fdc.c
===================================================================
@@ -1770,8 +1770,10 @@
     /* Is it write command time ? */
     if (fdctrl->msr & FD_MSR_NONDMA) {
         /* FIFO data write */
-        fdctrl->fifo[fdctrl->data_pos++] = value;
-        if (fdctrl->data_pos % FD_SECTOR_LEN == (FD_SECTOR_LEN - 1) ||
+        pos = fdctrl->data_pos++;
+        pos %= FD_SECTOR_LEN;
+        fdctrl->fifo[pos] = value;
+        if (pos == FD_SECTOR_LEN - 1 ||
             fdctrl->data_pos == fdctrl->data_len) {
             cur_drv = get_cur_drv(fdctrl);
             if (bdrv_write(cur_drv->bs, fd_sector(cur_drv), fdctrl->fifo, 1) < 0) {