| From b3b51417d0af63fb9a06662dc292200aed9ea53f Mon Sep 17 00:00:00 2001 |
| From: Michael Grzeschik <m.grzeschik@pengutronix.de> |
| Date: Mon, 22 May 2017 13:02:44 +0200 |
| Subject: usb: usbip: set buffer pointers to NULL after free |
| |
| From: Michael Grzeschik <m.grzeschik@pengutronix.de> |
| |
| commit b3b51417d0af63fb9a06662dc292200aed9ea53f upstream. |
| |
| The usbip stack dynamically allocates the transfer_buffer and |
| setup_packet of each urb that got generated by the tcp to usb stub code. |
| As these pointers are always used only once we will set them to NULL |
| after use. This is done likewise to the free_urb code in vudc_dev.c. |
| This patch fixes double kfree situations where the usbip remote side |
| added the URB_FREE_BUFFER. |
| |
| Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> |
| Acked-by: Shuah Khan <shuahkh@osg.samsung.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/usbip/stub_main.c | 4 ++++ |
| drivers/usb/usbip/stub_tx.c | 4 ++++ |
| 2 files changed, 8 insertions(+) |
| |
| --- a/drivers/usb/usbip/stub_main.c |
| +++ b/drivers/usb/usbip/stub_main.c |
| @@ -262,7 +262,11 @@ void stub_device_cleanup_urbs(struct stu |
| kmem_cache_free(stub_priv_cache, priv); |
| |
| kfree(urb->transfer_buffer); |
| + urb->transfer_buffer = NULL; |
| + |
| kfree(urb->setup_packet); |
| + urb->setup_packet = NULL; |
| + |
| usb_free_urb(urb); |
| } |
| } |
| --- a/drivers/usb/usbip/stub_tx.c |
| +++ b/drivers/usb/usbip/stub_tx.c |
| @@ -28,7 +28,11 @@ static void stub_free_priv_and_urb(struc |
| struct urb *urb = priv->urb; |
| |
| kfree(urb->setup_packet); |
| + urb->setup_packet = NULL; |
| + |
| kfree(urb->transfer_buffer); |
| + urb->transfer_buffer = NULL; |
| + |
| list_del(&priv->list); |
| kmem_cache_free(stub_priv_cache, priv); |
| usb_free_urb(urb); |