Skip to content
/ linux Public

Commit e331164

Browse files
ribaldaSasha Levin
authored andcommitted
media: uvcvideo: Fix allocation for small frame sizes
[ Upstream commit 40d3ac2 ] 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 <itay.chamiel@q.ai> Closes: https://lore.kernel.org/linux-media/CANiDSCsSoZf2LsCCoWAUbCg6tJT-ypXR1B85aa6rAdMVYr2iBQ@mail.gmail.com/T/#t Co-developed-by: Itay Chamiel <itay.chamiel@q.ai> Signed-off-by: Itay Chamiel <itay.chamiel@q.ai> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Tested-by: Itay Chamiel <itay.chamiel@q.ai> Link: https://patch.msgid.link/20260114-uvc-alloc-urb-v1-1-cedf3fb66711@chromium.org Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 01fe5a2 commit e331164

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

drivers/media/usb/uvc/uvc_video.c

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

18211821
/* Retry allocations until one succeed. */
1822-
for (; npackets > 1; npackets /= 2) {
1822+
for (; npackets > 0; npackets /= 2) {
18231823
stream->urb_size = psize * npackets;
18241824

18251825
for (i = 0; i < UVC_URBS; ++i) {
@@ -1844,6 +1844,7 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming *stream,
18441844
uvc_dbg(stream->dev, VIDEO,
18451845
"Failed to allocate URB buffers (%u bytes per packet)\n",
18461846
psize);
1847+
stream->urb_size = 0;
18471848
return 0;
18481849
}
18491850

0 commit comments

Comments
 (0)