Skip to content

Commit ce1f31b

Browse files
Dan Carpenterdavem330
authored andcommitted
ide: serverworks: potential overflow in svwks_set_pio_mode()
The "drive->dn" variable is a u8 controlled by root. Signed-off-by: Dan Carpenter <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 117fcc3 commit ce1f31b

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

drivers/ide/serverworks.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ static void svwks_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
115115
struct pci_dev *dev = to_pci_dev(hwif->dev);
116116
const u8 pio = drive->pio_mode - XFER_PIO_0;
117117

118+
if (drive->dn >= ARRAY_SIZE(drive_pci))
119+
return;
120+
118121
pci_write_config_byte(dev, drive_pci[drive->dn], pio_modes[pio]);
119122

120123
if (svwks_csb_check(dev)) {
@@ -141,6 +144,9 @@ static void svwks_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive)
141144

142145
u8 ultra_enable = 0, ultra_timing = 0, dma_timing = 0;
143146

147+
if (drive->dn >= ARRAY_SIZE(drive_pci2))
148+
return;
149+
144150
pci_read_config_byte(dev, (0x56|hwif->channel), &ultra_timing);
145151
pci_read_config_byte(dev, 0x54, &ultra_enable);
146152

0 commit comments

Comments
 (0)