Message ID | 20190808093702.29512-2-kraxel@redhat.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [v3,1/8] scsi: core: fix the dma_max_mapping_size call | expand |
On Thu, Aug 08, 2019 at 11:36:55AM +0200, Gerd Hoffmann wrote: > From: Christoph Hellwig <hch@lst.de> > > We should only call dma_max_mapping_size for devices that have a DMA mask > set, otherwise we can run into a NULL pointer dereference that will crash > the system. > > Also we need to do right shift to get the sectors from the size in bytes, > not a left shift. Oops, that wasn't meant to be re-sent, sorry. drm-misc-next maintainers: any chance for a backmerge to pick up this fix, so I don't have to carry it in my branches? thanks, Gerd
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 9381171c2fc0..11e64b50497f 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -1784,8 +1784,10 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q) blk_queue_max_integrity_segments(q, shost->sg_prot_tablesize); } - shost->max_sectors = min_t(unsigned int, shost->max_sectors, - dma_max_mapping_size(dev) << SECTOR_SHIFT); + if (dev->dma_mask) { + shost->max_sectors = min_t(unsigned int, shost->max_sectors, + dma_max_mapping_size(dev) >> SECTOR_SHIFT); + } blk_queue_max_hw_sectors(q, shost->max_sectors); if (shost->unchecked_isa_dma) blk_queue_bounce_limit(q, BLK_BOUNCE_ISA);