]> git.baikalelectronics.ru Git - kernel.git/commit
Fix slab redzone alignment
authorDavid Woodhouse <dwmw2@infradead.org>
Thu, 5 Jul 2007 01:26:44 +0000 (21:26 -0400)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 5 Jul 2007 22:54:13 +0000 (15:54 -0700)
commite0f0bc141ca2b7cf117cd987d32114e7f40a3e45
treec185e20386fd3ec8679d3d52bae822d9963df5da
parentaca937cbe78ac58f1952064b7fde37b582b64a86
Fix slab redzone alignment

Commit a893ae260ef6eb4a5510374dc325fe3bce07967b fixed a couple of bugs
by switching the redzone to 64 bits. Unfortunately, it neglected to
ensure that the _second_ redzone, after the slab object, is aligned
correctly. This caused illegal instruction faults on sparc32, which for
some reason not entirely clear to me are not trapped and fixed up.

Two things need to be done to fix this:
  - increase the object size, rounding up to alignof(long long) so
    that the second redzone can be aligned correctly.
  - If SLAB_STORE_USER is set but alignof(long long)==8, allow a
    full 64 bits of space for the user word at the end of the buffer,
    even though we may not _use_ the whole 64 bits.

This patch should be a no-op on any 64-bit architecture or any 32-bit
architecture where alignof(long long) == 4. Of the others, it's tested
on ppc32 by myself and a very similar patch was tested on sparc32 by
Mark Fortescue, who reported the new problem.

Also, fix the conditions for FORCED_DEBUG, which hadn't been adjusted to
the new sizes. Again noticed by Mark.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/slab.c