block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
diff mbox series

Message ID 1291021255-2838-1-git-send-email-dfeng@redhat.com
State New, archived
Headers show
Series
  • block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
Related show

Commit Message

tip-bot for Xiaotian Feng Nov. 29, 2010, 9 a.m. UTC
commit 9284bcf checks for proper length of iov entries in
blk_rq_map_user_iov(). But if the map is unaligned, kernel
will break out the loop without checking for the proper length.
So we need to check the proper length before the unalign check.

Signed-off-by: Xiaotian Feng <dfeng@redhat.com>
Cc: Jens Axboe <axboe@kernel.dk>
---
 block/blk-map.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

Comments

Jens Axboe Nov. 29, 2010, 9:04 a.m. UTC | #1
On 2010-11-29 10:00, Xiaotian Feng wrote:
> commit 9284bcf checks for proper length of iov entries in
> blk_rq_map_user_iov(). But if the map is unaligned, kernel
> will break out the loop without checking for the proper length.
> So we need to check the proper length before the unalign check.

Thanks, good catch. Applied.

Patch
diff mbox series

diff --git a/block/blk-map.c b/block/blk-map.c
index 5d5dbe4..e663ac2 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -201,12 +201,13 @@  int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
 	for (i = 0; i < iov_count; i++) {
 		unsigned long uaddr = (unsigned long)iov[i].iov_base;
 
+		if (!iov[i].iov_len)
+			return -EINVAL;
+
 		if (uaddr & queue_dma_alignment(q)) {
 			unaligned = 1;
 			break;
 		}
-		if (!iov[i].iov_len)
-			return -EINVAL;
 	}
 
 	if (unaligned || (q->dma_pad_mask & len) || map_data)