The patch number 10296 was added via Laurent Pinchart <laurent.pinch...@skynet.be> to http://linuxtv.org/hg/v4l-dvb master development tree.
Kernel patches in this development tree may be modified to be backward compatible with older kernels. Compatibility modifications will be removed before inclusion into the mainstream Kernel If anyone has any objections, please let us know by sending a message to: Linux Media Mailing List <linux-me...@vger.kernel.org> ------ From: Laurent Pinchart <laurent.pinch...@skynet.be> uvcvideo: Fix memory leak in input device handling The dynamically allocated input_dev->phys buffer isn't freed when unregistering the device. As the input layer doesn't provide any release callback, use a fixed-size buffer inside the uvc_device structure. Priority: normal Signed-off-by: Laurent Pinchart <laurent.pinch...@skynet.be> --- linux/drivers/media/video/uvc/uvc_status.c | 16 ++++------------ linux/drivers/media/video/uvc/uvcvideo.h | 1 + 2 files changed, 5 insertions(+), 12 deletions(-) diff -r 080861af82f1 -r f5c337ded781 linux/drivers/media/video/uvc/uvc_status.c --- a/linux/drivers/media/video/uvc/uvc_status.c Sun Jan 18 21:46:30 2009 +0100 +++ b/linux/drivers/media/video/uvc/uvc_status.c Thu Jan 22 16:45:10 2009 +0100 @@ -28,26 +28,19 @@ #ifdef CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV static int uvc_input_init(struct uvc_device *dev) { - struct usb_device *udev = dev->udev; struct input_dev *input; - char *phys = NULL; int ret; input = input_allocate_device(); if (input == NULL) return -ENOMEM; - phys = kmalloc(6 + strlen(udev->bus->bus_name) + strlen(udev->devpath), - GFP_KERNEL); - if (phys == NULL) { - ret = -ENOMEM; - goto error; - } - sprintf(phys, "usb-%s-%s", udev->bus->bus_name, udev->devpath); + usb_make_path(dev->udev, dev->input_phys, sizeof(dev->input_phys)); + strlcat(dev->input_phys, "/button", sizeof(dev->input_phys)); input->name = dev->name; - input->phys = phys; - usb_to_input_id(udev, &input->id); + input->phys = dev->input_phys; + usb_to_input_id(dev->udev, &input->id); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) input->dev.parent = &dev->intf->dev; #else @@ -65,7 +58,6 @@ static int uvc_input_init(struct uvc_dev error: input_free_device(input); - kfree(phys); return ret; } diff -r 080861af82f1 -r f5c337ded781 linux/drivers/media/video/uvc/uvcvideo.h --- a/linux/drivers/media/video/uvc/uvcvideo.h Sun Jan 18 21:46:30 2009 +0100 +++ b/linux/drivers/media/video/uvc/uvcvideo.h Thu Jan 22 16:45:10 2009 +0100 @@ -648,6 +648,7 @@ struct uvc_device { struct urb *int_urb; __u8 *status; struct input_dev *input; + char input_phys[64]; /* Video Streaming interfaces */ struct list_head streaming; --- Patch is available at: http://linuxtv.org/hg/v4l-dvb/rev/f5c337ded781edfca17c5c56ad39352b5adb5222 _______________________________________________ linuxtv-commits mailing list linuxtv-commits@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits