X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=kernel%2Fcred.c;h=8f3672a58a1e82a39de67ee4f35e7b2f0c12ac2b;hb=48652ced1533c3372f996a0d83b6e73b1f1c9381;hp=1ed8ca18790c1e937208af47bed6695f4218858b;hpb=11bfe2ea732c6499c46c4f3a63d567c05b9dbafd;p=karo-tx-linux.git diff --git a/kernel/cred.c b/kernel/cred.c index 1ed8ca18790c..8f3672a58a1e 100644 --- a/kernel/cred.c +++ b/kernel/cred.c @@ -10,13 +10,13 @@ */ #include #include +#include #include #include #include #include #include #include -#include "cred-internals.h" #if 0 #define kdebug(FMT, ...) \ @@ -364,7 +364,7 @@ struct cred *prepare_usermodehelper_creds(void) new = kmem_cache_alloc(cred_jar, GFP_ATOMIC); if (!new) - return NULL; + goto free_tgcred; kdebug("prepare_usermodehelper_creds() alloc %p", new); @@ -398,6 +398,12 @@ struct cred *prepare_usermodehelper_creds(void) error: put_cred(new); return NULL; + +free_tgcred: +#ifdef CONFIG_KEYS + kfree(tgcred); +#endif + return NULL; } /* @@ -553,8 +559,6 @@ int commit_creds(struct cred *new) atomic_dec(&old->user->processes); alter_cred_subscribers(old, -2); - sched_switch_user(task); - /* send notifications */ if (new->uid != old->uid || new->euid != old->euid || @@ -786,8 +790,6 @@ bool creds_are_invalid(const struct cred *cred) { if (cred->magic != CRED_MAGIC) return true; - if (atomic_read(&cred->usage) < atomic_read(&cred->subscribers)) - return true; #ifdef CONFIG_SECURITY_SELINUX if (selinux_is_enabled()) { if ((unsigned long) cred->security < PAGE_SIZE)