From e1a33634873aa52b469125679135a14ec6dcda19 Mon Sep 17 00:00:00 2001 From: David Howells Date: Mon, 22 Aug 2011 14:09:00 +0100 Subject: [PATCH] --- yaml --- r: 264507 b: refs/heads/master c: 012146d0728f85f7a5c7c36fb84bba33e2760507 h: refs/heads/master i: 264505: b73a5b741749e8be7428af204840a95d661d8f1c 264503: 54fe8543edfb9ce90052dd7631e1973b2dd20f11 v: v3 --- [refs] | 2 +- trunk/kernel/cred.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 133354b28500..d27dbbeff1c2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6d528b082294f0ddabd6368297546a2c0b67d4fe +refs/heads/master: 012146d0728f85f7a5c7c36fb84bba33e2760507 diff --git a/trunk/kernel/cred.c b/trunk/kernel/cred.c index 174fa84eca30..f1e22556bc49 100644 --- a/trunk/kernel/cred.c +++ b/trunk/kernel/cred.c @@ -646,6 +646,9 @@ void __init cred_init(void) */ struct cred *prepare_kernel_cred(struct task_struct *daemon) { +#ifdef CONFIG_KEYS + struct thread_group_cred *tgcred; +#endif const struct cred *old; struct cred *new; @@ -653,6 +656,12 @@ struct cred *prepare_kernel_cred(struct task_struct *daemon) if (!new) return NULL; + tgcred = kmalloc(sizeof(*tgcred), GFP_KERNEL); + if (!tgcred) { + kmem_cache_free(cred_jar, new); + return NULL; + } + kdebug("prepare_kernel_cred() alloc %p", new); if (daemon) @@ -669,8 +678,11 @@ struct cred *prepare_kernel_cred(struct task_struct *daemon) get_group_info(new->group_info); #ifdef CONFIG_KEYS - atomic_inc(&init_tgcred.usage); - new->tgcred = &init_tgcred; + atomic_set(&tgcred->usage, 1); + spin_lock_init(&tgcred->lock); + tgcred->process_keyring = NULL; + tgcred->session_keyring = NULL; + new->tgcred = tgcred; new->request_key_auth = NULL; new->thread_keyring = NULL; new->jit_keyring = KEY_REQKEY_DEFL_THREAD_KEYRING;