On Mon Mar 30 11:37:27 2026 +0200, Johan Hovold wrote:
> USB drivers bind to USB interfaces and any device managed resources
> should have their lifetime tied to the interface rather than parent USB
> device. This avoids issues like memory leaks when drivers are unbound
> without their devices being physically disconnected (e.g. on probe
> deferral or configuration changes).
> 
> Fix the driver state lifetime so that it is released on driver unbind.
> 
> Fixes: 184a82784d50 ("[media] cx231xx: use devm_ functions to allocate 
> memory")
> Cc: [email protected]      # 3.17
> Signed-off-by: Johan Hovold <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/usb/cx231xx/cx231xx-cards.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

---

diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c 
b/drivers/media/usb/cx231xx/cx231xx-cards.c
index b75535d6abaf..69b24205bc56 100644
--- a/drivers/media/usb/cx231xx/cx231xx-cards.c
+++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
@@ -1573,7 +1573,8 @@ static int cx231xx_init_v4l2(struct cx231xx *dev,
                 dev->video_mode.end_point_addr,
                 dev->video_mode.num_alt);
 
-       dev->video_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 32, 
dev->video_mode.num_alt, GFP_KERNEL);
+       dev->video_mode.alt_max_pkt_size = devm_kmalloc_array(&interface->dev, 
32,
+                                                             
dev->video_mode.num_alt, GFP_KERNEL);
        if (dev->video_mode.alt_max_pkt_size == NULL)
                return -ENOMEM;
 
@@ -1614,7 +1615,8 @@ static int cx231xx_init_v4l2(struct cx231xx *dev,
                 dev->vbi_mode.num_alt);
 
        /* compute alternate max packet sizes for vbi */
-       dev->vbi_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 32, 
dev->vbi_mode.num_alt, GFP_KERNEL);
+       dev->vbi_mode.alt_max_pkt_size = devm_kmalloc_array(&interface->dev, 32,
+                                                           
dev->vbi_mode.num_alt, GFP_KERNEL);
        if (dev->vbi_mode.alt_max_pkt_size == NULL)
                return -ENOMEM;
 
@@ -1656,7 +1658,9 @@ static int cx231xx_init_v4l2(struct cx231xx *dev,
                 "sliced CC EndPoint Addr 0x%x, Alternate settings: %i\n",
                 dev->sliced_cc_mode.end_point_addr,
                 dev->sliced_cc_mode.num_alt);
-       dev->sliced_cc_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 
32, dev->sliced_cc_mode.num_alt, GFP_KERNEL);
+       dev->sliced_cc_mode.alt_max_pkt_size = 
devm_kmalloc_array(&interface->dev, 32,
+                                                                 
dev->sliced_cc_mode.num_alt,
+                                                                 GFP_KERNEL);
        if (dev->sliced_cc_mode.alt_max_pkt_size == NULL)
                return -ENOMEM;
 
@@ -1720,7 +1724,7 @@ static int cx231xx_usb_probe(struct usb_interface 
*interface,
        udev = interface_to_usbdev(interface);
 
        /* allocate memory for our device state and initialize it */
-       dev = devm_kzalloc(&udev->dev, sizeof(*dev), GFP_KERNEL);
+       dev = devm_kzalloc(&interface->dev, sizeof(*dev), GFP_KERNEL);
        if (dev == NULL) {
                retval = -ENOMEM;
                goto err_if;
@@ -1850,7 +1854,9 @@ static int cx231xx_usb_probe(struct usb_interface 
*interface,
                         dev->ts1_mode.end_point_addr,
                         dev->ts1_mode.num_alt);
 
-               dev->ts1_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 
32, dev->ts1_mode.num_alt, GFP_KERNEL);
+               dev->ts1_mode.alt_max_pkt_size = 
devm_kmalloc_array(&interface->dev, 32,
+                                                                   
dev->ts1_mode.num_alt,
+                                                                   GFP_KERNEL);
                if (dev->ts1_mode.alt_max_pkt_size == NULL) {
                        retval = -ENOMEM;
                        goto err_video_alt;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to