• Linus Torvalds's avatar
    Copy the kernel module data from user space in chunks · 3afe9f84
    Linus Torvalds authored
    Unlike most (all?) other copies from user space, kernel module loading
    is almost unlimited in size.  So we do a potentially huge
    "copy_from_user()" when we copy the module data from user space to the
    kernel buffer, which can be a latency concern when preemption is
    disabled (or voluntary).
    
    Also, because 'copy_from_user()' clears the tail of the kernel buffer on
    failures, even a *failed* copy can end up wasting a lot of time.
    
    Normally neither of these are concerns in real life, but they do trigger
    when doing stress-testing with trinity.  Running in a VM seems to add
    its own overheadm causing trinity module load testing to even trigger
    the watchdog.
    
    The simple fix is to just chunk up the module loading, so that it never
    tries to copy insanely big areas in one go.  That bounds the latency,
    and also the amount of (unnecessarily, in this case) cleared memory for
    the failure case.
    Reported-by: default avatarSasha Levin <sasha.levin@oracle.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3afe9f84
module.c 98.3 KB