From: Josh Poimboeuf <jpoimboe@redhat.com>
To: Jiri Kosina <jikos@kernel.org>
Cc: Miroslav Benes <mbenes@suse.cz>,
Seth Jennings <sjenning@redhat.com>,
Vojtech Pavlik <vojtech@suse.com>,
linux-kernel@vger.kernel.org, live-patching@vger.kernel.org,
"Cyril B." <cbay@alwaysdata.com>
Subject: Re: [PATCH] livepatch: Cleanup page permission changes
Date: Wed, 4 Nov 2015 17:12:52 -0600 [thread overview]
Message-ID: <20151104231252.GA28254@treble.redhat.com> (raw)
In-Reply-To: <alpine.LNX.2.00.1511042349320.22567@pobox.suse.cz>
On Wed, Nov 04, 2015 at 11:56:13PM +0100, Jiri Kosina wrote:
> On Tue, 3 Nov 2015, Josh Poimboeuf wrote:
>
> > Subject: [PATCH] livepatch: Cleanup page permission changes
> >
> > Calling set_memory_rw() and set_memory_ro() for every iteration of the
> > loop in klp_write_object_relocations() is messy and inefficient. Change
> > all the RO pages to RW before the loop and convert them back to RO after
> > the loop.
>
> Generally speaking, I like the patch and would like to have this in 4.4
> still (if worse becomes worst and we don't make it in time for merge
> window, this still qualifies for -rc bugfix).
>
> > Suggested-by: Miroslav Benes <mbenes@suse.cz>
> > Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
> > ---
> > arch/x86/kernel/livepatch.c | 25 ++-----------------------
> > kernel/livepatch/core.c | 42 +++++++++++++++++++++++++++++++++++++-----
> > 2 files changed, 39 insertions(+), 28 deletions(-)
> >
> > diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c
> > index d1d35cc..1062eff 100644
> > --- a/arch/x86/kernel/livepatch.c
> > +++ b/arch/x86/kernel/livepatch.c
> > @@ -20,8 +20,6 @@
> >
> > #include <linux/module.h>
> > #include <linux/uaccess.h>
> > -#include <asm/cacheflush.h>
> > -#include <asm/page_types.h>
> > #include <asm/elf.h>
> > #include <asm/livepatch.h>
> >
> > @@ -38,8 +36,7 @@
> > int klp_write_module_reloc(struct module *mod, unsigned long type,
> > unsigned long loc, unsigned long value)
> > {
> > - int ret, numpages, size = 4;
> > - bool readonly;
> > + int size = 4;
>
> BTW I don't see a reason to have 'size' signed here.
It was already signed to begin with, but I can change it to size_t.
> [ ... snip ... [
> > --- a/kernel/livepatch/core.c
> > +++ b/kernel/livepatch/core.c
> > @@ -28,6 +28,7 @@
> > #include <linux/list.h>
> > #include <linux/kallsyms.h>
> > #include <linux/livepatch.h>
> > +#include <asm/cacheflush.h>
> >
> > /**
> > * struct klp_ops - structure for tracking registered ftrace ops structs
> > @@ -131,6 +132,33 @@ static bool klp_initialized(void)
> > return !!klp_root_kobj;
> > }
> >
> > +#ifdef CONFIG_DEBUG_SET_MODULE_RONX
> > +static void set_page_attributes(void *start, void *end,
> > + int (*set)(unsigned long start, int num_pages))
> > +{
> > + unsigned long begin_pfn = PFN_DOWN((unsigned long)start);
> > + unsigned long end_pfn = PFN_DOWN((unsigned long)end);
> > +
> > + if (end_pfn > begin_pfn)
> > + set(begin_pfn << PAGE_SHIFT, end_pfn - begin_pfn);
> > +}
> > +static void set_module_ro_rw(struct module *mod)
> > +{
> > + set_page_attributes(mod->module_core,
> > + mod->module_core + mod->core_ro_size,
> > + set_memory_rw);
> > +}
> > +static void set_module_ro_ro(struct module *mod)
>
> Honestly, I find both the function names above horrible and not really
> self-explanatory (especially the _ro_ro variant). At least comment,
> explaining what they are actually doing, or picking up a better name,
> would make the code much more self-explanatory in my eyes.
Being the patch author, naturally the function names make sense to me.
set_module_ro_ro() means "set the module's read-only area to have
read-only permissions."
Do you have any suggestions for a better name?
--
Josh
next prev parent reply other threads:[~2015-11-04 23:12 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-02 20:00 [PATCH] x86/livepatch: Fix crash with !CONFIG_DEBUG_SET_MODULE_RONX Josh Poimboeuf
2015-11-03 10:22 ` Miroslav Benes
2015-11-03 15:22 ` Josh Poimboeuf
2015-11-03 17:42 ` [PATCH] livepatch: Cleanup page permission changes Josh Poimboeuf
2015-11-04 9:18 ` Jiri Kosina
2015-11-04 16:10 ` Josh Poimboeuf
2015-11-04 16:13 ` Josh Poimboeuf
2015-11-04 9:40 ` Miroslav Benes
2015-11-04 22:56 ` Jiri Kosina
2015-11-04 23:12 ` Josh Poimboeuf [this message]
2015-11-05 9:28 ` Jiri Kosina
2015-11-05 9:40 ` Jiri Kosina
2015-11-05 15:17 ` Josh Poimboeuf
2015-11-05 17:33 ` 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=20151104231252.GA28254@treble.redhat.com \
--to=jpoimboe@redhat.com \
--cc=cbay@alwaysdata.com \
--cc=jikos@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--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: 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.