livepatch: store function sizes
For the consistency model we'll need to know the sizes of the old and new functions to determine if they're on the stacks of any tasks. Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Acked-by: Miroslav Benes <mbenes@suse.cz> Reviewed-by: Petr Mladek <pmladek@suse.com> Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
68ae4b2b68
commit
f5e547f4ac
2 changed files with 19 additions and 0 deletions
|
@ -37,6 +37,8 @@
|
||||||
* @old_addr: the address of the function being patched
|
* @old_addr: the address of the function being patched
|
||||||
* @kobj: kobject for sysfs resources
|
* @kobj: kobject for sysfs resources
|
||||||
* @stack_node: list node for klp_ops func_stack list
|
* @stack_node: list node for klp_ops func_stack list
|
||||||
|
* @old_size: size of the old function
|
||||||
|
* @new_size: size of the new function
|
||||||
* @patched: the func has been added to the klp_ops list
|
* @patched: the func has been added to the klp_ops list
|
||||||
*/
|
*/
|
||||||
struct klp_func {
|
struct klp_func {
|
||||||
|
@ -56,6 +58,7 @@ struct klp_func {
|
||||||
unsigned long old_addr;
|
unsigned long old_addr;
|
||||||
struct kobject kobj;
|
struct kobject kobj;
|
||||||
struct list_head stack_node;
|
struct list_head stack_node;
|
||||||
|
unsigned long old_size, new_size;
|
||||||
bool patched;
|
bool patched;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -584,6 +584,22 @@ static int klp_init_object_loaded(struct klp_patch *patch,
|
||||||
&func->old_addr);
|
&func->old_addr);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = kallsyms_lookup_size_offset(func->old_addr,
|
||||||
|
&func->old_size, NULL);
|
||||||
|
if (!ret) {
|
||||||
|
pr_err("kallsyms size lookup failed for '%s'\n",
|
||||||
|
func->old_name);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = kallsyms_lookup_size_offset((unsigned long)func->new_func,
|
||||||
|
&func->new_size, NULL);
|
||||||
|
if (!ret) {
|
||||||
|
pr_err("kallsyms size lookup failed for '%s' replacement\n",
|
||||||
|
func->old_name);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue