Message ID | 20170719100641.7ste3wo6ap2g2djv@mwanda |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
Hello, On Wed, Jul 19, 2017 at 01:06:41PM +0300, Dan Carpenter wrote: > 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() > > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> I'm impressed that the static checker caught this. Thanks a lot for the fix, and lol at the code. :) Applied to libata/for-4.13-fixes w/ stable cc'd. Thanks!
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index d462c5a3a7ef..44ba292f2cd7 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -3030,10 +3030,12 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc) static 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]; }
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() Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html