git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rcu: improve RCU CPU stall-warning messages
[safe/jmp/linux-2.6]
/
kernel
/
cred.c
diff --git
a/kernel/cred.c
b/kernel/cred.c
index
70bda79
..
62af181
100644
(file)
--- a/
kernel/cred.c
+++ b/
kernel/cred.c
@@
-10,6
+10,7
@@
*/
#include <linux/module.h>
#include <linux/cred.h>
*/
#include <linux/module.h>
#include <linux/cred.h>
+#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/key.h>
#include <linux/keyctl.h>
#include <linux/sched.h>
#include <linux/key.h>
#include <linux/keyctl.h>
@@
-224,7
+225,7
@@
struct cred *cred_alloc_blank(void)
#ifdef CONFIG_KEYS
new->tgcred = kzalloc(sizeof(*new->tgcred), GFP_KERNEL);
if (!new->tgcred) {
#ifdef CONFIG_KEYS
new->tgcred = kzalloc(sizeof(*new->tgcred), GFP_KERNEL);
if (!new->tgcred) {
- k
free(
new);
+ k
mem_cache_free(cred_jar,
new);
return NULL;
}
atomic_set(&new->tgcred->usage, 1);
return NULL;
}
atomic_set(&new->tgcred->usage, 1);
@@
-364,7
+365,7
@@
struct cred *prepare_usermodehelper_creds(void)
new = kmem_cache_alloc(cred_jar, GFP_ATOMIC);
if (!new)
new = kmem_cache_alloc(cred_jar, GFP_ATOMIC);
if (!new)
-
return NULL
;
+
goto free_tgcred
;
kdebug("prepare_usermodehelper_creds() alloc %p", new);
kdebug("prepare_usermodehelper_creds() alloc %p", new);
@@
-398,6
+399,12
@@
struct cred *prepare_usermodehelper_creds(void)
error:
put_cred(new);
return NULL;
error:
put_cred(new);
return NULL;
+
+free_tgcred:
+#ifdef CONFIG_KEYS
+ kfree(tgcred);
+#endif
+ return NULL;
}
/*
}
/*
@@
-786,8
+793,6
@@
bool creds_are_invalid(const struct cred *cred)
{
if (cred->magic != CRED_MAGIC)
return true;
{
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)
#ifdef CONFIG_SECURITY_SELINUX
if (selinux_is_enabled()) {
if ((unsigned long) cred->security < PAGE_SIZE)
@@
-799,6
+804,7
@@
bool creds_are_invalid(const struct cred *cred)
#endif
return false;
}
#endif
return false;
}
+EXPORT_SYMBOL(creds_are_invalid);
/*
* dump invalid credentials
/*
* dump invalid credentials