mm: BUG when __kmap_atomic_idx equals KM_TYPE_NR
authorChintan Pandya <[email protected]>
Wed, 6 Aug 2014 23:08:18 +0000 (16:08 -0700)
committerLinus Torvalds <[email protected]>
Thu, 7 Aug 2014 01:01:22 +0000 (18:01 -0700)
__kmap_atomic_idx is per_cpu variable.  Each CPU can use KM_TYPE_NR
entries from FIXMAP i.e.  from 0 to KM_TYPE_NR - 1.  Allowing
__kmap_atomic_idx to over- shoot to KM_TYPE_NR can mess up with next
CPU's 0th entry which is a bug.  Hence BUG_ON if __kmap_atomic_idx >=
KM_TYPE_NR.

Fix the off-by-on in this test.

Signed-off-by: Chintan Pandya <[email protected]>
Cc: David Rientjes <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
include/linux/highmem.h

index 7fb31da45d03bbb40f1840159fc646736c187fb3..9286a46b7d69b539f027bcc890b3be976d20f228 100644 (file)
@@ -93,7 +93,7 @@ static inline int kmap_atomic_idx_push(void)
 
 #ifdef CONFIG_DEBUG_HIGHMEM
        WARN_ON_ONCE(in_irq() && !irqs_disabled());
-       BUG_ON(idx > KM_TYPE_NR);
+       BUG_ON(idx >= KM_TYPE_NR);
 #endif
        return idx;
 }