lkml.org 
[lkml]   [2019]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH V4 3/9] x86/jump_label: Move checking code away from __jump_label_transform()
    From
    Date
    On 2/5/19 8:33 AM, Borislav Petkov wrote:
    > On Mon, Feb 04, 2019 at 08:58:56PM +0100, Daniel Bristot de Oliveira wrote:
    >> Move the check of the current code, before updating an entry, to specialized
    >> functions. No changes in the method, only code relocation.
    >>
    >> Signed-off-by: Daniel Bristot de Oliveira <bristot@redhat.com>
    >> Cc: Thomas Gleixner <tglx@linutronix.de>
    >> Cc: Ingo Molnar <mingo@redhat.com>
    >> Cc: Borislav Petkov <bp@alien8.de>
    >> Cc: "H. Peter Anvin" <hpa@zytor.com>
    >> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    >> Cc: Masami Hiramatsu <mhiramat@kernel.org>
    >> Cc: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
    >> Cc: Jiri Kosina <jkosina@suse.cz>
    >> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    >> Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
    >> Cc: Chris von Recklinghausen <crecklin@redhat.com>
    >> Cc: Jason Baron <jbaron@akamai.com>
    >> Cc: Scott Wood <swood@redhat.com>
    >> Cc: Marcelo Tosatti <mtosatti@redhat.com>
    >> Cc: Clark Williams <williams@redhat.com>
    >> Cc: x86@kernel.org
    >> Cc: linux-kernel@vger.kernel.org
    >> ---
    >> arch/x86/kernel/jump_label.c | 60 +++++++++++++++++++++++++-----------
    >> 1 file changed, 42 insertions(+), 18 deletions(-)
    >>
    >> diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
    >> index f99bd26bd3f1..e443c43478eb 100644
    >> --- a/arch/x86/kernel/jump_label.c
    >> +++ b/arch/x86/kernel/jump_label.c
    >> @@ -35,16 +35,53 @@ static void bug_at(unsigned char *ip, int line)
    >> BUG();
    >> }
    >>
    >> +static inline void __jump_label_trans_check_enable(struct jump_entry *entry,
    >> + enum jump_label_type type,
    >> + const unsigned char *ideal_nop,
    >> + int init)
    >> +{
    >> + const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP };
    >> + const void *expect;
    >> + int line;
    >> +
    >> + if (init) {
    >> + expect = default_nop; line = __LINE__;
    >> + } else {
    >> + expect = ideal_nop; line = __LINE__;
    >> + }
    >> +
    >> + if (memcmp((void *)jump_entry_code(entry), expect, JUMP_LABEL_NOP_SIZE))
    >> + bug_at((void *)jump_entry_code(entry), line);
    >> +}
    >> +
    >> +static inline void __jump_label_trans_check_disable(struct jump_entry *entry,
    >> + enum jump_label_type type,
    >> + union jump_code_union *jmp,
    >> + int init)
    >> +{
    >> + const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP };
    >> + const void *expect;
    >> + int line;
    >> +
    >> + if (init) {
    >> + expect = default_nop; line = __LINE__;
    >> + } else {
    >> + expect = jmp->code; line = __LINE__;
    >> + }
    >> +
    >> + if (memcmp((void *)jump_entry_code(entry), expect, JUMP_LABEL_NOP_SIZE))
    >> + bug_at((void *)jump_entry_code(entry), line);
    >> +}
    >
    > Why the carve out?
    >
    > The next patch is adding __jump_label_set_jump_code() which calls them
    > so you could just as well keep the functionality all in that function without
    > having too many helpers which are called only once...
    >

    agreed.

    Thanks!
    -- Daniel

    \
     
     \ /
      Last update: 2019-02-05 16:24    [W:3.368 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site