On Thu, 6 Jan 2011 11:04:39 +0100 Michal Hocko <mhocko@xxxxxxx> wrote: > NODEMASK_ALLOC can use kmalloc if nodemask_t > 256 bytes so it might > fail with NULL as a result. Let's check the resulting variable and > fail with -ENOMEM if NODEMASK_ALLOC failed. > > Signed-off-by: Michal Hocko <mhocko@xxxxxxx> > --- > mm/hugetlb.c | 18 +++++++++++++++--- > 1 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index 4c0606c..21f31b2 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -1439,14 +1439,19 @@ static ssize_t nr_hugepages_store_common(bool obey_mempolicy, > struct hstate *h; > NODEMASK_ALLOC(nodemask_t, nodes_allowed, GFP_KERNEL | __GFP_NORETRY); > > + if (!nodes_allowed) { > + err = -ENOMEM; > + goto out; > + } Looks good to me. I was going to complain that it adds extra unneeded instructions in the case where the nodemasks are allocated on the stack. But it appears that gcc assumes that stack-based variables cannot have address zero, so if gcc sees this: { nodemask_t foo; if (!&foo) { stuff } } if just removes it all for us. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>