lkml.org 
[lkml]   [2005]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] fix put_user for 80386
    Hi,

    Linus noticed that put_user doesn't to the manual page table lookup that
    is required for cpus without a working WP flag. The solution is simple:
    if CONFIG_X86_WP_WORKS_OK is not set, then the put_user macros must call
    __copy_to_user_ll(). That function contains the required checks.
    This is already implemented for __put_user_size(), somehow I overlooked
    __put_user_{1,2,4,8,X}.

    What do you think?
    Patch against 2.6.11-mm2, test booted with bochs.

    --
    Manfred
    --- 2.6/include/asm-i386/uaccess.h 2005-03-12 01:05:49.000000000 +0100
    +++ build-2.6/include/asm-i386/uaccess.h 2005-03-12 17:37:27.938115959 +0100
    @@ -217,6 +217,8 @@
    *
    * Returns zero on success, or -EFAULT on error.
    */
    +#ifdef CONFIG_X86_WP_WORKS_OK
    +
    #define put_user(x,ptr) \
    ({ int __ret_pu; \
    __chk_user_ptr(ptr); \
    @@ -230,6 +232,21 @@
    __ret_pu; \
    })

    +#else
    +#define put_user(x,ptr) \
    +({ \
    + int __ret_pu; \
    + __typeof__(*(ptr)) __pus_tmp = x; \
    + __ret_pu=0; \
    + if(unlikely(__copy_to_user_ll(ptr, &__pus_tmp, \
    + sizeof(*(ptr))) != 0)) \
    + __ret_pu=-EFAULT; \
    + __ret_pu; \
    + })
    +
    +
    +#endif
    +
    /**
    * __get_user: - Get a simple variable from user space, with less checking.
    * @x: Variable to store result.
    \
     
     \ /
      Last update: 2005-03-22 14:11    [W:0.042 / U:89.048 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site