On Wed Jan 14 10:32:13 2026 +0000, Ricardo Ribalda wrote:
> If a frame has size of less or equal than one packet size
> uvc_alloc_urb_buffers() is unable to allocate memory for it due to a
> off-by-one error.
> 
> Fix the off-by-one-error and now that we are at it, make sure that
> stream->urb_size has always a valid value when we return from the
> function, even when an error happens.
> 
> Fixes: efdc8a9585ce ("V4L/DVB (10295): uvcvideo: Retry URB buffers allocation 
> when the system is low on memory.")
> Reported-by: Itay Chamiel <[email protected]>
> Closes: 
> https://lore.kernel.org/linux-media/canidscssozf2lsccowaubcg6tjt-ypxr1b85aa6radmvyr2...@mail.gmail.com/T/#t
> Co-developed-by: Itay Chamiel <[email protected]>
> Signed-off-by: Itay Chamiel <[email protected]>
> Signed-off-by: Ricardo Ribalda <[email protected]>
> Reviewed-by: Laurent Pinchart <[email protected]>
> Tested-by: Itay Chamiel <[email protected]>
> Link: 
> https://patch.msgid.link/[email protected]
> Signed-off-by: Laurent Pinchart <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/usb/uvc/uvc_video.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/usb/uvc/uvc_video.c 
b/drivers/media/usb/uvc/uvc_video.c
index 2094e059d7d3..ec76595f3c4b 100644
--- a/drivers/media/usb/uvc/uvc_video.c
+++ b/drivers/media/usb/uvc/uvc_video.c
@@ -1812,7 +1812,7 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming 
*stream,
                npackets = UVC_MAX_PACKETS;
 
        /* Retry allocations until one succeed. */
-       for (; npackets > 1; npackets /= 2) {
+       for (; npackets > 0; npackets /= 2) {
                stream->urb_size = psize * npackets;
 
                for (i = 0; i < UVC_URBS; ++i) {
@@ -1837,6 +1837,7 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming 
*stream,
        uvc_dbg(stream->dev, VIDEO,
                "Failed to allocate URB buffers (%u bytes per packet)\n",
                psize);
+       stream->urb_size = 0;
        return 0;
 }
 
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to