aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Piggin <[email protected]>2010-07-20 13:24:25 -0700
committerLinus Torvalds <[email protected]>2010-07-20 16:25:40 -0700
commita6aa62a0909b9ccb1f8b0d2653920ba071037972 (patch)
tree2df66e9a20cdb8fac10a1979c6b678e98ee67f0a
parentc61284e99191b2284fb74dae6961d4d09e4e59e8 (diff)
mm/vmscan.c: fix mapping use after free
We need lock_page_nosync() here because we have no reference to the mapping when taking the page lock. Signed-off-by: Nick Piggin <[email protected]> Reviewed-by: Johannes Weiner <[email protected]> Cc: Mel Gorman <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r--mm/vmscan.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 199fa436c0dd..b94fe1b3da43 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -298,7 +298,7 @@ static int may_write_to_queue(struct backing_dev_info *bdi)
static void handle_write_error(struct address_space *mapping,
struct page *page, int error)
{
- lock_page(page);
+ lock_page_nosync(page);
if (page_mapping(page) == mapping)
mapping_set_error(mapping, error);
unlock_page(page);