Re: [PATCH][RFC] storage: Reject bogus max LUN values

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 12 Oct 2014, Mark Knibbs wrote:

> --- linux-3.17/drivers/usb/storage/transport.c.orig	2014-10-05 20:12:36.000000000 +0100
> +++ linux-3.17/drivers/usb/storage/transport.c	2014-10-12 13:11:38.000000000 +0100
> @@ -1035,9 +1035,20 @@ int usb_stor_Bulk_max_lun(struct us_data
>  	usb_stor_dbg(us, "GetMaxLUN command result is %d, data is %d\n",
>  		     result, us->iobuf[0]);
>  
> -	/* if we have a successful request, return the result */
> -	if (result > 0)
> -		return us->iobuf[0];
> +	/*
> +	 * If we have a successful request, return the result if valid. The
> +	 * CBW LUN field is 4 bits wide, so the value reported by the device
> +	 * should fit into that.
> +	 */
> +	if (result > 0) {
> +		if (!(us->iobuf[0] & 0xf0)) {

Since the Max-LUN value is just a plain old number (with no special 
interpretations for the individual bits), it is easier to understand if 
the code treats it that way.  Simply say:

		if (us->iobuf[0] < 16) {

> +			return us->iobuf[0];
> +		} else {
> +			dev_info(&us->pusb_intf->dev,
> +				 "Max LUN %d is not valid, using 0 instead",
> +				 us->iobuf[0]);
> +		}
> +	}
>  
>  	/*
>  	 * Some devices don't like GetMaxLUN.  They may STALL the control

Apart from that minor issue,

Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux