From 70e52ba145b09560ca15c8f1765b0e86cbd8089f Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Mon, 13 Sep 2004 18:38:02 -0700 Subject: [PATCH] [PATCH] Fix ABI in set_mempolicy() Fix ABI in set_mempolicy() that got broken by an earlier change. Add a check for very big input values and prevent excessive looping in the kernel. Cc: Paul "nyer, nyer, your mother wears combat boots!" Jackson Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- mm/mempolicy.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 9b59ac453269d..8fe9c7ee98533 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -132,6 +132,7 @@ static int get_nodes(unsigned long *nodes, unsigned long __user *nmask, unsigned long nlongs; unsigned long endmask; + --maxnode; bitmap_zero(nodes, MAX_NUMNODES); if (maxnode == 0 || !nmask) return 0; @@ -145,6 +146,8 @@ static int get_nodes(unsigned long *nodes, unsigned long __user *nmask, /* When the user specified more nodes than supported just check if the non supported part is all zero. */ if (nlongs > BITS_TO_LONGS(MAX_NUMNODES)) { + if (nlongs > PAGE_SIZE/sizeof(long)) + return -EINVAL; for (k = BITS_TO_LONGS(MAX_NUMNODES); k < nlongs; k++) { unsigned long t; if (get_user(t, nmask + k)) -- 2.53.0