diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/bitmap-str.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/bitmap-str.c b/lib/bitmap-str.c index b58966864657..cafd6388892f 100644 --- a/lib/bitmap-str.c +++ b/lib/bitmap-str.c @@ -8,6 +8,7 @@ #include <linux/hex.h> #include <linux/kernel.h> #include <linux/mm.h> +#include <linux/overflow.h> #include <linux/string.h> #include "kstrtox.h" @@ -186,10 +187,12 @@ struct region { static void bitmap_set_region(const struct region *r, unsigned long *bitmap) { - unsigned int start; + unsigned int start = r->start; - for (start = r->start; start <= r->end; start += r->group_len) + do { bitmap_set(bitmap, start, min(r->end - start + 1, r->off)); + } while (!check_add_overflow(start, r->group_len, &start) && + start <= r->end); } static int bitmap_check_region(const struct region *r) |
