• Daniel Lezcano's avatar
    net: genetlink: Move initialization to core_initcall · c62e7ac3
    Daniel Lezcano authored
    The generic netlink is initialized far after the netlink protocol
    itself at subsys_initcall. The devlink is initialized at the same
    level, but after, as shown by a disassembly of the vmlinux:
    
    [ ... ]
    374 ffff8000115f22c0 <__initcall_devlink_init4>:
    375 ffff8000115f22c4 <__initcall_genl_init4>:
    [ ... ]
    
    The function devlink_init() calls genl_register_family() before the
    generic netlink subsystem is initialized.
    
    As the generic netlink initcall level is set since 2005, it seems that
    was not a problem, but now we have the thermal framework initialized
    at the core_initcall level which creates the generic netlink family
    and sends a notification which leads to a subtle memory corruption
    only detectable when the CONFIG_INIT_ON_ALLOC_DEFAULT_ON option is set
    with the earlycon at init time.
    
    The thermal framework needs to be initialized early in order to begin
    the mitigation as soon as possible. Moving it to postcore_initcall is
    acceptable.
    
    This patch changes the initialization level for the generic netlink
    family to the core_initcall and comes after the netlink protocol
    initialization.
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
    Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Reviewed-by: default avatarAmit Kucheria <amit.kucheria@linaro.org>
    Link: https://lore.kernel.org/r/20200715074120.8768-1-daniel.lezcano@linaro.org
    c62e7ac3
genetlink.c 29.8 KB