[PATCH v15 22/23] LSM: Add /proc attr entry for full LSM context

Stephen Smalley sds at tycho.nsa.gov
Tue Feb 18 18:17:52 UTC 2020


On 2/14/20 6:42 PM, Casey Schaufler wrote:
> Add an entry /proc/.../attr/context which displays the full
> process security "context" in compound format:
>          lsm1\0value\0lsm2\0value\0...
> This entry is not writable.
> 
> Signed-off-by: Casey Schaufler <casey at schaufler-ca.com>
> Cc: linux-api at vger.kernel.org
<snip>
> ---
> diff --git a/Documentation/security/lsm.rst b/Documentation/security/lsm.rst
> index aadf47c808c0..faec18e7e7d1 100644
> --- a/Documentation/security/lsm.rst
> +++ b/Documentation/security/lsm.rst
> @@ -199,3 +199,25 @@ capability-related fields:
>   -  ``fs/nfsd/auth.c``::c:func:`nfsd_setuser()`
>   
>   -  ``fs/proc/array.c``::c:func:`task_cap()`
> +
> +LSM External Interfaces
> +=======================
> +
> +The LSM infrastructure does not generally provide external interfaces.
> +The individual security modules provide what external interfaces they
> +require.
> +
> +The infrastructure does provide an interface for the special
> +case where multiple security modules provide a process context.
> +This is provided in compound context format.
> +
> +-  `lsm1\0value\0lsm2\0value\0`
> +
> +The `value` is a nul terminated bytestring. It may contain
> +whitespace or non-printable characters.

Slight ambiguity above as to whether the NUL byte is part of "value" or 
a separator between "value" and "lsm2" or both (e.g. two consecutive NULs).

> +
> +The special file ``/proc/pid/attr/context`` provides the security
> +context of the identified process.
> +
> +The special file ``/sys/kernel/security/lsm`` provides a comma
> +separated list of the active security modules.

nit: To me at least, "special file" means device file and I think that's 
the common usage for UNIX-like systems.  So I wouldn't use that term for 
these files.  Could just drop "special".

> diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
> index 2bf82e1cf347..61977a33f2c3 100644
> --- a/include/linux/lsm_hooks.h
> +++ b/include/linux/lsm_hooks.h
> @@ -1321,6 +1321,12 @@
>    *	@pages contains the number of pages.
>    *	Return 0 if permission is granted.
>    *
> + * @getprocattr:
> + *	Provide the named process attribute for display in special files in
> + *	the /proc/.../attr directory.  Attribute naming and the data displayed

Ditto.

> + *	is at the discretion of the security modules.  The exception is the
> + *	"context" attribute, which will contain the security context of the
> + *	task as a nul terminated text string without trailing whitespace.

I guess you didn't like the kernel-doc description I offered (aside from 
the printable ASCII bit).  At least be explicit above about whether the 
returned length should include or omit the terminating NUL and make sure 
all modules conform.

> diff --git a/security/security.c b/security/security.c
> index a66786c255aa..89b635277245 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -2100,6 +2140,29 @@ int security_getprocattr(struct task_struct *p, const char *lsm, char *name,
>   		return -ENOMEM;
>   	}
>   
> +	if (!strcmp(name, "context")) {
> +		hlist_for_each_entry(hp, &security_hook_heads.getprocattr,
> +				     list) {
> +			rc = hp->hook.getprocattr(p, "context", &cp);
> +			if (rc == -EINVAL || rc == -ENOPROTOOPT)
> +				continue;

I'm guessing the -ENOPROTOOPT test is a leftover from trying to handle 
getpeersec_stream as well as getprocattr?  AFAICT, that is only returned 
for getpeersec_stream.



More information about the Linux-security-module-archive mailing list