From: Petr Mladek <pmladek-IBi9RG/b67k@public.gmane.org>
To: Jessica Yu <jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Rusty Russell <rusty-8n+1lVoiYb80n/F98K4Iww@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>,
Miroslav Benes <mbenes-AlSwsSmVLrQ@public.gmane.org>,
linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
live-patching-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [RFC PATCH 2/5] module: save load_info for livepatch modules
Date: Wed, 11 Nov 2015 15:31:52 +0100 [thread overview]
Message-ID: <20151111143152.GG4431@pathway.suse.cz> (raw)
In-Reply-To: <1447130755-17383-3-git-send-email-jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
On Mon 2015-11-09 23:45:52, Jessica Yu wrote:
> In livepatch modules, preserve section, symbol, string information from
> the load_info struct in the module loader. This information is used to
> patch modules that are not loaded in memory yet; specifically it is used
> to resolve remaining symbols and write relocations when the target
> module loads.
>
> Signed-off-by: Jessica Yu <jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
> include/linux/module.h | 25 +++++++++++++++++++++++++
> kernel/livepatch/core.c | 17 +++++++++++++++++
> kernel/module.c | 36 ++++++++++++++++++++++--------------
> 3 files changed, 64 insertions(+), 14 deletions(-)
>
> diff --git a/include/linux/module.h b/include/linux/module.h
> index 3a19c79..c8680b1 100644
> --- a/include/linux/module.h
> +++ b/include/linux/module.h
[...]
> @@ -635,6 +651,15 @@ static inline bool module_requested_async_probing(struct module *module)
> return module && module->async_probe_requested;
> }
>
> +#ifdef CONFIG_LIVEPATCH
> +extern void klp_prepare_patch_module(struct module *mod,
> + struct load_info *info);
> +extern int
> +apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab,
> + unsigned int symindex, unsigned int relsec,
> + struct module *me);
> +#endif
This function is already declared in moduleloader.h.
It is implemted only when CONFIG_MODULES_USE_ELF_RELA is defined.
I guess that we want to include moduleloader.h in livepatch.
> +
> #else /* !CONFIG_MODULES... */
>
> /* Given an address, look for it in the exception tables. */
> diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> index 6e53441..087a8c7 100644
> --- a/kernel/livepatch/core.c
> +++ b/kernel/livepatch/core.c
> @@ -1001,6 +1001,23 @@ static struct notifier_block klp_module_nb = {
> .priority = INT_MIN+1, /* called late but before ftrace notifier */
> };
>
> +/*
> + * Save necessary information from info in order to be able to
> + * patch modules that might be loaded later
> + */
> +void klp_prepare_patch_module(struct module *mod, struct load_info *info)
> +{
> + Elf_Shdr *symsect;
> +
> + symsect = info->sechdrs + info->index.sym;
> + /* update sh_addr to point to symtab */
> + symsect->sh_addr = (unsigned long)info->hdr + symsect->sh_offset;
Is livepatch the only user of this value? By other words, is this safe?
> + mod->info = kzalloc(sizeof(*info), GFP_KERNEL);
> + memcpy(mod->info, info, sizeof(*info));
> +
> +}
It is strange that this funtion is defined in livepatch/core.c
but declared in module.h. I would move the definition to
module.c.
> static int __init klp_init(void)
> {
> int ret;
> diff --git a/kernel/module.c b/kernel/module.c
> index 8f051a1..8ae3ca5 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -318,20 +318,6 @@ int unregister_module_notifier(struct notifier_block *nb)
> }
> EXPORT_SYMBOL(unregister_module_notifier);
>
> -struct load_info {
> - Elf_Ehdr *hdr;
> - unsigned long len;
> - Elf_Shdr *sechdrs;
> - char *secstrings, *strtab;
> - unsigned long symoffs, stroffs;
> - struct _ddebug *debug;
> - unsigned int num_debug;
> - bool sig_ok;
> - struct {
> - unsigned int sym, str, mod, vers, info, pcpu;
> - } index;
> -};
> -
> /* We require a truly strong try_module_get(): 0 means failure due to
> ongoing or failed initialization etc. */
> static inline int strong_try_module_get(struct module *mod)
> @@ -2137,6 +2123,11 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
> (long)sym[i].st_value);
> break;
>
> +#ifdef CONFIG_LIVEPATCH
> + case SHN_LIVEPATCH:
> + break;
> +#endif
IMHO, even a kernel compiled without CONFIG_LIVEPATCH should handle livepatch
modules with grace. It means to reject loading.
> case SHN_UNDEF:
> ksym = resolve_symbol_wait(mod, info, name);
> /* Ok if resolved. */
> @@ -2185,6 +2176,11 @@ static int apply_relocations(struct module *mod, const struct load_info *info)
> if (!(info->sechdrs[infosec].sh_flags & SHF_ALLOC))
> continue;
>
> +#ifdef CONFIG_LIVEPATCH
> + if (info->sechdrs[i].sh_flags & SHF_RELA_LIVEPATCH)
> + continue;
> +#endif
> +
> if (info->sechdrs[i].sh_type == SHT_REL)
> err = apply_relocate(info->sechdrs, info->strtab,
> info->index.sym, i, mod);
> @@ -3530,8 +3526,20 @@ static int load_module(struct load_info *info, const char __user *uargs,
> if (err < 0)
> goto bug_cleanup;
>
> +#ifdef CONFIG_LIVEPATCH
> + /*
> + * Save sechdrs, indices, and other data from info
> + * in order to patch to-be-loaded modules.
> + * Do not call free_copy() for livepatch modules.
> + */
> + if (get_modinfo((struct load_info *)info, "livepatch"))
> + klp_prepare_patch_module(mod, info);
> + else
> + free_copy(info);
> +#else
I would move this #else one line above and get rid of the
double free_copy(info); But it is a matter of taste.
> /* Get rid of temporary copy. */
> free_copy(info);
> +#endif
Best Regards,
Petr
WARNING: multiple messages have this Message-ID (diff)
From: Petr Mladek <pmladek@suse.com>
To: Jessica Yu <jeyu@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>,
Josh Poimboeuf <jpoimboe@redhat.com>,
Seth Jennings <sjenning@redhat.com>,
Jiri Kosina <jikos@kernel.org>, Vojtech Pavlik <vojtech@suse.com>,
Miroslav Benes <mbenes@suse.cz>,
linux-api@vger.kernel.org, live-patching@vger.kernel.org,
x86@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 2/5] module: save load_info for livepatch modules
Date: Wed, 11 Nov 2015 15:31:52 +0100 [thread overview]
Message-ID: <20151111143152.GG4431@pathway.suse.cz> (raw)
In-Reply-To: <1447130755-17383-3-git-send-email-jeyu@redhat.com>
On Mon 2015-11-09 23:45:52, Jessica Yu wrote:
> In livepatch modules, preserve section, symbol, string information from
> the load_info struct in the module loader. This information is used to
> patch modules that are not loaded in memory yet; specifically it is used
> to resolve remaining symbols and write relocations when the target
> module loads.
>
> Signed-off-by: Jessica Yu <jeyu@redhat.com>
> ---
> include/linux/module.h | 25 +++++++++++++++++++++++++
> kernel/livepatch/core.c | 17 +++++++++++++++++
> kernel/module.c | 36 ++++++++++++++++++++++--------------
> 3 files changed, 64 insertions(+), 14 deletions(-)
>
> diff --git a/include/linux/module.h b/include/linux/module.h
> index 3a19c79..c8680b1 100644
> --- a/include/linux/module.h
> +++ b/include/linux/module.h
[...]
> @@ -635,6 +651,15 @@ static inline bool module_requested_async_probing(struct module *module)
> return module && module->async_probe_requested;
> }
>
> +#ifdef CONFIG_LIVEPATCH
> +extern void klp_prepare_patch_module(struct module *mod,
> + struct load_info *info);
> +extern int
> +apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab,
> + unsigned int symindex, unsigned int relsec,
> + struct module *me);
> +#endif
This function is already declared in moduleloader.h.
It is implemted only when CONFIG_MODULES_USE_ELF_RELA is defined.
I guess that we want to include moduleloader.h in livepatch.
> +
> #else /* !CONFIG_MODULES... */
>
> /* Given an address, look for it in the exception tables. */
> diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> index 6e53441..087a8c7 100644
> --- a/kernel/livepatch/core.c
> +++ b/kernel/livepatch/core.c
> @@ -1001,6 +1001,23 @@ static struct notifier_block klp_module_nb = {
> .priority = INT_MIN+1, /* called late but before ftrace notifier */
> };
>
> +/*
> + * Save necessary information from info in order to be able to
> + * patch modules that might be loaded later
> + */
> +void klp_prepare_patch_module(struct module *mod, struct load_info *info)
> +{
> + Elf_Shdr *symsect;
> +
> + symsect = info->sechdrs + info->index.sym;
> + /* update sh_addr to point to symtab */
> + symsect->sh_addr = (unsigned long)info->hdr + symsect->sh_offset;
Is livepatch the only user of this value? By other words, is this safe?
> + mod->info = kzalloc(sizeof(*info), GFP_KERNEL);
> + memcpy(mod->info, info, sizeof(*info));
> +
> +}
It is strange that this funtion is defined in livepatch/core.c
but declared in module.h. I would move the definition to
module.c.
> static int __init klp_init(void)
> {
> int ret;
> diff --git a/kernel/module.c b/kernel/module.c
> index 8f051a1..8ae3ca5 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -318,20 +318,6 @@ int unregister_module_notifier(struct notifier_block *nb)
> }
> EXPORT_SYMBOL(unregister_module_notifier);
>
> -struct load_info {
> - Elf_Ehdr *hdr;
> - unsigned long len;
> - Elf_Shdr *sechdrs;
> - char *secstrings, *strtab;
> - unsigned long symoffs, stroffs;
> - struct _ddebug *debug;
> - unsigned int num_debug;
> - bool sig_ok;
> - struct {
> - unsigned int sym, str, mod, vers, info, pcpu;
> - } index;
> -};
> -
> /* We require a truly strong try_module_get(): 0 means failure due to
> ongoing or failed initialization etc. */
> static inline int strong_try_module_get(struct module *mod)
> @@ -2137,6 +2123,11 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
> (long)sym[i].st_value);
> break;
>
> +#ifdef CONFIG_LIVEPATCH
> + case SHN_LIVEPATCH:
> + break;
> +#endif
IMHO, even a kernel compiled without CONFIG_LIVEPATCH should handle livepatch
modules with grace. It means to reject loading.
> case SHN_UNDEF:
> ksym = resolve_symbol_wait(mod, info, name);
> /* Ok if resolved. */
> @@ -2185,6 +2176,11 @@ static int apply_relocations(struct module *mod, const struct load_info *info)
> if (!(info->sechdrs[infosec].sh_flags & SHF_ALLOC))
> continue;
>
> +#ifdef CONFIG_LIVEPATCH
> + if (info->sechdrs[i].sh_flags & SHF_RELA_LIVEPATCH)
> + continue;
> +#endif
> +
> if (info->sechdrs[i].sh_type == SHT_REL)
> err = apply_relocate(info->sechdrs, info->strtab,
> info->index.sym, i, mod);
> @@ -3530,8 +3526,20 @@ static int load_module(struct load_info *info, const char __user *uargs,
> if (err < 0)
> goto bug_cleanup;
>
> +#ifdef CONFIG_LIVEPATCH
> + /*
> + * Save sechdrs, indices, and other data from info
> + * in order to patch to-be-loaded modules.
> + * Do not call free_copy() for livepatch modules.
> + */
> + if (get_modinfo((struct load_info *)info, "livepatch"))
> + klp_prepare_patch_module(mod, info);
> + else
> + free_copy(info);
> +#else
I would move this #else one line above and get rid of the
double free_copy(info); But it is a matter of taste.
> /* Get rid of temporary copy. */
> free_copy(info);
> +#endif
Best Regards,
Petr
next prev parent reply other threads:[~2015-11-11 14:31 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-10 4:45 [RFC PATCH 0/5] Arch-independent livepatch Jessica Yu
2015-11-10 4:45 ` Jessica Yu
2015-11-10 4:45 ` [RFC PATCH 1/5] elf: add livepatch-specific elf constants Jessica Yu
2015-11-11 13:58 ` Petr Mladek
2015-11-12 15:33 ` Josh Poimboeuf
2015-11-12 15:45 ` Josh Poimboeuf
2015-11-13 6:49 ` Jessica Yu
2015-11-10 4:45 ` [RFC PATCH 2/5] module: save load_info for livepatch modules Jessica Yu
2015-11-11 8:08 ` Minfei Huang
2015-11-11 14:17 ` Miroslav Benes
2015-11-12 5:33 ` Jessica Yu
2015-11-12 10:24 ` Petr Mladek
[not found] ` <20151112102404.GL4431-KsEp0d+Q8qECVLCxKZUutA@public.gmane.org>
2015-11-12 13:22 ` Miroslav Benes
2015-11-12 13:22 ` Miroslav Benes
[not found] ` <alpine.LNX.2.00.1511121400290.9440-ztGlSCb7Y1iN3ZZ/Hiejyg@public.gmane.org>
2015-11-12 15:03 ` Petr Mladek
2015-11-12 15:03 ` Petr Mladek
[not found] ` <20151112150345.GT2599-KsEp0d+Q8qECVLCxKZUutA@public.gmane.org>
2015-11-12 17:05 ` Josh Poimboeuf
2015-11-12 17:05 ` Josh Poimboeuf
[not found] ` <20151112170501.GD4038-M1RQNqTfbHcHO9+bouH2LOBSVt8DKT+lrE5yTffgRl4@public.gmane.org>
2015-11-12 22:17 ` Jessica Yu
2015-11-12 22:17 ` Jessica Yu
[not found] ` <20151112221750.GA13513-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-13 12:24 ` Miroslav Benes
2015-11-13 12:24 ` Miroslav Benes
[not found] ` <alpine.LNX.2.00.1511131304280.15073-ztGlSCb7Y1iN3ZZ/Hiejyg@public.gmane.org>
2015-11-13 12:46 ` Miroslav Benes
2015-11-13 12:46 ` Miroslav Benes
[not found] ` <alpine.LNX.2.00.1511131338510.15073-ztGlSCb7Y1iN3ZZ/Hiejyg@public.gmane.org>
2015-11-14 0:36 ` Jessica Yu
2015-11-14 0:36 ` Jessica Yu
[not found] ` <20151114003536.GA14759-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-16 12:12 ` Miroslav Benes
2015-11-16 12:12 ` Miroslav Benes
2015-11-13 12:56 ` Miroslav Benes
2015-11-13 12:56 ` Miroslav Benes
[not found] ` <alpine.LNX.2.00.1511131353300.15073-ztGlSCb7Y1iN3ZZ/Hiejyg@public.gmane.org>
2015-11-14 2:09 ` Jessica Yu
2015-11-14 2:09 ` Jessica Yu
[not found] ` <20151114020950.GA21414-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-16 12:21 ` Miroslav Benes
2015-11-16 12:21 ` Miroslav Benes
2015-11-13 0:25 ` Jessica Yu
[not found] ` <1447130755-17383-3-git-send-email-jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-11-11 14:31 ` Petr Mladek [this message]
2015-11-11 14:31 ` [RFC PATCH 2/5] " Petr Mladek
[not found] ` <20151111143152.GG4431-KsEp0d+Q8qECVLCxKZUutA@public.gmane.org>
2015-11-12 4:44 ` Jessica Yu
2015-11-12 4:44 ` Jessica Yu
[not found] ` <20151112044407.GC30025-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-12 10:05 ` Petr Mladek
2015-11-12 10:05 ` Petr Mladek
[not found] ` <20151112100548.GK4431-KsEp0d+Q8qECVLCxKZUutA@public.gmane.org>
2015-11-12 14:19 ` Miroslav Benes
2015-11-12 14:19 ` Miroslav Benes
[not found] ` <alpine.LNX.2.00.1511121518080.9440-ztGlSCb7Y1iN3ZZ/Hiejyg@public.gmane.org>
2015-11-13 6:35 ` Jessica Yu
2015-11-13 6:35 ` Jessica Yu
2015-11-13 13:07 ` Miroslav Benes
2015-11-13 8:20 ` Jessica Yu
2015-11-13 8:20 ` Jessica Yu
2015-11-12 17:14 ` [RFC PATCH 2/5] " Josh Poimboeuf
2015-11-12 17:14 ` Josh Poimboeuf
2015-11-12 17:21 ` Josh Poimboeuf
2015-11-12 17:21 ` Josh Poimboeuf
2015-11-10 4:45 ` [RFC PATCH 3/5] livepatch: reuse module loader code to write relocations Jessica Yu
2015-11-10 8:13 ` Jiri Slaby
2015-11-11 14:30 ` Miroslav Benes
[not found] ` <alpine.LNX.2.00.1511111519250.12467-ztGlSCb7Y1iN3ZZ/Hiejyg@public.gmane.org>
2015-11-11 20:07 ` Jessica Yu
2015-11-11 20:07 ` Jessica Yu
[not found] ` <20151111200732.GB30025-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-12 15:27 ` Miroslav Benes
2015-11-12 15:27 ` Miroslav Benes
2015-11-12 17:40 ` Josh Poimboeuf
[not found] ` <20151112174032.GG4038-M1RQNqTfbHcHO9+bouH2LOBSVt8DKT+lrE5yTffgRl4@public.gmane.org>
2015-11-12 20:22 ` Jessica Yu
2015-11-12 20:22 ` Jessica Yu
[not found] ` <20151112202243.GC5841-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-12 20:32 ` Josh Poimboeuf
2015-11-12 20:32 ` Josh Poimboeuf
[not found] ` <20151112203221.GM4038-M1RQNqTfbHcHO9+bouH2LOBSVt8DKT+lrE5yTffgRl4@public.gmane.org>
2015-11-13 7:15 ` Jessica Yu
2015-11-13 7:15 ` Jessica Yu
2015-11-13 13:51 ` Miroslav Benes
[not found] ` <alpine.LNX.2.00.1511121601370.9440-ztGlSCb7Y1iN3ZZ/Hiejyg@public.gmane.org>
2015-11-12 19:14 ` Jessica Yu
2015-11-12 19:14 ` Jessica Yu
[not found] ` <20151112191458.GB5841-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-12 20:35 ` Jessica Yu
2015-11-12 20:35 ` Jessica Yu
2015-11-11 15:22 ` [RFC PATCH 3/5] " Petr Mladek
[not found] ` <20151111152256.GP2599-KsEp0d+Q8qECVLCxKZUutA@public.gmane.org>
2015-11-11 18:27 ` Jessica Yu
2015-11-11 18:27 ` Jessica Yu
[not found] ` <20151111182718.GA30025-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-12 9:16 ` Petr Mladek
2015-11-12 9:16 ` Petr Mladek
[not found] ` <1447130755-17383-4-git-send-email-jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-11-12 17:59 ` [RFC PATCH 3/5] " Josh Poimboeuf
2015-11-12 17:59 ` Josh Poimboeuf
2015-11-10 4:45 ` [RFC PATCH 4/5] samples: livepatch: init reloc list and mark as klp module Jessica Yu
[not found] ` <1447130755-17383-5-git-send-email-jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-11-10 8:15 ` Jiri Slaby
2015-11-10 8:15 ` Jiri Slaby
2015-11-10 13:50 ` Josh Poimboeuf
[not found] ` <20151110135006.GB3163-8wJ5/zUtDR0XGNroddHbYwC/G2K4zDHf@public.gmane.org>
2015-11-10 18:37 ` Jessica Yu
2015-11-10 18:37 ` Jessica Yu
2015-11-11 15:42 ` [RFC PATCH 4/5] " Petr Mladek
2015-11-11 15:42 ` Petr Mladek
[not found] ` <20151111154249.GQ2599-KsEp0d+Q8qECVLCxKZUutA@public.gmane.org>
2015-11-12 6:02 ` Jessica Yu
2015-11-12 6:02 ` Jessica Yu
[not found] ` <20151112060249.GA5841-N0bYjD2NfQ6k4hzjq3hgyGTy53QMssKEsp+A89P3RPuQWHG76I6BsA@public.gmane.org>
2015-11-12 10:44 ` Miroslav Benes
2015-11-12 10:44 ` Miroslav Benes
2015-11-10 4:45 ` [RFC PATCH 5/5] livepatch: x86: remove unused relocation code Jessica Yu
2015-11-11 15:48 ` Petr Mladek
2015-11-12 18:01 ` Josh Poimboeuf
2015-11-11 14:00 ` [RFC PATCH 0/5] Arch-independent livepatch Miroslav Benes
2015-11-11 16:28 ` Josh Poimboeuf
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=20151111143152.GG4431@pathway.suse.cz \
--to=pmladek-ibi9rg/b67k@public.gmane.org \
--cc=jeyu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=jikos-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=jpoimboe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=live-patching-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mbenes-AlSwsSmVLrQ@public.gmane.org \
--cc=rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org \
--cc=sjenning-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=vojtech-IBi9RG/b67k@public.gmane.org \
--cc=x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/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: link
Be 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.