aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris J Arges <chris.j.arges@canonical.com>2015-12-01 21:40:56 -0500
committerJiri Kosina <jkosina@suse.cz>2015-12-03 17:01:27 -0500
commit444f9e99a840c4050c0530cfef81801a21a59f4c (patch)
tree72d000288180fa3d6312965110a26ea3b06fa09e
parent064c89df6247cd829a7880cc8a87b7ed2cdfccd8 (diff)
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/493 Signed-off-by: Chris J Arges <chris.j.arges@canonical.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--Documentation/ABI/testing/sysfs-kernel-livepatch6
-rw-r--r--kernel/livepatch/core.c10
2 files changed, 13 insertions, 3 deletions
diff --git a/Documentation/ABI/testing/sysfs-kernel-livepatch b/Documentation/ABI/testing/sysfs-kernel-livepatch
index 5bf42a840b22..da87f43aec58 100644
--- a/Documentation/ABI/testing/sysfs-kernel-livepatch
+++ b/Documentation/ABI/testing/sysfs-kernel-livepatch
@@ -33,7 +33,7 @@ Description:
33 The object directory contains subdirectories for each function 33 The object directory contains subdirectories for each function
34 that is patched within the object. 34 that is patched within the object.
35 35
36What: /sys/kernel/livepatch/<patch>/<object>/<function> 36What: /sys/kernel/livepatch/<patch>/<object>/<function,sympos>
37Date: Nov 2014 37Date: Nov 2014
38KernelVersion: 3.19.0 38KernelVersion: 3.19.0
39Contact: live-patching@vger.kernel.org 39Contact: live-patching@vger.kernel.org
@@ -41,4 +41,8 @@ Description:
41 The function directory contains attributes regarding the 41 The function directory contains attributes regarding the
42 properties and state of the patched function. 42 properties and state of the patched function.
43 43
44 The directory name contains the patched function name and a
45 sympos number corresponding to the nth occurrence of the symbol
46 name in kallsyms for the patched object.
47
44 There are currently no such attributes. 48 There are currently no such attributes.
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index e842534d3493..94893e844e44 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -535,7 +535,7 @@ EXPORT_SYMBOL_GPL(klp_enable_patch);
535 * /sys/kernel/livepatch/<patch> 535 * /sys/kernel/livepatch/<patch>
536 * /sys/kernel/livepatch/<patch>/enabled 536 * /sys/kernel/livepatch/<patch>/enabled
537 * /sys/kernel/livepatch/<patch>/<object> 537 * /sys/kernel/livepatch/<patch>/<object>
538 * /sys/kernel/livepatch/<patch>/<object>/<func> 538 * /sys/kernel/livepatch/<patch>/<object>/<function,sympos>
539 */ 539 */
540 540
541static ssize_t enabled_store(struct kobject *kobj, struct kobj_attribute *attr, 541static 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 INIT_LIST_HEAD(&func->stack_node); 680 INIT_LIST_HEAD(&func->stack_node);
681 func->state = KLP_DISABLED; 681 func->state = KLP_DISABLED;
682 682
683 /* The format for the sysfs directory is <function,sympos> where sympos
684 * is the nth occurrence of this symbol in kallsyms for the patched
685 * object. If the user selects 0 for old_sympos, then 1 will be used
686 * since a unique symbol will be the first occurrence.
687 */
683 return kobject_init_and_add(&func->kobj, &klp_ktype_func, 688 return kobject_init_and_add(&func->kobj, &klp_ktype_func,
684 &obj->kobj, "%s", func->old_name); 689 &obj->kobj, "%s,%lu", func->old_name,
690 func->old_sympos ? func->old_sympos : 1);
685} 691}
686 692
687/* parts of the initialization that is done only when the object is loaded */ 693/* parts of the initialization that is done only when the object is loaded */