binder: Fix memory corruption via page aliasing
authorChristopher Lais <chris+android@zenthought.org>
Sat, 1 May 2010 20:51:48 +0000 (15:51 -0500)
committermgross <mark.gross@intel.com>
Wed, 9 Nov 2011 20:05:21 +0000 (12:05 -0800)
commite3a0a67c6fd02f112cb74fa34f60538d54933213
tree88bf3e27728ca8af1a81acc2661da7e706a51758
parentcff3e596a521a3b87c3be9bf88cd3edd647311f6
binder: Fix memory corruption via page aliasing

binder_deferred_release was not unmapping the page from the buffer
before freeing it, causing memory corruption.  This only happened
when page(s) had not been freed by binder_update_page_range, which
properly unmaps the pages.

This only happens on architectures with VIPT aliasing.

To reproduce, create a program which opens, mmaps, munmaps, then closes
the binder very quickly.  This should leave a page allocated when the
binder is released.  When binder_deferrred_release is called on the
close, the page will remain mapped to the address in the linear
proc->buffer.  Later, we may map the same physical page to a different
virtual address that has different coloring, and this may cause
aliasing to occur.

PAGE_POISONING will greatly increase your chances of noticing any
problems.

Change-Id: I6941bf212881b8bf846bdfda43d3609c7ae4892e

Signed-off-by: Christopher Lais <chris+android@zenthought.org>
drivers/staging/android/binder.c