Pekka Enberg wrote:On Mon, Jul 28, 2008 at 11:35 PM, Andrew Morton
<akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
On Mon, 28 Jul 2008 11:13:03 -0500Hmm, SLUB will use the page allocator directly for PAGE_CACHE_SIZE
Eric Sandeen <sandeen@xxxxxxxxxx> wrote:
With SLUB debugging turned on in 2.6.26, I was getting memory corruptionThe fix applies to both 2.6.25 and to 2.6.26 and appears to be needed
when testing eCryptfs. The root cause turned out to be that eCryptfs
was doing kmalloc(PAGE_CACHE_SIZE); virt_to_page() and treating that
as a nice page-aligned chunk of memory. But at least with SLUB debugging
on, this is not always true, and the page we get from virt_to_page does
not necessarily match the PAGE_CACHE_SIZE worth of memory we got from
kmalloc.
My simple testcase was 2 loops doing "rm -f fileX; cp /tmp/fileX ." for
2 different multi-megabyte files. With this change I no longer see
the corruption.
in both kernel versions, so I have tagged it for backporting into both.
regadless of whether debugging is enabled or not...
For whatever reason, I did see non-page-aligned memory returned from
kmalloc(PAGE_CACHE_SIZE), and I think this is what caused the problem
once virt_to_page() was used to get hold of a page to pass around in the
ecryptfs/crypto code...