Thread (7 messages) flat view 7 messages, 5 authors, 2014-12-01

Re: [PATCH v2] slab: Fix nodeid bounds check for non-contiguous node IDs

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2014-12-01 08:52:25
Also in: linux-mm, lkml

On Mon, 2014-12-01 at 16:24 +1100, Paul Mackerras wrote:
On Mon, Dec 01, 2014 at 04:02:14PM +1100, Michael Ellerman wrote:
quoted
On Mon, 2014-12-01 at 15:28 +1100, Paul Mackerras wrote:
quoted
The bounds check for nodeid in ____cache_alloc_node gives false
positives on machines where the node IDs are not contiguous, leading
to a panic at boot time.  For example, on a POWER8 machine the node
IDs are typically 0, 1, 16 and 17.  This means that num_online_nodes()
returns 4, so when ____cache_alloc_node is called with nodeid = 16 the
VM_BUG_ON triggers, like this:
...
quoted
To fix this, we instead compare the nodeid with MAX_NUMNODES, and
additionally make sure it isn't negative (since nodeid is an int).
The check is there mainly to protect the array dereference in the
get_node() call in the next line, and the array being dereferenced is
of size MAX_NUMNODES.  If the nodeid is in range but invalid (for
example if the node is off-line), the BUG_ON in the next line will
catch that.
When did this break? How come we only just noticed?
Commit 14e50c6a9bc2, which went into 3.10-rc1.
OK. So a Fixes tag is nice:

Fixes: 14e50c6a9bc2 ("mm: slab: Verify the nodeid passed to ____cache_alloc_node")
You'll only notice if you have CONFIG_SLAB=y and CONFIG_DEBUG_VM=y
and you're running on a machine with discontiguous node IDs.
Right. And we have SLUB=y for all the defconfigs that are likely to hit that.
quoted
Also needs:

Cc: stable@vger.kernel.org
It does.  I remembered that a minute after I sent the patch.
OK. Hopefully one of the slab maintainers will be happy to add it for us when
they merge this?

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help