]> git.baikalelectronics.ru Git - kernel.git/commit
livepatch: Prevent patch inconsistencies if the coming module notifier fails
authorMinfei Huang <mnfhuang@gmail.com>
Fri, 15 May 2015 02:22:48 +0000 (10:22 +0800)
committerJiri Kosina <jkosina@suse.cz>
Mon, 18 May 2015 09:08:44 +0000 (11:08 +0200)
commit798131974c3fa46caaf5ae36b2e720fdb3757309
tree8fcf5d4dc272250b01926d5d4cb690ee563a60f9
parent194e2dd6b0b86d397c2ddd02fec370933578e0c2
livepatch: Prevent patch inconsistencies if the coming module notifier fails

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: Minfei Huang <mnfhuang@gmail.com>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
kernel/livepatch/core.c