Skip to content

Commit 40d3ac2

Browse files
ribaldaHans Verkuil
authored andcommitted
media: uvcvideo: Fix allocation for small frame sizes
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: efdc8a9 ("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-ypXR1B85aa6rAdMVYr2iBQ@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]>
1 parent 4cf3b6f commit 40d3ac2

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

drivers/media/usb/uvc/uvc_video.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1812,7 +1812,7 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming *stream,
18121812
npackets = UVC_MAX_PACKETS;
18131813

18141814
/* Retry allocations until one succeed. */
1815-
for (; npackets > 1; npackets /= 2) {
1815+
for (; npackets > 0; npackets /= 2) {
18161816
stream->urb_size = psize * npackets;
18171817

18181818
for (i = 0; i < UVC_URBS; ++i) {
@@ -1837,6 +1837,7 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming *stream,
18371837
uvc_dbg(stream->dev, VIDEO,
18381838
"Failed to allocate URB buffers (%u bytes per packet)\n",
18391839
psize);
1840+
stream->urb_size = 0;
18401841
return 0;
18411842
}
18421843

0 commit comments

Comments
 (0)