Patch "__bitmap_parselist: fix bug in empty string handling" has been added to the 3.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
__bitmap_parselist: fix bug in empty string handling
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
__bitmap_parselist-fix-bug-in-empty-string-handling.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
2528a8b8f457d7432552d0e2b6f0f4046bb702f4Mon Sep 17 00:00:00 2001
From: Chris Metcalf <[email protected]>
Date: Thu, 25 Jun 2015 15:02:08 -0700
Subject: __bitmap_parselist: fix bug in empty string handling
From: Chris Metcalf <[email protected]>
commit 2528a8b8f457d7432552d0e2b6f0f4046bb702f4 upstream.
bitmap_parselist("", &mask, nmaskbits) will erroneously set bit zero in the mask. The same bug is visible in cpumask_parselist() since it is layered on top of the bitmask code, e.g. if you boot with "isolcpus=", you will actually end up with cpu zero isolated.
The bug was introduced in commit 4b060420a596 ("bitmap, irq: add smp_affinity_list interface to /proc/irq") when bitmap_parselist() was generalized to support userspace as well as kernelspace.
--- lib/bitmap.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
lib/bitmap.c +9 -8
@@ -603,12 +603,12 @@ static int __bitmap_parselist(const charunsigned 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;
@@ -637,11 +637,10 @@ static int __bitmap_parselist(const charbreak ;if (c =='-' ) { -if (exp_digit || in_range) +if (at_start || in_range)return -EINVAL ; b =0 ; in_range =1 ; - exp_digit =1 ;continue ; }
@@ -651,16 +650,18 @@ static int __bitmap_parselist(const char 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 ;
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/__bitmap_parselist-fix-bug-in-empty-string-handling.patch