Skip to content

Commit

Permalink
SLOB: fix bogus ksize calculation fix
Browse files Browse the repository at this point in the history
This fixes the previous fix, which was completely wrong on closer
inspection. This version has been manually tested with a user-space
test harness and generates sane values. A nearly identical patch has
been boot-tested.

The problem arose from changing how kmalloc/kfree handled alignment
padding without updating ksize to match. This brings it in sync.

Signed-off-by: Matt Mackall <mpm@selenic.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Matt Mackall authored and Linus Torvalds committed Oct 9, 2008
1 parent 6984937 commit 70096a5
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions mm/slob.c
Original file line number Diff line number Diff line change
Expand Up @@ -514,9 +514,11 @@ size_t ksize(const void *block)
return 0;

sp = (struct slob_page *)virt_to_page(block);
if (slob_page(sp))
return (((slob_t *)block - 1)->units - 1) * SLOB_UNIT;
else
if (slob_page(sp)) {
int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
unsigned int *m = (unsigned int *)(block - align);
return SLOB_UNITS(*m) * SLOB_UNIT;
} else
return sp->page.private;
}

Expand Down

0 comments on commit 70096a5

Please sign in to comment.