Patch "libata: array underflow in ata_find_dev()" has been added to the 3.18-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
libata: array underflow in ata_find_dev()
to the 3.18-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
libata-array-underflow-in-ata_find_dev.patch
and it can be found in the queue-3.18 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
59a5e266c3f5c1567508888dd61a45b86daed0faMon Sep 17 00:00:00 2001
From: Dan Carpenter <[email protected]>
Date: Wed, 19 Jul 2017 13:06:41 +0300
Subject: libata: array underflow in ata_find_dev()
From: Dan Carpenter <[email protected]>
commit 59a5e266c3f5c1567508888dd61a45b86daed0fa upstream.
My static checker complains that "devno" can be negative, meaning that we read before the start of the loop. I've looked at the code, and I think the warning is right. This come from /proc so it's root only or it would be quite a quite a serious bug. The call tree looks like this:
proc_scsi_write() <- gets id and channel from simple_strtoul() -> scsi_add_single_device() <- calls shost->transportt->user_scan()
-> ata_scsi_user_scan()
-> ata_find_dev()
--- drivers/ata/libata-scsi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/ata/libata-scsi.c +4 -2
@@ -2798,10 +2798,12 @@ static unsigned int atapi_xlat(struct atstatic struct ata_device *ata_find_dev (struct ata_port *ap,int devno) {if (!sata_pmp_attached (ap)) { -if (likely (devno <ata_link_max_devices (&ap->link))) +if (likely (devno >=0 && + devno <ata_link_max_devices (&ap->link)))return &ap->link.device[devno]; }else { -if (likely (devno < ap->nr_pmp_links)) +if (likely (devno >=0 && + devno < ap->nr_pmp_links))return &ap->pmp_link[devno].device[0 ]; }
Patches currently in stable-queue which might be from [email protected] are
queue-3.18/libata-array-underflow-in-ata_find_dev.patch