• Ralf Baechle's avatar
    [MIPS] Fixup copy_from_user_inatomic · e03b5269
    Ralf Baechle authored
    From the 01408c49 log message:
    
    The problem is that when we write to a file, the copy from userspace to
    pagecache is first done with preemption disabled, so if the source
    address is not immediately available the copy fails *and* *zeros* *the*
    *destination*.
    
    This is a problem because a concurrent read (which admittedly is an odd
    thing to do) might see zeros rather that was there before the write, or
    what was there after, or some mixture of the two (any of these being a
    reasonable thing to see).
    
    If the copy did fail, it will immediately be retried with preemption
    re-enabled so any transient problem with accessing the source won't
    cause an error.
    
    The first copying does not need to zero any uncopied bytes, and doing
    so causes the problem.  It uses copy_from_user_atomic rather than
    copy_from_user so the simple expedient is to change copy_from_user_atomic
    to *not* zero out bytes on failure.
    
    < --- end cite --- >
    
    This patch finally implements at least a not so pretty solution by
    duplicating the relevant part of __copy_user.
    Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    e03b5269
memcpy-inatomic.S 10.7 KB