[PATCH] lsm: cleanup lsm_hooks.h
Casey Schaufler
casey at schaufler-ca.com
Mon Jul 29 22:09:38 UTC 2024
On 7/29/2024 2:57 PM, Paul Moore wrote:
> Some cleanup and style corrections for lsm_hooks.h.
>
> * Drop the lsm_inode_alloc() extern declaration, it is not needed.
> * Relocate lsm_get_xattr_slot() and extern variables in the file to
> improve grouping of related objects.
> * Don't use tabs to needlessly align structure fields.
>
> Signed-off-by: Paul Moore <paul at paul-moore.com>
Sense of aesthetics aside,
Reviewed-by: Casey Schaufler <casey at schaufler-ca.com>
> ---
> include/linux/lsm_hooks.h | 82 +++++++++++++++++++--------------------
> security/security.c | 2 +-
> 2 files changed, 41 insertions(+), 43 deletions(-)
>
> diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
> index 845457f0eeb7..f0dd453b39d5 100644
> --- a/include/linux/lsm_hooks.h
> +++ b/include/linux/lsm_hooks.h
> @@ -79,8 +79,8 @@ struct lsm_static_calls_table {
> * Contains the information that identifies the LSM.
> */
> struct lsm_id {
> - const char *name;
> - u64 id;
> + const char *name;
> + u64 id;
> };
>
> /*
> @@ -93,48 +93,30 @@ struct lsm_id {
> * @lsm: The name of the lsm that owns this hook.
> */
> struct security_hook_list {
> - struct lsm_static_call *scalls;
> - union security_list_options hook;
> - const struct lsm_id *lsmid;
> + struct lsm_static_call *scalls;
> + union security_list_options hook;
> + const struct lsm_id *lsmid;
> } __randomize_layout;
>
> /*
> * Security blob size or offset data.
> */
> struct lsm_blob_sizes {
> - int lbs_cred;
> - int lbs_file;
> - int lbs_ib;
> - int lbs_inode;
> - int lbs_sock;
> - int lbs_superblock;
> - int lbs_ipc;
> - int lbs_key;
> - int lbs_msg_msg;
> - int lbs_perf_event;
> - int lbs_task;
> - int lbs_xattr_count; /* number of xattr slots in new_xattrs array */
> - int lbs_tun_dev;
> + int lbs_cred;
> + int lbs_file;
> + int lbs_ib;
> + int lbs_inode;
> + int lbs_sock;
> + int lbs_superblock;
> + int lbs_ipc;
> + int lbs_key;
> + int lbs_msg_msg;
> + int lbs_perf_event;
> + int lbs_task;
> + int lbs_xattr_count; /* number of xattr slots in new_xattrs array */
> + int lbs_tun_dev;
> };
>
> -/**
> - * lsm_get_xattr_slot - Return the next available slot and increment the index
> - * @xattrs: array storing LSM-provided xattrs
> - * @xattr_count: number of already stored xattrs (updated)
> - *
> - * Retrieve the first available slot in the @xattrs array to fill with an xattr,
> - * and increment @xattr_count.
> - *
> - * Return: The slot to fill in @xattrs if non-NULL, NULL otherwise.
> - */
> -static inline struct xattr *lsm_get_xattr_slot(struct xattr *xattrs,
> - int *xattr_count)
> -{
> - if (unlikely(!xattrs))
> - return NULL;
> - return &xattrs[(*xattr_count)++];
> -}
> -
> /*
> * LSM_RET_VOID is used as the default value in LSM_HOOK definitions for void
> * LSM hooks (in include/linux/lsm_hook_defs.h).
> @@ -153,8 +135,6 @@ static inline struct xattr *lsm_get_xattr_slot(struct xattr *xattrs,
> .hook = { .NAME = HOOK } \
> }
>
> -extern char *lsm_names;
> -
> extern void security_add_hooks(struct security_hook_list *hooks, int count,
> const struct lsm_id *lsmid);
>
> @@ -176,9 +156,6 @@ struct lsm_info {
> struct lsm_blob_sizes *blobs; /* Optional: for blob sharing. */
> };
>
> -extern struct lsm_info __start_lsm_info[], __end_lsm_info[];
> -extern struct lsm_info __start_early_lsm_info[], __end_early_lsm_info[];
> -
> #define DEFINE_LSM(lsm) \
> static struct lsm_info __lsm_##lsm \
> __used __section(".lsm_info.init") \
> @@ -189,7 +166,28 @@ extern struct lsm_info __start_early_lsm_info[], __end_early_lsm_info[];
> __used __section(".early_lsm_info.init") \
> __aligned(sizeof(unsigned long))
>
> -extern int lsm_inode_alloc(struct inode *inode);
> +/* DO NOT tamper with these variables outside of the LSM framework */
> +extern char *lsm_names;
> extern struct lsm_static_calls_table static_calls_table __ro_after_init;
> +extern struct lsm_info __start_lsm_info[], __end_lsm_info[];
> +extern struct lsm_info __start_early_lsm_info[], __end_early_lsm_info[];
> +
> +/**
> + * lsm_get_xattr_slot - Return the next available slot and increment the index
> + * @xattrs: array storing LSM-provided xattrs
> + * @xattr_count: number of already stored xattrs (updated)
> + *
> + * Retrieve the first available slot in the @xattrs array to fill with an xattr,
> + * and increment @xattr_count.
> + *
> + * Return: The slot to fill in @xattrs if non-NULL, NULL otherwise.
> + */
> +static inline struct xattr *lsm_get_xattr_slot(struct xattr *xattrs,
> + int *xattr_count)
> +{
> + if (unlikely(!xattrs))
> + return NULL;
> + return &xattrs[(*xattr_count)++];
> +}
>
> #endif /* ! __LINUX_LSM_HOOKS_H */
> diff --git a/security/security.c b/security/security.c
> index 780b84f5d09c..7ac6765f9260 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -764,7 +764,7 @@ static int lsm_file_alloc(struct file *file)
> *
> * Returns 0, or -ENOMEM if memory can't be allocated.
> */
> -int lsm_inode_alloc(struct inode *inode)
> +static int lsm_inode_alloc(struct inode *inode)
> {
> if (!lsm_inode_cache) {
> inode->i_security = NULL;
More information about the Linux-security-module-archive
mailing list