lkml.org 
[lkml]   [2008]   [Jul]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH 1/2] Introduce copy_user_handle_tail routine
    Date
    Introduce generic C routine for handling necessary tail operations after
    protection fault in copy_*_user on x86.

    diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c
    index 0c89d1b..3ab4ec8 100644
    --- a/arch/x86/lib/usercopy_64.c
    +++ b/arch/x86/lib/usercopy_64.c
    @@ -158,3 +158,26 @@ unsigned long copy_in_user(void __user *to, const void __user *from, unsigned le
    }
    EXPORT_SYMBOL(copy_in_user);

    +/*
    + * Try to copy last bytes and clear the rest if needed.
    + * Since protection fault in copy_from/to_user is not a normal situation,
    + * it is not necessary to optimize tail handling.
    + */
    +unsigned long
    +copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest)
    +{
    + char c;
    + unsigned zero_len;
    +
    + for (; len; --len) {
    + if (__get_user_nocheck(c, from++, sizeof(char)))
    + break;
    + if (__put_user_nocheck(c, to++, sizeof(char)))
    + break;
    + }
    +
    + for (c = 0, zero_len = len; zerorest && zero_len; --zero_len)
    + if (__put_user_nocheck(c, to++, sizeof(char)))
    + break;
    + return len;
    +}
    diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h
    index b8a2f43..1dc2003 100644
    --- a/include/asm-x86/uaccess_64.h
    +++ b/include/asm-x86/uaccess_64.h
    @@ -455,4 +455,7 @@ static inline int __copy_from_user_inatomic_nocache(void *dst,
    return __copy_user_nocache(dst, src, size, 0);
    }

    +unsigned long
    +copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest);
    +
    #endif /* __X86_64_UACCESS_H */
    Signed-off-by: Vitaly Mayatskikh <v.mayatskih@gmail.com>

    --
    wbr, Vitaly


    \
     
     \ /
      Last update: 2008-07-02 15:51    [W:0.021 / U:0.624 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site