From: Chris J Arges <chris.j.arges@canonical.com> To: live-patching@vger.kernel.org Cc: jeyu@redhat.com, Chris J Arges <chris.j.arges@canonical.com>, Josh Poimboeuf <jpoimboe@redhat.com>, Seth Jennings <sjenning@redhat.com>, Jiri Kosina <jikos@kernel.org>, Vojtech Pavlik <vojtech@suse.com>, linux-api@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3] livepatch: old_name,number scheme in livepatch sysfs directory Date: Mon, 9 Nov 2015 10:16:05 -0600 [thread overview] Message-ID: <1447085770-11729-1-git-send-email-chris.j.arges@canonical.com> (raw) In-Reply-To: <20151105155656.GD28254@treble.redhat.com> In cases of duplicate symbols in vmlinux, old_sympos will be used to disambiguate instead of old_addr. Normally old_sympos will be 0, and default to only returning the first found instance of that symbol. If an incorrect symbol position is specified then livepatching will fail. Finally, old_addr is now an internal structure element and not to be specified by the user. The following directory structure will allow for cases when the same function name exists in a single object. /sys/kernel/livepatch/<patch>/<object>/<function.number> The 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> --- Documentation/ABI/testing/sysfs-kernel-livepatch | 6 ++- include/linux/livepatch.h | 20 ++++--- kernel/livepatch/core.c | 66 ++++++++++++++++-------- 3 files changed, 61 insertions(+), 31 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-kernel-livepatch b/Documentation/ABI/testing/sysfs-kernel-livepatch index 5bf42a8..21b6bc1 100644 --- a/Documentation/ABI/testing/sysfs-kernel-livepatch +++ b/Documentation/ABI/testing/sysfs-kernel-livepatch @@ -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,number> 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 + number corresponding to the nth occurrence of the symbol name + in kallsyms for the patched object. + There are currently no such attributes. diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h index 31db7a0..986e06d 100644 --- a/include/linux/livepatch.h +++ b/include/linux/livepatch.h @@ -37,8 +37,9 @@ enum klp_state { * struct klp_func - function structure for live patching * @old_name: name of the function to be patched * @new_func: pointer to the patched function code - * @old_addr: a hint conveying at what address the old function + * @old_sympos: a hint indicating which symbol position the old function * can be found (optional, vmlinux patches only) + * @old_addr: the address of the function being patched * @kobj: kobject for sysfs resources * @state: tracks function-level patch application state * @stack_node: list node for klp_ops func_stack list @@ -47,17 +48,20 @@ struct klp_func { /* external */ const char *old_name; void *new_func; + /* - * The old_addr field is optional and can be used to resolve - * duplicate symbol names in the vmlinux object. If this - * information is not present, the symbol is located by name - * with kallsyms. If the name is not unique and old_addr is - * not provided, the patch application fails as there is no - * way to resolve the ambiguity. + * The old_sympos field is optional and can be used to resolve duplicate + * symbol names in the vmlinux object. If this information is not + * present, the first symbol located with kallsyms is used. This value + * corresponds to the nth occurrence of the symbol name in kallsyms for + * the patched object. If the name is not unique and old_sympos is not + * provided, the patch application fails as there is no way to resolve + * the ambiguity. */ - unsigned long old_addr; + unsigned long old_sympos; /* internal */ + unsigned long old_addr; struct kobject kobj; enum klp_state state; struct list_head stack_node; diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 6e53441..1dd0d44 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -142,6 +142,7 @@ struct klp_find_arg { * name in the same object. */ unsigned long count; + unsigned long pos; }; static int klp_find_callback(void *data, const char *name, @@ -166,28 +167,39 @@ static int klp_find_callback(void *data, const char *name, args->addr = addr; args->count++; + /* + * ensure count matches the symbol position + */ + if (args->pos == (args->count-1)) + return 1; + return 0; } static int klp_find_object_symbol(const char *objname, const char *name, - unsigned long *addr) + unsigned long *addr, unsigned long sympos) { struct klp_find_arg args = { .objname = objname, .name = name, .addr = 0, - .count = 0 + .count = 0, + .pos = sympos, }; mutex_lock(&module_mutex); kallsyms_on_each_symbol(klp_find_callback, &args); mutex_unlock(&module_mutex); - if (args.count == 0) + /* + * Ensure an address was found, then check that the symbol position + * count matches sympos. + */ + if (args.addr == 0) pr_err("symbol '%s' not found in symbol table\n", name); - else if (args.count > 1) - pr_err("unresolvable ambiguity (%lu matches) on symbol '%s' in object '%s'\n", - args.count, name, objname); + else if (sympos != (args.count - 1)) + pr_err("symbol position %lu for symbol '%s' in object '%s' not found\n", + sympos, name, objname ? objname : "vmlinux"); else { *addr = args.addr; return 0; @@ -239,20 +251,19 @@ static int klp_verify_vmlinux_symbol(const char *name, unsigned long addr) static int klp_find_verify_func_addr(struct klp_object *obj, struct klp_func *func) { + int sympos = 0; int ret; -#if defined(CONFIG_RANDOMIZE_BASE) - /* If KASLR has been enabled, adjust old_addr accordingly */ - if (kaslr_enabled() && func->old_addr) - func->old_addr += kaslr_offset(); -#endif + if (func->old_sympos && !klp_is_module(obj)) + sympos = func->old_sympos; - if (!func->old_addr || klp_is_module(obj)) - ret = klp_find_object_symbol(obj->name, func->old_name, - &func->old_addr); - else - ret = klp_verify_vmlinux_symbol(func->old_name, - func->old_addr); + /* + * Verify the symbol, find old_addr, and write it to the structure. + * By default sympos will be 0 and thus will only look for the first + * occurrence. If another value is specified then that will be used. + */ + ret = klp_find_object_symbol(obj->name, func->old_name, + &func->old_addr, sympos); return ret; } @@ -277,7 +288,7 @@ static int klp_find_external_symbol(struct module *pmod, const char *name, preempt_enable(); /* otherwise check if it's in another .o within the patch module */ - return klp_find_object_symbol(pmod->name, name, addr); + return klp_find_object_symbol(pmod->name, name, addr, 0); } static int klp_write_object_relocations(struct module *pmod, @@ -307,7 +318,7 @@ static int klp_write_object_relocations(struct module *pmod, else ret = klp_find_object_symbol(obj->mod->name, reloc->name, - &reloc->val); + &reloc->val, 0); if (ret) return ret; } @@ -587,7 +598,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>/<func,number> */ static ssize_t enabled_store(struct kobject *kobj, struct kobj_attribute *attr, @@ -732,8 +743,7 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func) INIT_LIST_HEAD(&func->stack_node); func->state = KLP_DISABLED; - return kobject_init_and_add(&func->kobj, &klp_ktype_func, - &obj->kobj, "%s", func->old_name); + return 0; } /* parts of the initialization that is done only when the object is loaded */ @@ -755,6 +765,18 @@ static int klp_init_object_loaded(struct klp_patch *patch, return ret; } + /* + * for each function initialize and add, old_sympos will be already + * verified at this point + */ + klp_for_each_func(obj, func) { + ret = kobject_init_and_add(&func->kobj, &klp_ktype_func, + &obj->kobj, "%s,%lu", func->old_name, + func->old_sympos ? func->old_sympos : 0); + if (ret) + return ret; + } + return 0; } -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: Chris J Arges <chris.j.arges-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org> To: live-patching-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, Chris J Arges <chris.j.arges-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>, Josh Poimboeuf <jpoimboe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Seth Jennings <sjenning-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Jiri Kosina <jikos-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, Vojtech Pavlik <vojtech-IBi9RG/b67k@public.gmane.org>, linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: [PATCH v3] livepatch: old_name,number scheme in livepatch sysfs directory Date: Mon, 9 Nov 2015 10:16:05 -0600 [thread overview] Message-ID: <1447085770-11729-1-git-send-email-chris.j.arges@canonical.com> (raw) In-Reply-To: <20151105155656.GD28254-8wJ5/zUtDR0XGNroddHbYwC/G2K4zDHf@public.gmane.org> In cases of duplicate symbols in vmlinux, old_sympos will be used to disambiguate instead of old_addr. Normally old_sympos will be 0, and default to only returning the first found instance of that symbol. If an incorrect symbol position is specified then livepatching will fail. Finally, old_addr is now an internal structure element and not to be specified by the user. The following directory structure will allow for cases when the same function name exists in a single object. /sys/kernel/livepatch/<patch>/<object>/<function.number> The 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-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org> --- Documentation/ABI/testing/sysfs-kernel-livepatch | 6 ++- include/linux/livepatch.h | 20 ++++--- kernel/livepatch/core.c | 66 ++++++++++++++++-------- 3 files changed, 61 insertions(+), 31 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-kernel-livepatch b/Documentation/ABI/testing/sysfs-kernel-livepatch index 5bf42a8..21b6bc1 100644 --- a/Documentation/ABI/testing/sysfs-kernel-livepatch +++ b/Documentation/ABI/testing/sysfs-kernel-livepatch @@ -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,number> Date: Nov 2014 KernelVersion: 3.19.0 Contact: live-patching-u79uwXL29TY76Z2rM5mHXA@public.gmane.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 + number corresponding to the nth occurrence of the symbol name + in kallsyms for the patched object. + There are currently no such attributes. diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h index 31db7a0..986e06d 100644 --- a/include/linux/livepatch.h +++ b/include/linux/livepatch.h @@ -37,8 +37,9 @@ enum klp_state { * struct klp_func - function structure for live patching * @old_name: name of the function to be patched * @new_func: pointer to the patched function code - * @old_addr: a hint conveying at what address the old function + * @old_sympos: a hint indicating which symbol position the old function * can be found (optional, vmlinux patches only) + * @old_addr: the address of the function being patched * @kobj: kobject for sysfs resources * @state: tracks function-level patch application state * @stack_node: list node for klp_ops func_stack list @@ -47,17 +48,20 @@ struct klp_func { /* external */ const char *old_name; void *new_func; + /* - * The old_addr field is optional and can be used to resolve - * duplicate symbol names in the vmlinux object. If this - * information is not present, the symbol is located by name - * with kallsyms. If the name is not unique and old_addr is - * not provided, the patch application fails as there is no - * way to resolve the ambiguity. + * The old_sympos field is optional and can be used to resolve duplicate + * symbol names in the vmlinux object. If this information is not + * present, the first symbol located with kallsyms is used. This value + * corresponds to the nth occurrence of the symbol name in kallsyms for + * the patched object. If the name is not unique and old_sympos is not + * provided, the patch application fails as there is no way to resolve + * the ambiguity. */ - unsigned long old_addr; + unsigned long old_sympos; /* internal */ + unsigned long old_addr; struct kobject kobj; enum klp_state state; struct list_head stack_node; diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 6e53441..1dd0d44 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -142,6 +142,7 @@ struct klp_find_arg { * name in the same object. */ unsigned long count; + unsigned long pos; }; static int klp_find_callback(void *data, const char *name, @@ -166,28 +167,39 @@ static int klp_find_callback(void *data, const char *name, args->addr = addr; args->count++; + /* + * ensure count matches the symbol position + */ + if (args->pos == (args->count-1)) + return 1; + return 0; } static int klp_find_object_symbol(const char *objname, const char *name, - unsigned long *addr) + unsigned long *addr, unsigned long sympos) { struct klp_find_arg args = { .objname = objname, .name = name, .addr = 0, - .count = 0 + .count = 0, + .pos = sympos, }; mutex_lock(&module_mutex); kallsyms_on_each_symbol(klp_find_callback, &args); mutex_unlock(&module_mutex); - if (args.count == 0) + /* + * Ensure an address was found, then check that the symbol position + * count matches sympos. + */ + if (args.addr == 0) pr_err("symbol '%s' not found in symbol table\n", name); - else if (args.count > 1) - pr_err("unresolvable ambiguity (%lu matches) on symbol '%s' in object '%s'\n", - args.count, name, objname); + else if (sympos != (args.count - 1)) + pr_err("symbol position %lu for symbol '%s' in object '%s' not found\n", + sympos, name, objname ? objname : "vmlinux"); else { *addr = args.addr; return 0; @@ -239,20 +251,19 @@ static int klp_verify_vmlinux_symbol(const char *name, unsigned long addr) static int klp_find_verify_func_addr(struct klp_object *obj, struct klp_func *func) { + int sympos = 0; int ret; -#if defined(CONFIG_RANDOMIZE_BASE) - /* If KASLR has been enabled, adjust old_addr accordingly */ - if (kaslr_enabled() && func->old_addr) - func->old_addr += kaslr_offset(); -#endif + if (func->old_sympos && !klp_is_module(obj)) + sympos = func->old_sympos; - if (!func->old_addr || klp_is_module(obj)) - ret = klp_find_object_symbol(obj->name, func->old_name, - &func->old_addr); - else - ret = klp_verify_vmlinux_symbol(func->old_name, - func->old_addr); + /* + * Verify the symbol, find old_addr, and write it to the structure. + * By default sympos will be 0 and thus will only look for the first + * occurrence. If another value is specified then that will be used. + */ + ret = klp_find_object_symbol(obj->name, func->old_name, + &func->old_addr, sympos); return ret; } @@ -277,7 +288,7 @@ static int klp_find_external_symbol(struct module *pmod, const char *name, preempt_enable(); /* otherwise check if it's in another .o within the patch module */ - return klp_find_object_symbol(pmod->name, name, addr); + return klp_find_object_symbol(pmod->name, name, addr, 0); } static int klp_write_object_relocations(struct module *pmod, @@ -307,7 +318,7 @@ static int klp_write_object_relocations(struct module *pmod, else ret = klp_find_object_symbol(obj->mod->name, reloc->name, - &reloc->val); + &reloc->val, 0); if (ret) return ret; } @@ -587,7 +598,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>/<func,number> */ static ssize_t enabled_store(struct kobject *kobj, struct kobj_attribute *attr, @@ -732,8 +743,7 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func) INIT_LIST_HEAD(&func->stack_node); func->state = KLP_DISABLED; - return kobject_init_and_add(&func->kobj, &klp_ktype_func, - &obj->kobj, "%s", func->old_name); + return 0; } /* parts of the initialization that is done only when the object is loaded */ @@ -755,6 +765,18 @@ static int klp_init_object_loaded(struct klp_patch *patch, return ret; } + /* + * for each function initialize and add, old_sympos will be already + * verified at this point + */ + klp_for_each_func(obj, func) { + ret = kobject_init_and_add(&func->kobj, &klp_ktype_func, + &obj->kobj, "%s,%lu", func->old_name, + func->old_sympos ? func->old_sympos : 0); + if (ret) + return ret; + } + return 0; } -- 1.9.1
next prev parent reply other threads:[~2015-11-09 16:16 UTC|newest] Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-11-02 17:58 [PATCH] livepatch: old_name.number scheme in livepatch sysfs directory Chris J Arges 2015-11-02 17:58 ` Chris J Arges 2015-11-02 19:15 ` Jessica Yu 2015-11-02 19:52 ` [PATCH] " Josh Poimboeuf 2015-11-02 19:52 ` Josh Poimboeuf 2015-11-02 20:16 ` Chris J Arges 2015-11-02 20:32 ` Josh Poimboeuf 2015-11-02 22:59 ` [PATCH v2] " Chris J Arges 2015-11-02 22:59 ` Chris J Arges 2015-11-03 9:50 ` Miroslav Benes 2015-11-03 15:03 ` Josh Poimboeuf 2015-11-03 10:52 ` Miroslav Benes 2015-11-03 10:52 ` Miroslav Benes 2015-11-03 12:44 ` Petr Mladek 2015-11-03 12:44 ` Petr Mladek 2015-11-03 15:03 ` Josh Poimboeuf 2015-11-03 15:03 ` Josh Poimboeuf 2015-11-03 19:57 ` Jiri Kosina 2015-11-03 19:57 ` Jiri Kosina 2015-11-03 20:06 ` Josh Poimboeuf 2015-11-03 20:06 ` Josh Poimboeuf [not found] ` <1447259366-7055-1-git-send-email-chris.j.arges@canonical.com> 2015-11-11 16:28 ` [PATCH 1/3 v4] livepatch: add old_sympos as disambiguator field to klp_func Chris J Arges 2015-11-11 17:43 ` Josh Poimboeuf 2015-11-12 10:22 ` Miroslav Benes 2015-11-11 16:29 ` [PATCH 2/3 v4] livepatch: add old_sympos as disambiguator field to klp_reloc Chris J Arges 2015-11-11 16:39 ` Chris J Arges 2015-11-11 17:57 ` Josh Poimboeuf 2015-11-12 14:31 ` Petr Mladek 2015-11-12 19:19 ` Josh Poimboeuf 2015-11-13 13:54 ` Petr Mladek 2015-11-13 16:59 ` Josh Poimboeuf 2015-11-16 12:11 ` Petr Mladek 2015-11-12 10:23 ` Miroslav Benes 2015-11-11 16:29 ` [PATCH 3/3 v4] livepatch: old_name,number scheme in livepatch sysfs directory Chris J Arges 2015-11-11 18:01 ` Josh Poimboeuf 2015-11-11 18:01 ` Josh Poimboeuf [not found] ` <1447347595-30728-1-git-send-email-chris.j.arges@canonical.com> 2015-11-12 16:59 ` [PATCH 1/4 v5] livepatch: add old_sympos as disambiguator field to klp_func Chris J Arges 2015-11-12 19:45 ` Josh Poimboeuf 2015-11-13 9:56 ` Jiri Kosina 2015-11-13 10:14 ` Miroslav Benes 2015-11-13 16:27 ` Petr Mladek 2015-11-12 16:59 ` [PATCH 2/4 v5] livepatch: Simplify code for relocated external symbols Chris J Arges 2015-11-13 10:24 ` Miroslav Benes 2015-11-13 13:55 ` Petr Mladek 2015-11-12 16:59 ` [PATCH 3/4 v5] livepatch: add sympos as disambiguator field to klp_reloc Chris J Arges 2015-11-12 19:50 ` Josh Poimboeuf 2015-11-13 16:42 ` Petr Mladek 2015-11-12 16:59 ` [PATCH 4/4 v5] livepatch: function,sympos scheme in livepatch sysfs directory Chris J Arges [not found] ` <1447431804-18786-1-git-send-email-chris.j.arges@canonical.com> 2015-11-13 16:23 ` [PATCH 1/3 v6] livepatch: add old_sympos as disambiguator field to klp_func Chris J Arges 2015-11-13 16:23 ` [PATCH 2/3 v6] livepatch: add sympos as disambiguator field to klp_reloc Chris J Arges 2015-11-13 16:23 ` [PATCH 3/3 v6] livepatch: function,sympos scheme in livepatch sysfs directory Chris J Arges [not found] ` <1447693391-10065-1-git-send-email-chris.j.arges@canonical.com> 2015-11-16 17:03 ` [PATCH 1/3 v7] livepatch: add old_sympos as disambiguator field to klp_func Chris J Arges 2015-11-16 21:59 ` Jiri Kosina 2015-11-17 14:29 ` Chris J Arges 2015-11-19 10:02 ` Jiri Kosina 2015-11-16 17:03 ` [PATCH 2/3 v7] livepatch: add sympos as disambiguator field to klp_reloc Chris J Arges 2015-11-18 9:56 ` Miroslav Benes 2015-11-18 14:01 ` Josh Poimboeuf 2015-11-18 16:47 ` Petr Mladek 2015-11-18 16:37 ` Petr Mladek 2015-11-18 16:39 ` Chris J Arges 2015-11-18 16:55 ` Petr Mladek 2015-11-18 20:34 ` Jiri Kosina 2015-11-16 17:03 ` [PATCH 3/3 v7] livepatch: function,sympos scheme in livepatch sysfs directory Chris J Arges 2015-11-20 17:25 ` [PATCH 0/3 v8] livepatch: disambiguate symbols with the same name Chris J Arges 2015-11-20 17:25 ` [PATCH 1/3 v8] livepatch: add old_sympos as disambiguator field to klp_func Chris J Arges 2015-11-23 9:47 ` Miroslav Benes 2015-11-20 17:25 ` [PATCH 2/3 v8] livepatch: add sympos as disambiguator field to klp_reloc Chris J Arges 2015-11-23 9:52 ` Miroslav Benes 2015-11-30 20:46 ` Chris J Arges 2015-12-01 1:17 ` Josh Poimboeuf 2015-11-20 17:25 ` [PATCH 3/3 v8] livepatch: function,sympos scheme in livepatch sysfs directory Chris J Arges 2015-11-23 9:47 ` Miroslav Benes 2015-12-02 2:40 ` [PATCH 0/3 v9] livepatch: disambiguate symbols with the same name Chris J Arges 2015-12-02 2:40 ` [PATCH 1/3 v9] livepatch: add old_sympos as disambiguator field to klp_func Chris J Arges 2015-12-02 2:40 ` [PATCH 2/3 v9] livepatch: add sympos as disambiguator field to klp_reloc Chris J Arges 2015-12-14 12:45 ` Miroslav Benes 2015-12-02 2:40 ` [PATCH 3/3 v9] livepatch: function,sympos scheme in livepatch sysfs directory Chris J Arges 2015-12-02 15:28 ` [PATCH 0/3 v9] livepatch: disambiguate symbols with the same name Petr Mladek 2015-12-03 17:59 ` Josh Poimboeuf 2015-12-03 22:04 ` Jiri Kosina 2015-11-03 14:58 ` [PATCH v2] livepatch: old_name.number scheme in livepatch sysfs directory Josh Poimboeuf 2015-11-03 16:09 ` Miroslav Benes 2015-11-03 16:50 ` Josh Poimboeuf 2015-11-03 20:42 ` Chris J Arges 2015-11-03 20:42 ` Chris J Arges 2015-11-04 9:52 ` Miroslav Benes 2015-11-04 9:52 ` Miroslav Benes 2015-11-04 16:03 ` Josh Poimboeuf 2015-11-04 16:17 ` Chris J Arges 2015-11-04 16:17 ` Chris J Arges 2015-11-05 15:18 ` Miroslav Benes 2015-11-05 15:56 ` Josh Poimboeuf 2015-11-05 16:07 ` Chris J Arges 2015-11-09 16:16 ` Chris J Arges [this message] 2015-11-09 16:16 ` [PATCH v3] livepatch: old_name,number " Chris J Arges 2015-11-09 20:56 ` Josh Poimboeuf 2015-11-09 23:01 ` Chris J Arges 2015-11-09 23:01 ` Chris J Arges 2015-11-10 4:54 ` Josh Poimboeuf 2015-11-10 8:49 ` Miroslav Benes 2015-11-10 13:40 ` Josh Poimboeuf 2015-11-10 13:40 ` Josh Poimboeuf 2015-11-10 9:02 ` Miroslav Benes
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1447085770-11729-1-git-send-email-chris.j.arges@canonical.com \ --to=chris.j.arges@canonical.com \ --cc=jeyu@redhat.com \ --cc=jikos@kernel.org \ --cc=jpoimboe@redhat.com \ --cc=linux-api@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=live-patching@vger.kernel.org \ --cc=sjenning@redhat.com \ --cc=vojtech@suse.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.