lkml.org 
[lkml]   [2002]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: AUDIT: copy_from_user is a deathtrap.
    Date
    Christoph Hellwig writes:

    ------
    > FreeBSD has:
    > /* return 0 on success, EFAULT on failure */
    > int copyin(const void *udaddr, void *kaddr, size_t len);
    > int copyout(const void *kaddr, void *udaddr, size_t len);

    return copyin(x,y,z); /* want EFAULT */
    return copyin(x,y,z) ? -1 : 0; /* want -1 */
    return copyin(x,y,z); /* want non-zero */

    FreeBSD behavior might be best, considering where we
    are most likely to share drivers.

    ------
    > System V and derivates have:
    > /* return 0 on success, -1 on failure */
    > int copyin(const void *userbuf, void *driverbuf, size_t cn);
    > int copyout(const void *driverbuf, void *userbuf, size_t cn);

    System V behavior is the easiest to use:

    return copyin(x,y,z) & EFAULT; /* want EFAULT */
    return copyin(x,y,z); /* want -1 */
    return copyin(x,y,z); /* want non-zero */

    ------
    > OSF/1 has:
    > /* return 0 on success, some non-specified error on failure) */
    > int copyin(caddr_t user_src, caddr_t kernel_dest, u_int bcount);
    > int copyout(caddr_t kernel_src, caddr_t user_dest, u_int bcount);

    return copyin(x,y,z) ? EFAULT : 0; /* want EFAULT */
    return copyin(x,y,z) ? -1 : 0; /* want -1 */
    return copyin(x,y,z); /* want non-zero */

    Yuck... but good if it makes the assembly any faster.

    ------
    With -EFAULT on an error:

    return -copyin(x,y,z); /* want EFAULT */
    return copyin(x,y,z)>>31; /* want -1 (rely on gcc's sign awareness) */
    return copyin(x,y,z); /* want non-zero */

    Well, I like it.
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:26    [W:3.006 / U:1.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site