From e9e95ecba0fbf7b2c0ab9aabc344da4af76ed42f Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Thu, 10 Jan 2013 12:56:58 -0600 Subject: [PATCH] --- yaml --- r: 359614 b: refs/heads/master c: 38901e0f240b634467fb31743365af80a006be33 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/block/rbd.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 3151ff1d7d02..1a498c6de4b7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 98571b5aa776d4a69eadd7d4e5c9d4e69365ab9a +refs/heads/master: 38901e0f240b634467fb31743365af80a006be33 diff --git a/trunk/drivers/block/rbd.c b/trunk/drivers/block/rbd.c index 4ed074138f8d..58d01e3a0fce 100644 --- a/trunk/drivers/block/rbd.c +++ b/trunk/drivers/block/rbd.c @@ -820,6 +820,7 @@ static int rbd_get_num_segments(struct rbd_image_header *header, { u64 start_seg; u64 end_seg; + u64 result; if (!len) return 0; @@ -829,7 +830,11 @@ static int rbd_get_num_segments(struct rbd_image_header *header, start_seg = ofs >> header->obj_order; end_seg = (ofs + len - 1) >> header->obj_order; - return end_seg - start_seg + 1; + result = end_seg - start_seg + 1; + if (result > (u64) INT_MAX) + return -ERANGE; + + return (int) result; } /*