Hello, Shrinker API does not handle nicely unregister_shrinker() on a not-registered ->shrinker. Looking at shrinker users, they all have to (a) carry on some sort of a flag to make sure that "unregister_shrinker()" will not blow up later (b) be fishy (potentially can Oops) (c) access private members `struct shrinker' (e.g. `shrink.list.next')
Change unregister_shrinker() to consider all-zeroes shrinker as 'initialized, but not registered' shrinker, so we can avoid NULL dereference when unregister_shrinker() accidentally receives such a struct. Introduce init_shrinker() function to init `critical' shrinkers members when the entire shrinker cannot be, for some reason, zeroed out. This also helps to avoid Oops in unregister_shrinker() in some cases (when unregister_shrinker() receives not initialized and not registered shrinker). Sergey Senozhatsky (2): mm/shrinker: do not NULL dereference uninitialized shrinker mm/shrinker: add init_shrinker() function include/linux/shrinker.h | 1 + mm/vmscan.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) -- 2.4.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

