diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-04-22 10:17:09 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-04-22 10:17:09 -0400 |
commit | 5e31877b647bf41ad080adad6100a617ed4c6be4 (patch) | |
tree | 89779d6189828ec033aa8f445afb8ed2e854679e | |
parent | 1ef6ce7a340f9ed139a73147ff9cf7ad56889414 (diff) | |
parent | b338cc8207eae46640a8d534738fda7b5e48511d (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6:
security: testing the wrong variable in create_by_name()
CRED: Fix a race in creds_are_invalid() in credentials debugging
CRED: Fix double free in prepare_usermodehelper_creds() error handling
-rw-r--r-- | kernel/cred.c | 4 | ||||
-rw-r--r-- | security/inode.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/kernel/cred.c b/kernel/cred.c index e1dbe9eef800..62af1816c235 100644 --- a/kernel/cred.c +++ b/kernel/cred.c | |||
@@ -398,6 +398,8 @@ struct cred *prepare_usermodehelper_creds(void) | |||
398 | 398 | ||
399 | error: | 399 | error: |
400 | put_cred(new); | 400 | put_cred(new); |
401 | return NULL; | ||
402 | |||
401 | free_tgcred: | 403 | free_tgcred: |
402 | #ifdef CONFIG_KEYS | 404 | #ifdef CONFIG_KEYS |
403 | kfree(tgcred); | 405 | kfree(tgcred); |
@@ -791,8 +793,6 @@ bool creds_are_invalid(const struct cred *cred) | |||
791 | { | 793 | { |
792 | if (cred->magic != CRED_MAGIC) | 794 | if (cred->magic != CRED_MAGIC) |
793 | return true; | 795 | return true; |
794 | if (atomic_read(&cred->usage) < atomic_read(&cred->subscribers)) | ||
795 | return true; | ||
796 | #ifdef CONFIG_SECURITY_SELINUX | 796 | #ifdef CONFIG_SECURITY_SELINUX |
797 | if (selinux_is_enabled()) { | 797 | if (selinux_is_enabled()) { |
798 | if ((unsigned long) cred->security < PAGE_SIZE) | 798 | if ((unsigned long) cred->security < PAGE_SIZE) |
diff --git a/security/inode.c b/security/inode.c index c3a793881d04..1c812e874504 100644 --- a/security/inode.c +++ b/security/inode.c | |||
@@ -161,13 +161,13 @@ static int create_by_name(const char *name, mode_t mode, | |||
161 | 161 | ||
162 | mutex_lock(&parent->d_inode->i_mutex); | 162 | mutex_lock(&parent->d_inode->i_mutex); |
163 | *dentry = lookup_one_len(name, parent, strlen(name)); | 163 | *dentry = lookup_one_len(name, parent, strlen(name)); |
164 | if (!IS_ERR(dentry)) { | 164 | if (!IS_ERR(*dentry)) { |
165 | if ((mode & S_IFMT) == S_IFDIR) | 165 | if ((mode & S_IFMT) == S_IFDIR) |
166 | error = mkdir(parent->d_inode, *dentry, mode); | 166 | error = mkdir(parent->d_inode, *dentry, mode); |
167 | else | 167 | else |
168 | error = create(parent->d_inode, *dentry, mode); | 168 | error = create(parent->d_inode, *dentry, mode); |
169 | } else | 169 | } else |
170 | error = PTR_ERR(dentry); | 170 | error = PTR_ERR(*dentry); |
171 | mutex_unlock(&parent->d_inode->i_mutex); | 171 | mutex_unlock(&parent->d_inode->i_mutex); |
172 | 172 | ||
173 | return error; | 173 | return error; |