|
@@ -506,12 +506,12 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
|
|
|
unsigned a, b;
|
|
|
int c, old_c, totaldigits;
|
|
|
const char __user __force *ubuf = (const char __user __force *)buf;
|
|
|
- int exp_digit, in_range;
|
|
|
+ int at_start, in_range;
|
|
|
|
|
|
totaldigits = c = 0;
|
|
|
bitmap_zero(maskp, nmaskbits);
|
|
|
do {
|
|
|
- exp_digit = 1;
|
|
|
+ at_start = 1;
|
|
|
in_range = 0;
|
|
|
a = b = 0;
|
|
|
|
|
@@ -540,11 +540,10 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
|
|
|
break;
|
|
|
|
|
|
if (c == '-') {
|
|
|
- if (exp_digit || in_range)
|
|
|
+ if (at_start || in_range)
|
|
|
return -EINVAL;
|
|
|
b = 0;
|
|
|
in_range = 1;
|
|
|
- exp_digit = 1;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -554,16 +553,18 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
|
|
|
b = b * 10 + (c - '0');
|
|
|
if (!in_range)
|
|
|
a = b;
|
|
|
- exp_digit = 0;
|
|
|
+ at_start = 0;
|
|
|
totaldigits++;
|
|
|
}
|
|
|
if (!(a <= b))
|
|
|
return -EINVAL;
|
|
|
if (b >= nmaskbits)
|
|
|
return -ERANGE;
|
|
|
- while (a <= b) {
|
|
|
- set_bit(a, maskp);
|
|
|
- a++;
|
|
|
+ if (!at_start) {
|
|
|
+ while (a <= b) {
|
|
|
+ set_bit(a, maskp);
|
|
|
+ a++;
|
|
|
+ }
|
|
|
}
|
|
|
} while (buflen && c == ',');
|
|
|
return 0;
|