Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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: 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
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ Description:
		The object directory contains subdirectories for each function
		that is patched within the object.

What:		/sys/kernel/livepatch/<patch>/<object>/<function>
What:		/sys/kernel/livepatch/<patch>/<object>/<function,sympos>
Date:		Nov 2014
KernelVersion:	3.19.0
Contact:	live-patching@vger.kernel.org
@@ -41,4 +41,8 @@ Description:
		The function directory contains attributes regarding the
		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.
+8 −2
Original line number Diff line number Diff line
@@ -535,7 +535,7 @@ EXPORT_SYMBOL_GPL(klp_enable_patch);
 * /sys/kernel/livepatch/<patch>
 * /sys/kernel/livepatch/<patch>/enabled
 * /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,
@@ -680,8 +680,14 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func)
	INIT_LIST_HEAD(&func->stack_node);
	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,
				    &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 */