• M
    livepatch: Prevent patch inconsistencies if the coming module notifier fails · 36e505c1
    Minfei Huang 提交于
    The previous patches can be applied, once the corresponding module is
    loaded. In general, the patch will do relocation (if necessary) and
    obtain/verify function address before we start to enable patch.
    
    There are three different situations in which the coming module notifier
    can fail:
    
    1) relocations are not applied for some reason. In this case kallsyms
    for module symbol is not called at all. The patch is not applied to the
    module. If the user disable and enable patch again, there is possible
    bug in klp_enable_func. If the user specified func->old_addr for some
    function in the module (and he shouldn't do that, but nevertheless) our
    warning would not catch it, ftrace will reject to register the handler
    because of wrong address or will register the handler for wrong address.
    
    2) relocations are applied successfully, but kallsyms lookup fails. In
    this case func->old_addr can be correct for all previous lookups, 0 for
    current failed one, and "unspecified" for the rest. If we undergo the
    same scenario as in 1, the behaviour differs for three cases, but the
    patch is not enabled anyway.
    
    3) the object is initialized, but klp_enable_object fails in the
    notifier due to possible ftrace error. Since it is improbable that
    ftrace would heal itself in the future, we would get those errors
    everytime the patch is enabled.
    
    In order to fix above situations, we can make obj->mod to NULL, if the
    coming modified notifier fails.
    Signed-off-by: NMinfei Huang <mnfhuang@gmail.com>
    Acked-by: NJosh Poimboeuf <jpoimboe@redhat.com>
    Reviewed-by: NMiroslav Benes <mbenes@suse.cz>
    Signed-off-by: NJiri Kosina <jkosina@suse.cz>
    36e505c1
core.c 21.8 KB