$ git tag --contains a04a1198088a1378d0389c250cc684f649bcc91e | head -1 v6.10 $ -------------------------------------------------------------------------------------------------- commit a04a1198088a1378d0389c250cc684f649bcc91e Author: Casey Schaufler <casey@schaufler-ca.com> Date: Tue Sep 12 13:56:49 2023 -0700 LSM: syscalls for current process attributes Create a system call lsm_get_self_attr() to provide the security module maintained attributes of the current process. Create a system call lsm_set_self_attr() to set a security module maintained attribute of the current process. Historically these attributes have been exposed to user space via entries in procfs under /proc/self/attr. The attribute value is provided in a lsm_ctx structure. The structure identifies the size of the attribute, and the attribute value. The format of the attribute value is defined by the security module. A flags field is included for LSM specific information. It is currently unused and must be 0. The total size of the data, including the lsm_ctx structure and any padding, is maintained as well. struct lsm_ctx { __u64 id; __u64 flags; __u64 len; __u64 ctx_len; __u8 ctx[]; }; Two new LSM hooks are used to interface with the LSMs. security_getselfattr() collects the lsm_ctx values from the LSMs that support the hook, accounting for space requirements. security_setselfattr() identifies which LSM the attribute is intended for and passes it along. [ ... stuff deleted ... ] -------------------------------------------------------------------------------------------------- /** * sys_lsm_set_self_attr - Set current task's security module attribute * @attr: which attribute to set * @ctx: the LSM contexts * @size: size of @ctx * @flags: reserved for future use * * Sets the calling task's LSM context. On success this function * returns 0. If the attribute specified cannot be set a negative * value indicating the reason for the error is returned. */ SYSCALL_DEFINE4(lsm_set_self_attr, unsigned int, attr, struct lsm_ctx __user *, ctx, u32, size, u32, flags) { return security_setselfattr(attr, ctx, size, flags); } /** * sys_lsm_get_self_attr - Return current task's security module attributes * @attr: which attribute to return * @ctx: the user-space destination for the information, or NULL * @size: pointer to the size of space available to receive the data * @flags: special handling options. LSM_FLAG_SINGLE indicates that only * attributes associated with the LSM identified in the passed @ctx be * reported. * * Returns the calling task's LSM contexts. On success this * function returns the number of @ctx array elements. This value * may be zero if there are no LSM contexts assigned. If @size is * insufficient to contain the return data -E2BIG is returned and * @size is set to the minimum required size. In all other cases * a negative value indicating the error is returned. */ SYSCALL_DEFINE4(lsm_get_self_attr, unsigned int, attr, struct lsm_ctx __user *, ctx, u32 __user *, size, u32, flags) { return security_getselfattr(attr, ctx, size, flags); }
Created attachment 185764 [details] proposed patch Tests in progress: https://builder.sourceware.org/buildbot/#/changes/98109
- Missing NEWS entry - vki-scnums-shared-linux.h defines shared _NR constants. OK - vki-linux.h defines new vki_lsm_ctx. OK - priv_syswrap-linux.h defines templates for sm_[get|set]_self_attr. OK - syswrap-*-linux.c defines all PRE/POST handlers for sm_[get|set]_self_attr. OK - Note in lsm_get_self_attr PRE handler that size (ARG3) is a pointer to an u32 that is being read and written to. So it needs to be checked whether it is valid memory. - lsm_get_self_attr POST, same comment, so needs to use *ARG3. - lsm_set_self_attr PRE handler is missing a PRE_MEM_READ("lsm_get_self_attr(ctx)", ARG2, ARG3); (here it isn't a pointer to size, so can be used directly)
Created attachment 187204 [details] updated patch Thank you for the review! Updated patch attached, buildbots running...
https://builder.sourceware.org/buildbot/#/changes/103473
https://builder.sourceware.org/buildbot/#/builders/243/builds/115
(In reply to mcermak from comment #3) > Created attachment 187204 [details] > updated patch > > Thank you for the review! Updated patch attached, buildbots running... - The bug number in NEWS is wrong (185764 should be 510563) - PRE(sys_lsm_get_self_attr) looks OK now checking ARG3 as u32 *. - Likewise lsm_get_self_attr POST, OK. - lsm_set_self_attr PRE handler now checks ctx size. OK. Test results also look good. ltp lsm_get/set_self_attr test pass. (There is also a new lsm_list_modules syscall that we aren't handling yet, is there a bug for that?) So, with the NEWS entry bug number fixes this looks good to push. Thanks.
Thank you! Pushed as commit 4ad2f953c4132140eac15221ac0a7ca2f89b348c .