Messages in this thread | | | Date | Fri, 30 Jun 2023 10:11:42 -0700 | Subject | Re: [PATCH v12 7/11] LSM: Helpers for attribute names and filling lsm_ctx | From | Casey Schaufler <> |
| |
On 6/29/2023 7:14 PM, Paul Moore wrote: > On Jun 29, 2023 Casey Schaufler <casey@schaufler-ca.com> wrote: >> Add lsm_name_to_attr(), which translates a text string to a >> LSM_ATTR value if one is available. >> >> Add lsm_fill_user_ctx(), which fills a struct lsm_ctx, including >> the trailing attribute value. >> >> All are used in module specific components of LSM system calls. >> >> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com> >> Reviewed-by: Serge Hallyn <serge@hallyn.com> >> --- >> include/linux/security.h | 14 +++++++++++++ >> security/lsm_syscalls.c | 24 ++++++++++++++++++++++ >> security/security.c | 44 ++++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 82 insertions(+) > .. > >> diff --git a/security/security.c b/security/security.c >> index 199db23581f1..72ad7197b2c9 100644 >> --- a/security/security.c >> +++ b/security/security.c >> @@ -770,6 +770,50 @@ static int lsm_superblock_alloc(struct super_block *sb) >> return 0; >> } >> >> +/** >> + * lsm_fill_user_ctx - Fill a user space lsm_ctx structure >> + * @ctx: an LSM context to be filled >> + * @context: the new context value >> + * @context_size: the size of the new context value >> + * @id: LSM id >> + * @flags: LSM defined flags >> + * >> + * Fill all of the fields in a user space lsm_ctx structure. >> + * Caller is assumed to have verified that @ctx has enough space >> + * for @context. >> + * >> + * The total length is padded to a multiple of 64 bits to >> + * accomodate possible alignment issues. > We should drop the sentence above now that alignment is the caller's > responsibility, but since that was largely my fault I can fix this up > during the merge assuming you're okay with that Casey.
I have to fix the error in patch 8/11 anyway. I can fix this, too.
> >> + * Returns 0 on success, -EFAULT on a copyout error, -ENOMEM >> + * if memory can't be allocated. >> + */ >> +int lsm_fill_user_ctx(struct lsm_ctx __user *ctx, void *context, >> + size_t context_size, u64 id, u64 flags) >> +{ >> + struct lsm_ctx *lctx; >> + size_t locallen = struct_size(lctx, ctx, context_size); >> + int rc = 0; >> + >> + lctx = kzalloc(locallen, GFP_KERNEL); >> + if (lctx == NULL) >> + return -ENOMEM; >> + >> + lctx->id = id; >> + lctx->flags = flags; >> + lctx->ctx_len = context_size; >> + lctx->len = locallen; >> + >> + memcpy(lctx->ctx, context, context_size); >> + >> + if (copy_to_user(ctx, lctx, locallen)) >> + rc = -EFAULT; >> + >> + kfree(lctx); >> + >> + return rc; >> +} >> + >> /* >> * The default value of the LSM hook is defined in linux/lsm_hook_defs.h and >> * can be accessed with: >> -- >> 2.40.1 > -- > paul-moore.com
| |