lkml.org 
[lkml]   [2017]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 039/139] libata: array underflow in ata_find_dev()
    Date
    From: Dan Carpenter <dan.carpenter@oracle.com>

    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()

    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Willy Tarreau <w@1wt.eu>
    ---
    drivers/ata/libata-scsi.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
    index f3f0801..aa4e36b 100644
    --- a/drivers/ata/libata-scsi.c
    +++ b/drivers/ata/libata-scsi.c
    @@ -2794,10 +2794,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];
    }

    --
    2.8.0.rc2.1.gbe9624a
    \
     
     \ /
      Last update: 2017-11-01 22:24    [W:4.878 / U:0.272 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site