]> git.baikalelectronics.ru Git - kernel.git/commit
Copy the kernel module data from user space in chunks
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 Apr 2015 17:33:49 +0000 (10:33 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 8 Apr 2015 21:35:48 +0000 (14:35 -0700)
commita5d73164658ef6905a0e063018a51e6c7bb4e8e4
tree6de4adcc568a7df591f3b73f36ecb8736eb9168d
parent231910edce5d08a531d8a6f37a1f380ad18477a1
Copy the kernel module data from user space in chunks

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: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/module.c