ACK: [CVE-2016-5400][Vivid, Xenial] media: fix airspy usb probe error path

Colin Ian King colin.king at canonical.com
Thu Jul 28 13:08:32 UTC 2016


On 28/07/16 14:06, Luis Henriques wrote:
> From: James Patrick-Evans <james at jmp-e.com>
> 
> Fix a memory leak on probe error of the airspy usb device driver.
> 
> The problem is triggered when more than 64 usb devices register with
> v4l2 of type VFL_TYPE_SDR or VFL_TYPE_SUBDEV.
> 
> The memory leak is caused by the probe function of the airspy driver
> mishandeling errors and not freeing the corresponding control structures
> when an error occours registering the device to v4l2 core.
> 
> A badusb device can emulate 64 of these devices, and then through
> continual emulated connect/disconnect of the 65th device, cause the
> kernel to run out of RAM and crash the kernel, thus causing a local DOS
> vulnerability.
> 
> Fixes CVE-2016-5400
> 
> Signed-off-by: James Patrick-Evans <james at jmp-e.com>
> Reviewed-by: Kees Cook <keescook at chromium.org>
> Cc: stable at vger.kernel.org # 3.17+
> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
> (cherry picked from commit aa93d1fee85c890a34f2510a310e55ee76a27848)
> CVE-2016-5400
> Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
> ---
>  drivers/media/usb/airspy/airspy.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/media/usb/airspy/airspy.c b/drivers/media/usb/airspy/airspy.c
> index a50750ce511d..ce51bf19cef3 100644
> --- a/drivers/media/usb/airspy/airspy.c
> +++ b/drivers/media/usb/airspy/airspy.c
> @@ -1072,7 +1072,7 @@ static int airspy_probe(struct usb_interface *intf,
>  	if (ret) {
>  		dev_err(s->dev, "Failed to register as video device (%d)\n",
>  				ret);
> -		goto err_unregister_v4l2_dev;
> +		goto err_free_controls;
>  	}
>  	dev_info(s->dev, "Registered as %s\n",
>  			video_device_node_name(&s->vdev));
> @@ -1081,7 +1081,6 @@ static int airspy_probe(struct usb_interface *intf,
>  
>  err_free_controls:
>  	v4l2_ctrl_handler_free(&s->hdl);
> -err_unregister_v4l2_dev:
>  	v4l2_device_unregister(&s->v4l2_dev);
>  err_free_mem:
>  	kfree(s);
> 
Looks good to me.

Acked-by: Colin Ian King <colin.king at canonical.com>





More information about the kernel-team mailing list