mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
scsi: core: Fix race on creating sense cache
commitf9b0530fa0upstream. 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:0a6ac4ee7c("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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1c02ad9426
commit
2d33fd9aac
@@ -71,11 +71,11 @@ int scsi_init_sense_cache(struct Scsi_Host *shost)
|
||||
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)",
|
||||
@@ -90,7 +90,7 @@ int scsi_init_sense_cache(struct Scsi_Host *shost)
|
||||
if (!scsi_sense_cache)
|
||||
ret = -ENOMEM;
|
||||
}
|
||||
|
||||
exit:
|
||||
mutex_unlock(&scsi_sense_cache_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user