Commit c4ce0da8 authored by Petr Mladek's avatar Petr Mladek Committed by Jiri Kosina

livepatch: RCU protect struct klp_func all the time when used in klp_ftrace_handler()

func->new_func has been accessed after rcu_read_unlock() in klp_ftrace_handler()
and therefore the access was not protected.
Signed-off-by: default avatarPetr Mladek <pmladek@suse.cz>
Acked-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent e0b561ee
...@@ -314,12 +314,12 @@ static void notrace klp_ftrace_handler(unsigned long ip, ...@@ -314,12 +314,12 @@ static void notrace klp_ftrace_handler(unsigned long ip,
rcu_read_lock(); rcu_read_lock();
func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, func = list_first_or_null_rcu(&ops->func_stack, struct klp_func,
stack_node); stack_node);
rcu_read_unlock();
if (WARN_ON_ONCE(!func)) if (WARN_ON_ONCE(!func))
return; goto unlock;
klp_arch_set_pc(regs, (unsigned long)func->new_func); klp_arch_set_pc(regs, (unsigned long)func->new_func);
unlock:
rcu_read_unlock();
} }
static int klp_disable_func(struct klp_func *func) static int klp_disable_func(struct klp_func *func)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment