Commit 48c8276d authored by Roel Kluin's avatar Roel Kluin Committed by Greg Kroah-Hartman

Staging: rspiusb: Check usb_buffer_map_sg() retval

usb_buffer_map_sg() may return -1, check this directly.
Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
Reviewed-by: default avatarJiri Slaby <jirislaby@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 77943d31
...@@ -611,6 +611,7 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx) ...@@ -611,6 +611,7 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx)
int i = 0; int i = 0;
int k = 0; int k = 0;
int err = 0; int err = 0;
int ret;
struct page **maplist_p; struct page **maplist_p;
int numPagesRequired; int numPagesRequired;
...@@ -687,9 +688,16 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx) ...@@ -687,9 +688,16 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx)
} else { } else {
pdx->sgl[frameInfo][0].length = count; pdx->sgl[frameInfo][0].length = count;
} }
pdx->sgEntries[frameInfo] = ret = usb_buffer_map_sg(pdx->udev, epAddr, pdx->sgl[frameInfo],
usb_buffer_map_sg(pdx->udev, epAddr, pdx->sgl[frameInfo],
pdx->maplist_numPagesMapped[frameInfo]); pdx->maplist_numPagesMapped[frameInfo]);
if (ret < 0) {
vfree(maplist_p);
dbg("usb_buffer_map_sg() failed");
return -EINVAL;
}
pdx->sgEntries[frameInfo] = ret;
dbg("number of sgEntries = %d", pdx->sgEntries[frameInfo]); dbg("number of sgEntries = %d", pdx->sgEntries[frameInfo]);
pdx->userBufMapped = 1; pdx->userBufMapped = 1;
vfree(maplist_p); vfree(maplist_p);
...@@ -716,8 +724,6 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx) ...@@ -716,8 +724,6 @@ static int MapUserBuffer(struct ioctl_struct *io, struct device_extension *pdx)
pdx->PixelUrb[frameInfo][i]->transfer_flags = pdx->PixelUrb[frameInfo][i]->transfer_flags =
URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT; URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT;
} }
if (i == 0)
return -EINVAL;
/* only interrupt when last URB completes */ /* only interrupt when last URB completes */
pdx->PixelUrb[frameInfo][--i]->transfer_flags &= ~URB_NO_INTERRUPT; pdx->PixelUrb[frameInfo][--i]->transfer_flags &= ~URB_NO_INTERRUPT;
pdx->pendedPixelUrbs[frameInfo] = pdx->pendedPixelUrbs[frameInfo] =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment