selinux: Fix a problem in security_netlbl_sid_to_secattr()

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Monday, October 13, 2008 - 11:14 am

Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=99d854...
Commit:     99d854d231ce141850b988bdc7e2e7c78f49b03a
Parent:     d8395c876bb8a560c8a032887e191b95499a25d6
Author:     Paul Moore <paul.moore@hp.com>
AuthorDate: Fri Oct 10 10:16:30 2008 -0400
Committer:  Paul Moore <paul.moore@hp.com>
CommitDate: Fri Oct 10 10:16:30 2008 -0400

    selinux: Fix a problem in security_netlbl_sid_to_secattr()
    
    Currently when SELinux fails to allocate memory in
    security_netlbl_sid_to_secattr() the NetLabel LSM domain field is set to
    NULL which triggers the default NetLabel LSM domain mapping which may not
    always be the desired mapping.  This patch fixes this by returning an error
    when the kernel is unable to allocate memory.  This could result in more
    failures on a system with heavy memory pressure but it is the "correct"
    thing to do.
    
    Signed-off-by: Paul Moore <paul.moore@hp.com>
    Acked-by: James Morris <jmorris@namei.org>
---
 security/selinux/ss/services.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index 8551952..c8f688a 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -2785,7 +2785,7 @@ netlbl_secattr_to_sid_return_cleanup:
  */
 int security_netlbl_sid_to_secattr(u32 sid, struct netlbl_lsm_secattr *secattr)
 {
-	int rc = -ENOENT;
+	int rc;
 	struct context *ctx;
 
 	if (!ss_initialized)
@@ -2793,10 +2793,16 @@ int security_netlbl_sid_to_secattr(u32 sid, struct netlbl_lsm_secattr *secattr)
 
 	read_lock(&policy_rwlock);
 	ctx = sidtab_search(&sidtab, sid);
-	if (ctx == NULL)
+	if (ctx == NULL) {
+		rc = -ENOENT;
 		goto netlbl_sid_to_secattr_failure;
+	}
 	secattr->domain = kstrdup(policydb.p_type_val_to_name[ctx->type - 1],
 				  GFP_ATOMIC);
+	if (secattr->domain == NULL) {
+		rc = -ENOMEM;
+		goto netlbl_sid_to_secattr_failure;
+	}
 	secattr->flags |= NETLBL_SECATTR_DOMAIN_CPY;
 	mls_export_netlbl_lvl(ctx, secattr);
 	rc = mls_export_netlbl_cat(ctx, secattr);
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
selinux: Fix a problem in security_netlbl_sid_to_secattr(), Linux Kernel Mailing ..., (Mon Oct 13, 11:14 am)