Commit 444f9e99 authored by Chris J Arges's avatar Chris J Arges Committed by Jiri Kosina

livepatch: function,sympos scheme in livepatch sysfs directory

The following directory structure will allow for cases when the same
function name exists in a single object.
	/sys/kernel/livepatch/<patch>/<object>/<function,sympos>

The sympos number corresponds to the nth occurrence of the symbol name in
kallsyms for the patched object.

An example of patching multiple symbols can be found here:
	https://github.com/dynup/kpatch/issues/493Signed-off-by: default avatarChris J Arges <chris.j.arges@canonical.com>
Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
Acked-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 064c89df
...@@ -33,7 +33,7 @@ Description: ...@@ -33,7 +33,7 @@ Description:
The object directory contains subdirectories for each function The object directory contains subdirectories for each function
that is patched within the object. that is patched within the object.
What: /sys/kernel/livepatch/<patch>/<object>/<function> What: /sys/kernel/livepatch/<patch>/<object>/<function,sympos>
Date: Nov 2014 Date: Nov 2014
KernelVersion: 3.19.0 KernelVersion: 3.19.0
Contact: live-patching@vger.kernel.org Contact: live-patching@vger.kernel.org
...@@ -41,4 +41,8 @@ Description: ...@@ -41,4 +41,8 @@ Description:
The function directory contains attributes regarding the The function directory contains attributes regarding the
properties and state of the patched function. properties and state of the patched function.
The directory name contains the patched function name and a
sympos number corresponding to the nth occurrence of the symbol
name in kallsyms for the patched object.
There are currently no such attributes. There are currently no such attributes.
...@@ -535,7 +535,7 @@ EXPORT_SYMBOL_GPL(klp_enable_patch); ...@@ -535,7 +535,7 @@ EXPORT_SYMBOL_GPL(klp_enable_patch);
* /sys/kernel/livepatch/<patch> * /sys/kernel/livepatch/<patch>
* /sys/kernel/livepatch/<patch>/enabled * /sys/kernel/livepatch/<patch>/enabled
* /sys/kernel/livepatch/<patch>/<object> * /sys/kernel/livepatch/<patch>/<object>
* /sys/kernel/livepatch/<patch>/<object>/<func> * /sys/kernel/livepatch/<patch>/<object>/<function,sympos>
*/ */
static ssize_t enabled_store(struct kobject *kobj, struct kobj_attribute *attr, static ssize_t enabled_store(struct kobject *kobj, struct kobj_attribute *attr,
...@@ -680,8 +680,14 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func) ...@@ -680,8 +680,14 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func)
INIT_LIST_HEAD(&func->stack_node); INIT_LIST_HEAD(&func->stack_node);
func->state = KLP_DISABLED; func->state = KLP_DISABLED;
/* The format for the sysfs directory is <function,sympos> where sympos
* is the nth occurrence of this symbol in kallsyms for the patched
* object. If the user selects 0 for old_sympos, then 1 will be used
* since a unique symbol will be the first occurrence.
*/
return kobject_init_and_add(&func->kobj, &klp_ktype_func, return kobject_init_and_add(&func->kobj, &klp_ktype_func,
&obj->kobj, "%s", func->old_name); &obj->kobj, "%s,%lu", func->old_name,
func->old_sympos ? func->old_sympos : 1);
} }
/* parts of the initialization that is done only when the object is loaded */ /* parts of the initialization that is done only when the object is loaded */
......
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