Skip to content
Snippets Groups Projects
user avatar
Waiman Long authored
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2090231



commit 1cd5f059
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Fri, 18 Mar 2022 21:24:38 +0100

    x86,static_call: Fix __static_call_return0 for i386

    Paolo reported that the instruction sequence that is used to replace:

        call __static_call_return0

    namely:

        66 66 48 31 c0      data16 data16 xor %rax,%rax

    decodes to something else on i386, namely:

        66 66 48            data16 dec %ax
        31 c0               xor    %eax,%eax

    Which is a nonsensical sequence that happens to have the same outcome.
    *However* an important distinction is that it consists of 2
    instructions which is a problem when the thing needs to be overwriten
    with a regular call instruction again.

    As such, replace the instruction with something that decodes the same
    on both i386 and x86_64.

    Fixes: 3f2a8fc4 ("static_call/x86: Add __static_call_return0()")
Reported-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20220318204419.GT8939@worktop.programming.kicks-ass.net



Signed-off-by: default avatarWaiman Long <longman@redhat.com>
7cee09b7
Name Last commit Last update