From: Alejandro Colomar <alx@kernel.org>
To: "Günther Noack" <gnoack3000@gmail.com>
Cc: linux-man@vger.kernel.org,
Michael Kerrisk <mtk.manpages@gmail.com>,
Kuniyuki Iwashima <kuniyu@google.com>,
Casey Schaufler <casey@schaufler-ca.com>
Subject: Re: [PATCH 4/7] man/man7/unix.7: SCM_SECURITY: Generalize to other LSMs, not just SELinux
Date: Tue, 27 Oct 2026 23:59:15 +0100 [thread overview]
Message-ID: <auEr3XGMrHXiVZjs@devuan> (raw)
In-Reply-To: <20261027.421170835581@gnoack.org>
[-- Attachment #1: Type: text/plain, Size: 3332 bytes --]
Hi Günther,
> Date: 2026-10-27 23:30:59+0100
> From: Günther Noack <gnoack3000@gmail.com>
>
> Hello Alejandro!
>
> On Tue, Oct 27, 2026 at 10:46:14PM +0100, Alejandro Colomar wrote:
> > > Date: 2026-10-27 09:54:51+0100
> > > From: Günther Noack <gnoack3000@gmail.com>
> > >
> > > On Mon, Oct 26, 2026 at 11:41:13PM +0100, Günther Noack wrote:
> > > > I'm still leaning towards documenting it as a buffer with
> > > > implementation-defined contents which are provided by a LSM. How
> > > > these buffer contents are interpreted is depending on the LSM in use
> > > > anyway.
> > >
> > > To make a more concrete and constructive wording proposal:
> > >
> > >
> > > SCM_SECURITY
> > >
> > > Receive the security context (the security label) of the peer
> > > socket, as provided by the active Linux Security Module (LSM). The
> > > received ancillary data is a byte buffer.
> > >
> > > The exact format of the security context buffer is defined by the
> > > active major LSM. For example, SELinux returns a SELinux label as a
> > > string (including a terminating null byte).
> >
> > Let's pause the discussion of the specific text for now.
> >
> > I have questions about the exact format used by each LSM. For example,
> > you say that SELinux guarantees a string. Does it count the '\0' as
> > part of the data size? Or is it guaranteed to exist but not counted?
> >
> > Same question for the other LSMs.
>
> Yes, SELinux counts the '\0' as part of the buffer size for the
> SCM_SECURITY security context.
Ok.
>
> Examples:
> * If the label is "foo", it'll return {'f', 'o', 'o', '\0'} with payload size 4.
> * If the reader calls recvmsg() but preallocates too little space in
> the msg_control buffer, this can get truncated though, and then it
> won't end with '\0':
> {'e', 'x', 'a', 'm', 'p'} with payload size 5 (truncated)
Ouch! So, no string guarantees here either, actually.
> Other LSMs:
>
> * Smack excludes the null byte for SCM_SECURITY (smack_to_secctx())
> (but irritatingly it does count the null byte when a label is
> returned through SO_PEERSEC (smack_socket_getpeersec_stream()).
> Both functions are in security/smack/smack_lsm.c.
And as we've seen, no string guarantees, IIUC.
>
> * AppArmor excludes the null byte for SCM_SECURITY as well.
> Implementation is in apparmor_label_to_secctx(), where it populates
> the struct lsm_context *cp using:
>
> len = aa_label_asxprint(&cp->context...)
>
> and then sets
>
> cp->len = len;
>
> The function aa_label_asxprint() returns the length without trailing
> null byte, as can be seen in its implementation.
How does it behave if there's not enough space? Does AppArmor guarantee
a string?
Cheers,
Alex
> SELinux, Smack and AppArmor are the only LSMs that implement the
> secid_to_secctx() hook, which is the hook that defines the payload
> contents. (For reference, the higher level common SCM logic like the
> truncation is in net/core/scm.c.)
>
> All reasoning is based on reading the code (with some AI assistance to
> point me to the right places). I have not tried it out in a running
> system, but it seems to check out.
>
> –Günther
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2026-10-27 22:59 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-21 21:22 [PATCH 0/7] unix.7: Socket Options and SCM_* fixes Günther Noack
2026-10-21 21:22 ` [PATCH 1/7] man/man7/unix.7: ERRORS: ETOOMANYREFS: Fix the conditions Günther Noack
2026-10-22 21:14 ` Alejandro Colomar
2026-10-23 16:50 ` Günther Noack
2026-10-24 4:45 ` Kuniyuki Iwashima
2026-10-21 21:22 ` [PATCH 2/7] man/man7/unix.7: Multiple same-typed SCM_* messages may be sent in one message Günther Noack
2026-10-22 21:28 ` Alejandro Colomar
2026-10-23 17:09 ` Günther Noack
2026-10-21 21:22 ` [PATCH 3/7] man/man7/unix.7: Autobind: Clarify when it happens, and mention SO_PASSPIDFD Günther Noack
2026-10-24 4:57 ` Kuniyuki Iwashima
2026-10-26 21:55 ` Günther Noack
2026-10-27 5:04 ` Kuniyuki Iwashima
2026-10-21 21:22 ` [PATCH 4/7] man/man7/unix.7: SCM_SECURITY: Generalize to other LSMs, not just SELinux Günther Noack
2026-10-23 9:57 ` Alejandro Colomar
2026-10-23 17:57 ` Günther Noack
2026-10-23 18:13 ` Alejandro Colomar
2026-10-26 22:41 ` Günther Noack
2026-10-27 8:54 ` Günther Noack
2026-10-27 21:46 ` Alejandro Colomar
2026-10-27 22:30 ` Günther Noack
2026-10-27 22:59 ` Alejandro Colomar [this message]
2026-10-28 6:19 ` Günther Noack
2026-10-28 12:45 ` Alejandro Colomar
2026-10-27 16:32 ` Casey Schaufler
2026-10-27 21:52 ` Alejandro Colomar
2026-10-21 21:22 ` [PATCH 5/7] man/man7/unix.7: SO_PASSSEC: wfix Günther Noack
2026-10-24 5:02 ` Kuniyuki Iwashima
2026-10-24 8:36 ` Alejandro Colomar
2026-10-26 22:42 ` Günther Noack
2026-10-27 5:05 ` Kuniyuki Iwashima
2026-10-21 21:22 ` [PATCH 6/7] man/man7/unix.7: Document SO_PASSPIDFD, SO_PEERPIDFD, and SCM_PIDFD Günther Noack
2026-10-24 5:22 ` Kuniyuki Iwashima
2026-10-26 23:02 ` Günther Noack
2026-10-27 5:06 ` Kuniyuki Iwashima
2026-10-21 21:22 ` [PATCH 7/7] man/man7/unix.7: Document SO_PASSRIGHTS Günther Noack
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=auEr3XGMrHXiVZjs@devuan \
--to=alx@kernel.org \
--cc=casey@schaufler-ca.com \
--cc=gnoack3000@gmail.com \
--cc=kuniyu@google.com \
--cc=linux-man@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.