diff options
Diffstat (limited to 'security/selinux/ss/mls.c')
| -rw-r--r-- | security/selinux/ss/mls.c | 30 | 
1 files changed, 29 insertions, 1 deletions
diff --git a/security/selinux/ss/mls.c b/security/selinux/ss/mls.c index 84047f69f9c..7bc5b6440f7 100644 --- a/security/selinux/ss/mls.c +++ b/security/selinux/ss/mls.c @@ -8,7 +8,7 @@   *   *	Support for enhanced MLS infrastructure.   * - * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. + * Copyright (C) 2004-2006 Trusted Computer Solutions, Inc.   */  #include <linux/kernel.h> @@ -385,6 +385,34 @@ out:  }  /* + * Set the MLS fields in the security context structure + * `context' based on the string representation in + * the string `str'.  This function will allocate temporary memory with the + * given constraints of gfp_mask. + */ +int mls_from_string(char *str, struct context *context, gfp_t gfp_mask) +{ +	char *tmpstr, *freestr; +	int rc; + +	if (!selinux_mls_enabled) +		return -EINVAL; + +	/* we need freestr because mls_context_to_sid will change +	   the value of tmpstr */ +	tmpstr = freestr = kstrdup(str, gfp_mask); +	if (!tmpstr) { +		rc = -ENOMEM; +	} else { +		rc = mls_context_to_sid(':', &tmpstr, context, +		                        NULL, SECSID_NULL); +		kfree(freestr); +	} + +	return rc; +} + +/*   * Copies the effective MLS range from `src' into `dst'.   */  static inline int mls_scopy_context(struct context *dst,  |