lkml.org 
[lkml]   [2019]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 168/271] scsi: core: Fix race on creating sense cache
    Date
    From: Ming Lei <ming.lei@redhat.com>

    commit f9b0530fa02e0c73f31a49ef743e8f44eb8e32cc upstream.

    When scsi_init_sense_cache(host) is called concurrently from different
    hosts, each code path may find that no cache has been created and
    allocate a new one. The lack of locking can lead to potentially
    overriding a cache allocated by a different host.

    Fix the issue by moving 'mutex_lock(&scsi_sense_cache_mutex)' before
    scsi_select_sense_cache().

    Fixes: 0a6ac4ee7c21 ("scsi: respect unchecked_isa_dma for blk-mq")
    Cc: Stable <stable@vger.kernel.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.com>
    Cc: Ewan D. Milne <emilne@redhat.com>
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/scsi/scsi_lib.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/drivers/scsi/scsi_lib.c
    +++ b/drivers/scsi/scsi_lib.c
    @@ -71,11 +71,11 @@ int scsi_init_sense_cache(struct Scsi_Ho
    struct kmem_cache *cache;
    int ret = 0;

    + mutex_lock(&scsi_sense_cache_mutex);
    cache = scsi_select_sense_cache(shost->unchecked_isa_dma);
    if (cache)
    - return 0;
    + goto exit;

    - mutex_lock(&scsi_sense_cache_mutex);
    if (shost->unchecked_isa_dma) {
    scsi_sense_isadma_cache =
    kmem_cache_create("scsi_sense_cache(DMA)",
    @@ -91,7 +91,7 @@ int scsi_init_sense_cache(struct Scsi_Ho
    if (!scsi_sense_cache)
    ret = -ENOMEM;
    }
    -
    + exit:
    mutex_unlock(&scsi_sense_cache_mutex);
    return ret;
    }

    \
     
     \ /
      Last update: 2019-07-25 08:09    [W:2.853 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site