lkml.org 
[lkml]   [2014]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[RFC][PATCH 5/8] x86, mpx: Add temporary variable to reduce masking
    From
    Date

    From: Dave Hansen <dave.hansen@linux.intel.com>

    When we allocate a bounds table, we call mmap(), then add a
    "valid" bit to the value before storing it in to the bounds
    directory.

    If we fail along the way, we go and mask that valid bit
    _back_ out. That seems a little silly, and this makes it
    much more clear when we have a plain address versus an
    actual table _entry_.

    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    ---

    b/arch/x86/mm/mpx.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    diff -puN arch/x86/mm/mpx.c~mpx-remove-unnecessary-masking arch/x86/mm/mpx.c
    --- a/arch/x86/mm/mpx.c~mpx-remove-unnecessary-masking 2014-12-12 11:11:40.599015745 -0800
    +++ b/arch/x86/mm/mpx.c 2014-12-12 11:11:40.602015880 -0800
    @@ -421,6 +421,7 @@ static int allocate_bt(long __user *bd_e
    unsigned long expected_old_val = 0;
    unsigned long actual_old_val = 0;
    unsigned long bt_addr;
    + unsigned long bd_new_entry;
    int ret = 0;

    /*
    @@ -433,7 +434,7 @@ static int allocate_bt(long __user *bd_e
    /*
    * Set the valid flag (kinda like _PAGE_PRESENT in a pte)
    */
    - bt_addr = bt_addr | MPX_BD_ENTRY_VALID_FLAG;
    + bd_new_entry = bt_addr | MPX_BD_ENTRY_VALID_FLAG;

    /*
    * Go poke the address of the new bounds table in to the
    @@ -447,7 +448,7 @@ static int allocate_bt(long __user *bd_e
    * of the MPX code that have to pagefault_disable().
    */
    ret = user_atomic_cmpxchg_inatomic(&actual_old_val, bd_entry,
    - expected_old_val, bt_addr);
    + expected_old_val, bd_new_entry);
    if (ret)
    goto out_unmap;

    @@ -477,7 +478,7 @@ static int allocate_bt(long __user *bd_e
    }
    return 0;
    out_unmap:
    - vm_munmap(bt_addr & MPX_BT_ADDR_MASK, MPX_BT_SIZE_BYTES);
    + vm_munmap(bt_addr, MPX_BT_SIZE_BYTES);
    return ret;
    }

    _

    \
     
     \ /
      Last update: 2014-12-12 20:41    [W:5.834 / U:0.632 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site