linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Potential out-of-bounds access in drivers/scsi/sd.c
@ 2013-09-04  0:31 Dmitry Vyukov
  2013-09-04 14:32 ` Alan Stern
  0 siblings, 1 reply; 10+ messages in thread
From: Dmitry Vyukov @ 2013-09-04  0:31 UTC (permalink / raw)
  To: linux-scsi
  Cc: richard, stern, ltuikov, jbottomley, Andrey Konovalov,
	Kostya Serebryany

Hi,

We are working on a memory error detector AddressSanitizer for Linux
kernel (https://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel),
it can detect use-after-free and buffer-overflow errors.

Here one of the reports from the tool:

[  166.124485] ERROR: AddressSanitizer: heap-buffer-overflow on
address ffff880024ab8600
[  166.126613] ffff880024ab8600 is located 0 bytes to the right of
512-byte region [ffff880024ab8400, ffff880024ab8600)
[  166.129583] Accessed by thread T2505:
[  166.130732]   #0      inlined     describe_heap_address
./arch/x86/mm/asan/report.c:164
[  166.130732]   #0 ffffffff810dd277 (asan_report_error+0x2f7/0x400)
./arch/x86/mm/asan/report.c:278
[  166.132475]   #1 ffffffff810dc6a0 (asan_check_region+0x30/0x40)
./arch/x86/mm/asan/asan.c:37
[  166.134485]   #2 ffffffff810dd3c3 (__tsan_read1+0x13/0x20) ??:0
[  166.136397]   #3      inlined     sd_read_cache_type ./drivers/scsi/sd.c:2426
[  166.136397]   #3 ffffffff81675546
(sd_revalidate_disk+0x23d6/0x28d0) ./drivers/scsi/sd.c:2720
[  166.138531]   #4 ffffffff812f437b (revalidate_disk+0x4b/0xc0)
./fs/block_dev.c:975
[  166.140449]   #5 ffffffff8167143e (sd_rescan+0x3e/0x50)
./drivers/scsi/sd.c:1473
[  166.142539]   #6 ffffffff8162c164 (scsi_rescan_device+0x64/0x90)
./drivers/scsi/scsi_scan.c:1566
[  166.144557]   #7 ffffffff81694e65 (ata_scsi_dev_rescan+0xf5/0x170)
./drivers/ata/libata-scsi.c:3986
[  166.146680]   #8      inlined     trace_workqueue_execute_end
./kernel/workqueue.c:2186
[  166.146680]   #8 ffffffff81111640 (process_one_work+0x2d0/0x750)
./kernel/workqueue.c:2191
[  166.149012]   #9 ffffffff81111d23 (worker_thread+0x263/0x640)
./include/linux/list.h:188
[  166.151061]   #10 ffffffff8111c092 (kthread+0x132/0x140) kthread.c:0
[  166.152853]   #11 ffffffff8192841c (ret_from_fork+0x7c/0xb0)
./arch/x86/kernel/entry_64.S:570
[  166.154790]
[  166.155389] Allocated by thread T2505:
[  166.156801]   #0 ffffffff810dc768 (asan_slab_alloc+0x48/0xb0)
./arch/x86/mm/asan/asan.c:91
[  166.158850]   #1      inlined     slab_alloc ./mm/slab.c:3475
[  166.158850]   #1      inlined     __do_kmalloc ./mm/slab.c:3749
[  166.158850]   #1 ffffffff812832ec (__kmalloc+0xbc/0x500) ./mm/slab.c:3763
[  166.161364]   #2 ffffffff81673234 (sd_revalidate_disk+0xc4/0x28d0)
./drivers/scsi/sd.c:2698
[  166.164302]   #3 ffffffff812f437b (revalidate_disk+0x4b/0xc0)
./fs/block_dev.c:975
[  166.167012]   #4 ffffffff8167143e (sd_rescan+0x3e/0x50)
./drivers/scsi/sd.c:1473
[  166.169478]   #5 ffffffff8162c164 (scsi_rescan_device+0x64/0x90)
./drivers/scsi/scsi_scan.c:1566
[  166.172321]   #6 ffffffff81694e65 (ata_scsi_dev_rescan+0xf5/0x170)
./drivers/ata/libata-scsi.c:3986
[  166.175156]   #7      inlined     trace_workqueue_execute_end
./kernel/workqueue.c:2186
[  166.175156]   #7 ffffffff81111640 (process_one_work+0x2d0/0x750)
./kernel/workqueue.c:2191
[  166.177222]   #8 ffffffff81111d23 (worker_thread+0x263/0x640)
./include/linux/list.h:188
[  166.179193]   #9 ffffffff8111c092 (kthread+0x132/0x140) kthread.c:0
[  166.180988]   #10 ffffffff8192841c (ret_from_fork+0x7c/0xb0)
./arch/x86/kernel/entry_64.S:570
[  166.182931]
[  166.183537] Shadow bytes around the buggy address:
[  166.185391]   ffff880024ab8380: fa fa fa fa fa fa fa fa fa fa fa fa
fa fa fa fa
[  166.187758]   ffff880024ab8400: 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
[  166.190227]   ffff880024ab8480: 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
[  166.192684]   ffff880024ab8500: 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
[  166.195152]   ffff880024ab8580: 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
[  166.197649] =>ffff880024ab8600:[fa]fa fa fa fa fa fa fa fa fa fa fa
fa fa fa fa
[  166.199128]   ffff880024ab8680: fa fa fa fa fa fa fa fa fa fa fa fa
fa fa fa fa
[  166.200962]   ffff880024ab8700: fa fa fa fa fa fa fa fa fd fd fd fd
fd fd fd fd
[  166.203069]   ffff880024ab8780: fd fd fd fd fd fd fd fd fd fd fd fd
fd fd fd fd
[  166.205202]   ffff880024ab8800: fd fd fd fd fd fd fd fd fd fd fd fd
fd fd fd fd
[  166.207302]   ffff880024ab8880: fd fd fd fd fd fd fd fd fd fd fd fd
fd fd fd fd
[  166.209237] Shadow byte legend (one shadow byte represents 8
application bytes):
[  166.211273]   Addressable:           00
[  166.212358]   Partially addressable: 01 02 03 04 05 06 07
[  166.213871]   Heap redzone:          fa
[  166.214979]   Heap kmalloc redzone:  fb
[  166.216062]   Freed heap region:     fd
[  166.217149]   Shadow gap:            fe

The code in sd_read_cache_type does the following:

while (offset < len) {
...
}
...
if ((buffer[offset] & 0x3f) != modepage) {
    sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
    goto defaults;
}

When control leaves the while loop, offset >= len, so buffer[offset]
reads random garbage out-of-bounds.
It the worst case it can lead to crash, or if (buffer[offset] & 0x3f)
happen to be == modepage, then it will read more garbage.

Please help validate and triage this.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-04  0:31 Potential out-of-bounds access in drivers/scsi/sd.c Dmitry Vyukov
@ 2013-09-04 14:32 ` Alan Stern
  2013-09-04 14:45   ` Paolo Bonzini
  2013-09-04 15:37   ` Potential " Dmitry Vyukov
  0 siblings, 2 replies; 10+ messages in thread
From: Alan Stern @ 2013-09-04 14:32 UTC (permalink / raw)
  To: Dmitry Vyukov
  Cc: linux-scsi, richard, ltuikov, jbottomley, Andrey Konovalov,
	Kostya Serebryany

On Wed, 4 Sep 2013, Dmitry Vyukov wrote:

> Hi,
> 
> We are working on a memory error detector AddressSanitizer for Linux
> kernel (https://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel),
> it can detect use-after-free and buffer-overflow errors.

...

> The code in sd_read_cache_type does the following:
> 
> while (offset < len) {
> ...
> }
> ...
> if ((buffer[offset] & 0x3f) != modepage) {
>     sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
>     goto defaults;
> }
> 
> When control leaves the while loop, offset >= len, so buffer[offset]
> reads random garbage out-of-bounds.
> It the worst case it can lead to crash, or if (buffer[offset] & 0x3f)
> happen to be == modepage, then it will read more garbage.
> 
> Please help validate and triage this.

The tool's output is correct.  The patch below should fix it.

Alan Stern



Index: usb-3.11/drivers/scsi/sd.c
===================================================================
--- usb-3.11.orig/drivers/scsi/sd.c
+++ usb-3.11/drivers/scsi/sd.c
@@ -2419,7 +2419,7 @@ sd_read_cache_type(struct scsi_disk *sdk
 			}
 		}
 
-		if (modepage == 0x3F) {
+		if (modepage == 0x3F || offset + 2 >= len) {
 			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
 				  "present\n");
 			goto defaults;


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-04 14:32 ` Alan Stern
@ 2013-09-04 14:45   ` Paolo Bonzini
  2013-09-04 15:42     ` Alan Stern
  2013-09-04 15:37   ` Potential " Dmitry Vyukov
  1 sibling, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2013-09-04 14:45 UTC (permalink / raw)
  To: Alan Stern
  Cc: Dmitry Vyukov, linux-scsi, richard, ltuikov, jbottomley,
	Andrey Konovalov, Kostya Serebryany

Il 04/09/2013 16:32, Alan Stern ha scritto:
> On Wed, 4 Sep 2013, Dmitry Vyukov wrote:
> 
>> Hi,
>>
>> We are working on a memory error detector AddressSanitizer for Linux
>> kernel (https://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel),
>> it can detect use-after-free and buffer-overflow errors.
> 
> ...
> 
>> The code in sd_read_cache_type does the following:
>>
>> while (offset < len) {
>> ...
>> }
>> ...
>> if ((buffer[offset] & 0x3f) != modepage) {
>>     sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
>>     goto defaults;
>> }
>>
>> When control leaves the while loop, offset >= len, so buffer[offset]
>> reads random garbage out-of-bounds.
>> It the worst case it can lead to crash, or if (buffer[offset] & 0x3f)
>> happen to be == modepage, then it will read more garbage.
>>
>> Please help validate and triage this.
> 
> The tool's output is correct.  The patch below should fix it.
> 
> Alan Stern
> 
> 
> 
> Index: usb-3.11/drivers/scsi/sd.c
> ===================================================================
> --- usb-3.11.orig/drivers/scsi/sd.c
> +++ usb-3.11/drivers/scsi/sd.c
> @@ -2419,7 +2419,7 @@ sd_read_cache_type(struct scsi_disk *sdk
>  			}
>  		}
>  
> -		if (modepage == 0x3F) {
> +		if (modepage == 0x3F || offset + 2 >= len) {
>  			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
>  				  "present\n");
>  			goto defaults;

If you do this, the buggy "if" becomes dead code (the loop above doesn't
have any "break", so you know that offset >= len and the new condition
is always true).

So the patch does indeed prevent the bug, but the code can be simplified.

Paolo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-04 14:32 ` Alan Stern
  2013-09-04 14:45   ` Paolo Bonzini
@ 2013-09-04 15:37   ` Dmitry Vyukov
  2013-09-04 15:42     ` Alan Stern
  1 sibling, 1 reply; 10+ messages in thread
From: Dmitry Vyukov @ 2013-09-04 15:37 UTC (permalink / raw)
  To: Alan Stern
  Cc: linux-scsi, richard, ltuikov, jbottomley, Andrey Konovalov,
	Kostya Serebryany

On Wed, Sep 4, 2013 at 6:32 PM, Alan Stern <stern@rowland.harvard.edu> wrote:
> On Wed, 4 Sep 2013, Dmitry Vyukov wrote:
>
>> Hi,
>>
>> We are working on a memory error detector AddressSanitizer for Linux
>> kernel (https://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel),
>> it can detect use-after-free and buffer-overflow errors.
>
> ...
>
>> The code in sd_read_cache_type does the following:
>>
>> while (offset < len) {
>> ...
>> }
>> ...
>> if ((buffer[offset] & 0x3f) != modepage) {
>>     sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
>>     goto defaults;
>> }
>>
>> When control leaves the while loop, offset >= len, so buffer[offset]
>> reads random garbage out-of-bounds.
>> It the worst case it can lead to crash, or if (buffer[offset] & 0x3f)
>> happen to be == modepage, then it will read more garbage.
>>
>> Please help validate and triage this.
>
> The tool's output is correct.  The patch below should fix it.

Thanks, Alan!

I agree with Paolo that the branch can be removed.

Will you take care of landing the patch?



> Index: usb-3.11/drivers/scsi/sd.c
> ===================================================================
> --- usb-3.11.orig/drivers/scsi/sd.c
> +++ usb-3.11/drivers/scsi/sd.c
> @@ -2419,7 +2419,7 @@ sd_read_cache_type(struct scsi_disk *sdk
>                         }
>                 }
>
> -               if (modepage == 0x3F) {
> +               if (modepage == 0x3F || offset + 2 >= len) {
>                         sd_printk(KERN_ERR, sdkp, "No Caching mode page "
>                                   "present\n");
>                         goto defaults;
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-04 14:45   ` Paolo Bonzini
@ 2013-09-04 15:42     ` Alan Stern
  2013-09-05 13:38       ` Hannes Reinecke
  0 siblings, 1 reply; 10+ messages in thread
From: Alan Stern @ 2013-09-04 15:42 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Dmitry Vyukov, linux-scsi, richard, ltuikov, jbottomley,
	Andrey Konovalov, Kostya Serebryany

On Wed, 4 Sep 2013, Paolo Bonzini wrote:

> > --- usb-3.11.orig/drivers/scsi/sd.c
> > +++ usb-3.11/drivers/scsi/sd.c
> > @@ -2419,7 +2419,7 @@ sd_read_cache_type(struct scsi_disk *sdk
> >  			}
> >  		}
> >  
> > -		if (modepage == 0x3F) {
> > +		if (modepage == 0x3F || offset + 2 >= len) {
> >  			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
> >  				  "present\n");
> >  			goto defaults;
> 
> If you do this, the buggy "if" becomes dead code (the loop above doesn't
> have any "break", so you know that offset >= len and the new condition
> is always true).
> 
> So the patch does indeed prevent the bug, but the code can be simplified.

That's right.  I didn't realize it at first, but the only way to get 
here is if the next page offset lies beyond the end of the data in the 
buffer.  Therefore the patch can be simplified as follows.

Alan Stern



Index: usb-3.11/drivers/scsi/sd.c
===================================================================
--- usb-3.11.orig/drivers/scsi/sd.c
+++ usb-3.11/drivers/scsi/sd.c
@@ -2419,14 +2419,9 @@ sd_read_cache_type(struct scsi_disk *sdk
 			}
 		}
 
-		if (modepage == 0x3F) {
-			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
-				  "present\n");
-			goto defaults;
-		} else if ((buffer[offset] & 0x3f) != modepage) {
-			sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
-			goto defaults;
-		}
+		sd_printk(KERN_ERR, sdkp, "No Caching mode page found\n");
+		goto defaults;
+
 	Page_found:
 		if (modepage == 8) {
 			sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-04 15:37   ` Potential " Dmitry Vyukov
@ 2013-09-04 15:42     ` Alan Stern
  0 siblings, 0 replies; 10+ messages in thread
From: Alan Stern @ 2013-09-04 15:42 UTC (permalink / raw)
  To: Dmitry Vyukov
  Cc: linux-scsi, richard, ltuikov, jbottomley, Andrey Konovalov,
	Kostya Serebryany

On Wed, 4 Sep 2013, Dmitry Vyukov wrote:

> Thanks, Alan!
> 
> I agree with Paolo that the branch can be removed.
> 
> Will you take care of landing the patch?

I will when everyone agrees it is ready.

Alan Stern


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-04 15:42     ` Alan Stern
@ 2013-09-05 13:38       ` Hannes Reinecke
  2013-09-06 15:49         ` [PATCH] SCSI: Fix potential " Alan Stern
  0 siblings, 1 reply; 10+ messages in thread
From: Hannes Reinecke @ 2013-09-05 13:38 UTC (permalink / raw)
  To: Alan Stern
  Cc: Paolo Bonzini, Dmitry Vyukov, linux-scsi, richard, ltuikov,
	jbottomley, Andrey Konovalov, Kostya Serebryany

On 09/04/2013 05:42 PM, Alan Stern wrote:
> On Wed, 4 Sep 2013, Paolo Bonzini wrote:
> 
>>> --- usb-3.11.orig/drivers/scsi/sd.c
>>> +++ usb-3.11/drivers/scsi/sd.c
>>> @@ -2419,7 +2419,7 @@ sd_read_cache_type(struct scsi_disk *sdk
>>>  			}
>>>  		}
>>>  
>>> -		if (modepage == 0x3F) {
>>> +		if (modepage == 0x3F || offset + 2 >= len) {
>>>  			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
>>>  				  "present\n");
>>>  			goto defaults;
>>
>> If you do this, the buggy "if" becomes dead code (the loop above doesn't
>> have any "break", so you know that offset >= len and the new condition
>> is always true).
>>
>> So the patch does indeed prevent the bug, but the code can be simplified.
> 
> That's right.  I didn't realize it at first, but the only way to get 
> here is if the next page offset lies beyond the end of the data in the 
> buffer.  Therefore the patch can be simplified as follows.
> 
Oh, pretty please. I already had customers complaining about the
'got wrong page' message. Which again demonstrated nicely the
uncertainty relation between correctness and usability :-)

> Alan Stern
> 
> 
> 
> Index: usb-3.11/drivers/scsi/sd.c
> ===================================================================
> --- usb-3.11.orig/drivers/scsi/sd.c
> +++ usb-3.11/drivers/scsi/sd.c
> @@ -2419,14 +2419,9 @@ sd_read_cache_type(struct scsi_disk *sdk
>  			}
>  		}
>  
> -		if (modepage == 0x3F) {
> -			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
> -				  "present\n");
> -			goto defaults;
> -		} else if ((buffer[offset] & 0x3f) != modepage) {
> -			sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
> -			goto defaults;
> -		}
> +		sd_printk(KERN_ERR, sdkp, "No Caching mode page found\n");
> +		goto defaults;
> +
>  	Page_found:
>  		if (modepage == 8) {
>  			sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
Acked-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH] SCSI: Fix potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-05 13:38       ` Hannes Reinecke
@ 2013-09-06 15:49         ` Alan Stern
  2013-09-06 16:24           ` Paolo Bonzini
  0 siblings, 1 reply; 10+ messages in thread
From: Alan Stern @ 2013-09-06 15:49 UTC (permalink / raw)
  To: James Bottomley
  Cc: SCSI development list, Hannes Reinecke, Paolo Bonzini,
	Dmitry Vyukov, richard, ltuikov, Andrey Konovalov,
	Kostya Serebryany

This patch fixes an out-of-bounds error in sd_read_cache_type(), found
by Google's AddressSanitizer tool.  When the loop ends, we know that
"offset" lies beyond the end of the data in the buffer, so no Caching
mode page was found.  In theory it may be present, but the buffer size
is limited to 512 bytes.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
CC: <stable@vger.kernel.org>

---


[as1709]


 drivers/scsi/sd.c |   11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

Index: usb-3.11/drivers/scsi/sd.c
===================================================================
--- usb-3.11.orig/drivers/scsi/sd.c
+++ usb-3.11/drivers/scsi/sd.c
@@ -2419,14 +2419,9 @@ sd_read_cache_type(struct scsi_disk *sdk
 			}
 		}
 
-		if (modepage == 0x3F) {
-			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
-				  "present\n");
-			goto defaults;
-		} else if ((buffer[offset] & 0x3f) != modepage) {
-			sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
-			goto defaults;
-		}
+		sd_printk(KERN_ERR, sdkp, "No Caching mode page found\n");
+		goto defaults;
+
 	Page_found:
 		if (modepage == 8) {
 			sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] SCSI: Fix potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-06 15:49         ` [PATCH] SCSI: Fix potential " Alan Stern
@ 2013-09-06 16:24           ` Paolo Bonzini
  2013-09-09  6:25             ` Hannes Reinecke
  0 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2013-09-06 16:24 UTC (permalink / raw)
  To: Alan Stern
  Cc: James Bottomley, SCSI development list, Hannes Reinecke,
	Dmitry Vyukov, richard, ltuikov, Andrey Konovalov,
	Kostya Serebryany

Il 06/09/2013 17:49, Alan Stern ha scritto:
> This patch fixes an out-of-bounds error in sd_read_cache_type(), found
> by Google's AddressSanitizer tool.  When the loop ends, we know that
> "offset" lies beyond the end of the data in the buffer, so no Caching
> mode page was found.  In theory it may be present, but the buffer size
> is limited to 512 bytes.
> 
> Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
> Reported-by: Dmitry Vyukov <dvyukov@google.com>
> CC: <stable@vger.kernel.org>

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

> 
> ---
> 
> 
> [as1709]
> 
> 
>  drivers/scsi/sd.c |   11 +++--------
>  1 file changed, 3 insertions(+), 8 deletions(-)
> 
> Index: usb-3.11/drivers/scsi/sd.c
> ===================================================================
> --- usb-3.11.orig/drivers/scsi/sd.c
> +++ usb-3.11/drivers/scsi/sd.c
> @@ -2419,14 +2419,9 @@ sd_read_cache_type(struct scsi_disk *sdk
>  			}
>  		}
>  
> -		if (modepage == 0x3F) {
> -			sd_printk(KERN_ERR, sdkp, "No Caching mode page "
> -				  "present\n");
> -			goto defaults;
> -		} else if ((buffer[offset] & 0x3f) != modepage) {
> -			sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
> -			goto defaults;
> -		}
> +		sd_printk(KERN_ERR, sdkp, "No Caching mode page found\n");
> +		goto defaults;
> +
>  	Page_found:
>  		if (modepage == 8) {
>  			sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);
> 


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] SCSI: Fix potential out-of-bounds access in drivers/scsi/sd.c
  2013-09-06 16:24           ` Paolo Bonzini
@ 2013-09-09  6:25             ` Hannes Reinecke
  0 siblings, 0 replies; 10+ messages in thread
From: Hannes Reinecke @ 2013-09-09  6:25 UTC (permalink / raw)
  To: Alan Stern
  Cc: Paolo Bonzini, James Bottomley, SCSI development list,
	Dmitry Vyukov, richard, ltuikov, Andrey Konovalov,
	Kostya Serebryany

On 09/06/2013 06:24 PM, Paolo Bonzini wrote:
> Il 06/09/2013 17:49, Alan Stern ha scritto:
>> This patch fixes an out-of-bounds error in sd_read_cache_type(), found
>> by Google's AddressSanitizer tool.  When the loop ends, we know that
>> "offset" lies beyond the end of the data in the buffer, so no Caching
>> mode page was found.  In theory it may be present, but the buffer size
>> is limited to 512 bytes.
>>
>> Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
>> Reported-by: Dmitry Vyukov <dvyukov@google.com>
>> CC: <stable@vger.kernel.org>
> 
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> 
Acked-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2013-09-09  6:25 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-04  0:31 Potential out-of-bounds access in drivers/scsi/sd.c Dmitry Vyukov
2013-09-04 14:32 ` Alan Stern
2013-09-04 14:45   ` Paolo Bonzini
2013-09-04 15:42     ` Alan Stern
2013-09-05 13:38       ` Hannes Reinecke
2013-09-06 15:49         ` [PATCH] SCSI: Fix potential " Alan Stern
2013-09-06 16:24           ` Paolo Bonzini
2013-09-09  6:25             ` Hannes Reinecke
2013-09-04 15:37   ` Potential " Dmitry Vyukov
2013-09-04 15:42     ` Alan Stern

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).