Re: net: cdc_ncm: initialize drvflags before usage

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

 



On Thu, Feb 01, 2018 at 02:49:38PM +0100, Porto Rio wrote:
> Hi all, 
> 
> we detected a problem in stable Kernel 4.4.114 in drivers/net/usb/cdc_ncm.c. In line 833, ctx->drvflags is checked in the if clause:
> 
> 	if (ctx->drvflags & CDC_NCM_FLAG_RESET_NTB16) {
> 
> but it is initialized *later* in line 877:
> 
> 	/* Device-specific flags */
> 	ctx->drvflags = drvflags;
> 
> This initialization has to be done before the if clause.
> 
> Note, that the if clause was backported from mainline at Nov. 15th 2017 (GetNtbFormat endian fix). In mainline, the initialization is at the right place before the if clause.
> 
> Please find here a suggested patch:
> 
> 
> 
> --- linux/drivers/net/usb/cdc_ncm.c.orig	2018-02-01 13:55:20.034393993 +0100
> +++ linux/drivers/net/usb/cdc_ncm.c	2018-02-01 13:56:12.842393881 +0100
> @@ -825,6 +825,9 @@ int cdc_ncm_bind_common(struct usbnet *d
>  		goto error2;
>  	}
>  
> +	/* Device-specific flags */
> +	ctx->drvflags = drvflags;
> +
>  	/*
>  	 * Some Huawei devices have been observed to come out of reset in NDP32 mode.
>  	 * Let's check if this is the case, and set the device to NDP16 mode again if
> @@ -873,9 +876,6 @@ int cdc_ncm_bind_common(struct usbnet *d
>  	/* finish setting up the device specific data */
>  	cdc_ncm_setup(dev);
>  
> -	/* Device-specific flags */
> -	ctx->drvflags = drvflags;
> -
>  	/* Allocate the delayed NDP if needed. */
>  	if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END) {
>  		ctx->delayed_ndp16 = kzalloc(ctx->max_ndp_size, GFP_KERNEL);

Nice catch, care to resend this in a format I can apply it in, with a
signed-off-by and everything?

thanks,

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]