]> git.baikalelectronics.ru Git - kernel.git/commit
commoncap: don't alloc the credential unless needed in cap_task_prctl
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Tue, 22 Jul 2014 12:20:01 +0000 (21:20 +0900)
committerJames Morris <james.l.morris@oracle.com>
Thu, 24 Jul 2014 11:12:30 +0000 (21:12 +1000)
commit20d65ff49483b73c69aa5a89071f5786ccd91e94
tree51c24037355a91d098568a88f7dd9715dee8008c
parentb18d6636594ed34f3c61d3b449b5345055d2414e
commoncap: don't alloc the credential unless needed in cap_task_prctl

In function cap_task_prctl(), we would allocate a credential
unconditionally and then check if we support the requested function.
If not we would release this credential with abort_creds() by using
RCU method. But on some archs such as powerpc, the sys_prctl is heavily
used to get/set the floating point exception mode. So the unnecessary
allocating/releasing of credential not only introduce runtime overhead
but also do cause OOM due to the RCU implementation.

This patch removes abort_creds() from cap_task_prctl() by calling
prepare_creds() only when we need to modify it.

Reported-by: Kevin Hao <haokexin@gmail.com>
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reviewed-by: Paul Moore <paul@paul-moore.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: James Morris <james.l.morris@oracle.com>
security/commoncap.c