• Kirill Tkhai's avatar
    mm: check shrinker is memcg-aware in register_shrinker_prepared() · 8df4a44c
    Kirill Tkhai authored
    There is a sad BUG introduced in patch adding SHRINKER_REGISTERING.
    shrinker_idr business is only for memcg-aware shrinkers.  Only such type
    of shrinkers have id and they must be finaly installed via idr_replace()
    in this function.  For !memcg-aware shrinkers we never initialize
    shrinker->id field.
    
    But there are all types of shrinkers passed to idr_replace(), and every
    !memcg-aware shrinker with random ID (most probably, its id is 0)
    replaces memcg-aware shrinker pointed by the ID in IDR.
    
    This patch fixes the problem.
    
    Link: http://lkml.kernel.org/r/8ff8a793-8211-713a-4ed9-d6e52390c2fc@virtuozzo.com
    Fixes: 7e010df5 "mm: use special value SHRINKER_REGISTERING instead of list_empty() check"
    Signed-off-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
    Reported-by: <syzbot+d5f648a1bfe15678786b@syzkaller.appspotmail.com>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Josef Bacik <jbacik@fb.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: <syzkaller-bugs@googlegroups.com>
    Cc: Huang Ying <ying.huang@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8df4a44c
vmscan.c 120 KB