All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] zsmalloc: fix migrate_zspage-zs_free race condition
@ 2016-01-15  0:36 ` Junil Lee
  0 siblings, 0 replies; 19+ messages in thread
From: Junil Lee @ 2016-01-15  0:36 UTC (permalink / raw)
  To: minchan, ngupta
  Cc: sergey.senozhatsky.work, linux-mm, linux-kernel, Junil Lee

To prevent unlock at the not correct situation, tagging the new obj to
assure lock in migrate_zspage() before right unlock path.

Two functions are in race condition by tag which set 1 on last bit of
obj, however unlock succrently when update new obj to handle before call
unpin_tag() which is right unlock path.

summarize this problem by call flow as below:

		CPU0								CPU1
migrate_zspage
find_alloced_obj()
	trypin_tag() -- obj |= HANDLE_PIN_BIT
obj_malloc() -- new obj is not set			zs_free
record_obj() -- unlock and break sync		pin_tag() -- get lock
unpin_tag()

Signed-off-by: Junil Lee <junil0814.lee@lge.com>
---
 mm/zsmalloc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index e7414ce..bb459ef 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -1635,6 +1635,7 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class,
 		free_obj = obj_malloc(d_page, class, handle);
 		zs_object_copy(free_obj, used_obj, class);
 		index++;
+		free_obj |= BIT(HANDLE_PIN_BIT);
 		record_obj(handle, free_obj);
 		unpin_tag(handle);
 		obj_free(pool, class, used_obj);
-- 
2.6.2

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2016-01-20 15:21 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-15  0:36 [PATCH] zsmalloc: fix migrate_zspage-zs_free race condition Junil Lee
2016-01-15  0:36 ` Junil Lee
2016-01-15  2:35 ` Minchan Kim
2016-01-15  2:35   ` Minchan Kim
2016-01-15  3:27   ` Sergey Senozhatsky
2016-01-15  3:27     ` Sergey Senozhatsky
2016-01-15  3:30     ` Sergey Senozhatsky
2016-01-15  3:30       ` Sergey Senozhatsky
2016-01-15  4:49     ` Minchan Kim
2016-01-15  4:49       ` Minchan Kim
2016-01-15  5:07       ` Sergey Senozhatsky
2016-01-15  5:07         ` Sergey Senozhatsky
2016-01-19 15:47         ` Russell Knize
2016-01-20  7:00           ` Minchan Kim
2016-01-20  7:00             ` Minchan Kim
2016-01-20 15:21             ` Russell Knize
2016-01-20 15:21               ` Russell Knize
2016-01-15  5:05   ` Minchan Kim
2016-01-15  5:05     ` Minchan Kim

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.