• Thomas Gleixner's avatar
    [PATCH] i386: fix file_read_actor() and pipe_read() for original i386 systems · b6a8b316
    Thomas Gleixner authored
    The __copy_to_user_inatomic() calls in file_read_actor() and pipe_read()
    are broken on original i386 machines, where WP-works-ok == false, as
    __copy_to_user_inatomic() on such systems calls functions which might
    sleep and/or contain cond_resched() calls inside of a kmap_atomic()
    region.
    
    The original check for WP-works-ok was in access_ok(), but got moved
    during the 2.5 series to fix a race vs. swap.
    
    Return the number of bytes to copy in the case where we are in an atomic
    region, so the non atomic code pathes in file_read_actor() and
    pipe_read() are taken.
    
    This could be optimized to avoid the kmap_atomicby moving the check for
    WP-works-ok into fault_in_pages_writeable(), but this is more intrusive
    and can be done later.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b6a8b316
usercopy.c 25.3 KB