lkml.org 
[lkml]   [2017]   [Oct]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] futex: futex_wake_op, fix sign_extend32 sign bits
    Date
    sign_extend32 counts the sign bit parameter from 0, not from 1. So we
    have to use "11" for 12th bit, not "12".

    This mistake means we have not allowed negative op and cmp args since
    commit 30d6e0a4190d ("futex: Remove duplicated code and fix undefined
    behaviour") till now.

    Fixes: 30d6e0a4190d ("futex: Remove duplicated code and fix undefined behaviour")
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Darren Hart <dvhart@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    ---
    kernel/futex.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/kernel/futex.c b/kernel/futex.c
    index 0d638f008bb1..65aa3e911e13 100644
    --- a/kernel/futex.c
    +++ b/kernel/futex.c
    @@ -1565,8 +1565,8 @@ static int futex_atomic_op_inuser(unsigned int encoded_op, u32 __user *uaddr)
    {
    unsigned int op = (encoded_op & 0x70000000) >> 28;
    unsigned int cmp = (encoded_op & 0x0f000000) >> 24;
    - int oparg = sign_extend32((encoded_op & 0x00fff000) >> 12, 12);
    - int cmparg = sign_extend32(encoded_op & 0x00000fff, 12);
    + int oparg = sign_extend32((encoded_op & 0x00fff000) >> 12, 11);
    + int cmparg = sign_extend32(encoded_op & 0x00000fff, 11);
    int oldval, ret;

    if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) {
    --
    2.14.2
    \
     
     \ /
      Last update: 2017-10-23 13:43    [W:4.342 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site