From: Paul Cassella <fortytwo-ivtv@manetheren.bigw.org>
get_user_pages() may return fewer page than we ask for. As we give up and
return an error in this case, we need to put_page() each of the pages we
did get.
Signed-off-by: Paul Cassella <fortytwo-ivtv@manetheren.bigw.org>
---
I'm running with this on 2.6.37, though haven't triggered the condition.
This patch is against staging/for_v2.6.39, which compiles cleanly with it.
I'm not sure -EINVAL is the best return code vs -EFAULT or -ENOMEM, but
this mod doesn't change it.
drivers/media/video/ivtv/ivtv-udma.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/drivers/media/video/ivtv/ivtv-udma.c b/drivers/media/video/ivtv/ivtv-udma.c
index 1daf1dd..443ca35 100644
--- a/drivers/media/video/ivtv/ivtv-udma.c
+++ b/drivers/media/video/ivtv/ivtv-udma.c
@@ -132,7 +132,13 @@ int ivtv_udma_setup(struct ivtv *itv, unsigned long ivtv_dest_addr,
if (user_dma.page_count != err) {
IVTV_DEBUG_WARN("failed to map user pages, returned %d instead of %d\n",
err, user_dma.page_count);
- return -EINVAL;
+ if (err >= 0) {
+ for (i = 0; i < err; i++) {
+ put_page(dma->map[i]);
+ }
+ return -EINVAL;
+ }
+ return err;
}
dma->page_count = user_dma.page_count;
--
1.7.2.3
_______________________________________________
ivtv-devel mailing list
ivtv-devel@ivtvdriver.org
http://ivtvdriver.org/mailman/listinfo/ivtv-devel
get_user_pages() may return fewer page than we ask for. As we give up and
return an error in this case, we need to put_page() each of the pages we
did get.
Signed-off-by: Paul Cassella <fortytwo-ivtv@manetheren.bigw.org>
---
I'm running with this on 2.6.37, though haven't triggered the condition.
This patch is against staging/for_v2.6.39, which compiles cleanly with it.
I'm not sure -EINVAL is the best return code vs -EFAULT or -ENOMEM, but
this mod doesn't change it.
drivers/media/video/ivtv/ivtv-udma.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/drivers/media/video/ivtv/ivtv-udma.c b/drivers/media/video/ivtv/ivtv-udma.c
index 1daf1dd..443ca35 100644
--- a/drivers/media/video/ivtv/ivtv-udma.c
+++ b/drivers/media/video/ivtv/ivtv-udma.c
@@ -132,7 +132,13 @@ int ivtv_udma_setup(struct ivtv *itv, unsigned long ivtv_dest_addr,
if (user_dma.page_count != err) {
IVTV_DEBUG_WARN("failed to map user pages, returned %d instead of %d\n",
err, user_dma.page_count);
- return -EINVAL;
+ if (err >= 0) {
+ for (i = 0; i < err; i++) {
+ put_page(dma->map[i]);
+ }
+ return -EINVAL;
+ }
+ return err;
}
dma->page_count = user_dma.page_count;
--
1.7.2.3
_______________________________________________
ivtv-devel mailing list
ivtv-devel@ivtvdriver.org
http://ivtvdriver.org/mailman/listinfo/ivtv-devel