* [PATCH 2/2] lsm: fix size queries for getselfattr with NULL buffer [not found] <20260619130305.27779-1-include@grrlz.net> @ 2026-06-19 13:03 ` Bradley Morgan 2026-09-10 19:26 ` Paul Moore 0 siblings, 1 reply; 2+ messages in thread From: Bradley Morgan @ 2026-06-19 13:03 UTC (permalink / raw) To: linux-security-module, bpf Cc: linux-kernel, Bradley Morgan, stable, Paul Moore, James Morris, Serge E. Hallyn, Shuah Khan, linux-kselftest The lsm_get_self_attr() syscall allows callers to pass in a NULL context buffer to find out the size of the output needed. That path still compared the computed entry size against the caller provided size first, so a NULL buffer with size 0 incorrectly returned -E2BIG rather than reporting the required size. Only enforce the available buffer length after checking for the NULL buffer. Cover the zero length sizing query in the self test. Fixes: d7cf3412a9f6 ("lsm: consolidate buffer size handling into lsm_fill_user_ctx()") Cc: stable@vger.kernel.org Signed-off-by: Bradley Morgan <include@grrlz.net> --- security/security.c | 8 ++++---- tools/testing/selftests/lsm/lsm_get_self_attr_test.c | 5 ++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/security/security.c b/security/security.c index 71aea8fdf014..fa0d7e036249 100644 --- a/security/security.c +++ b/security/security.c @@ -406,15 +406,15 @@ int lsm_fill_user_ctx(struct lsm_ctx __user *uctx, u32 *uctx_len, int rc = 0; nctx_len = ALIGN(struct_size(nctx, ctx, val_len), sizeof(void *)); + /* no buffer - return success/0 and set @uctx_len to the req size */ + if (!uctx) + goto out; + if (nctx_len > *uctx_len) { rc = -E2BIG; goto out; } - /* no buffer - return success/0 and set @uctx_len to the req size */ - if (!uctx) - goto out; - nctx = kzalloc(nctx_len, GFP_KERNEL); if (nctx == NULL) { rc = -ENOMEM; diff --git a/tools/testing/selftests/lsm/lsm_get_self_attr_test.c b/tools/testing/selftests/lsm/lsm_get_self_attr_test.c index 60caf8528f81..2f5ababc2b95 100644 --- a/tools/testing/selftests/lsm/lsm_get_self_attr_test.c +++ b/tools/testing/selftests/lsm/lsm_get_self_attr_test.c @@ -39,15 +39,14 @@ TEST(size_null_lsm_get_self_attr) TEST(ctx_null_lsm_get_self_attr) { - const long page_size = sysconf(_SC_PAGESIZE); - __u32 size = page_size; + __u32 size = 0; int rc; rc = lsm_get_self_attr(LSM_ATTR_CURRENT, NULL, &size, 0); if (attr_lsm_count()) { ASSERT_NE(-1, rc); - ASSERT_NE(1, size); + ASSERT_NE(0, size); } else { ASSERT_EQ(-1, rc); } -- 2.53.0 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 2/2] lsm: fix size queries for getselfattr with NULL buffer 2026-06-19 13:03 ` [PATCH 2/2] lsm: fix size queries for getselfattr with NULL buffer Bradley Morgan @ 2026-09-10 19:26 ` Paul Moore 0 siblings, 0 replies; 2+ messages in thread From: Paul Moore @ 2026-09-10 19:26 UTC (permalink / raw) To: Bradley Morgan, linux-security-module, bpf Cc: linux-kernel, Bradley Morgan, stable, James Morris, Serge E. Hallyn, Shuah Khan, linux-kselftest On Jun 19, 2026 Bradley Morgan <include@grrlz.net> wrote: > > The lsm_get_self_attr() syscall allows callers to pass in a NULL context > buffer to find out the size of the output needed. That path still > compared the computed entry size against the caller provided size first, > so a NULL buffer with size 0 incorrectly returned -E2BIG rather than > reporting the required size. > > Only enforce the available buffer length after checking for the NULL > buffer. Cover the zero length sizing query in the self test. > > Fixes: d7cf3412a9f6 ("lsm: consolidate buffer size handling into lsm_fill_user_ctx()") > Cc: stable@vger.kernel.org > Signed-off-by: Bradley Morgan <include@grrlz.net> > --- > security/security.c | 8 ++++---- > tools/testing/selftests/lsm/lsm_get_self_attr_test.c | 5 ++--- > 2 files changed, 6 insertions(+), 7 deletions(-) > > diff --git a/security/security.c b/security/security.c > index 71aea8fdf014..fa0d7e036249 100644 > --- a/security/security.c > +++ b/security/security.c > @@ -406,15 +406,15 @@ int lsm_fill_user_ctx(struct lsm_ctx __user *uctx, u32 *uctx_len, > int rc = 0; > > nctx_len = ALIGN(struct_size(nctx, ctx, val_len), sizeof(void *)); > + /* no buffer - return success/0 and set @uctx_len to the req size */ > + if (!uctx) > + goto out; > + > if (nctx_len > *uctx_len) { > rc = -E2BIG; > goto out; > } > > - /* no buffer - return success/0 and set @uctx_len to the req size */ > - if (!uctx) > - goto out; > - > nctx = kzalloc(nctx_len, GFP_KERNEL); > if (nctx == NULL) { > rc = -ENOMEM; I'm not sure the existing code is necessarily wrong. The existing code allows for an E2BIG length check against the current necessary size, so one can still do a length check regardless of if a buffer is passed. Even in the NULL/E2BIG case, the necessary buffer size should still be returned to the caller so that the process can size their allocation appropriately. Or am I missing something else? -- paul-moore.com ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-10 19:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260619130305.27779-1-include@grrlz.net>
2026-06-19 13:03 ` [PATCH 2/2] lsm: fix size queries for getselfattr with NULL buffer Bradley Morgan
2026-09-10 19:26 ` Paul Moore
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox