Re: [PATCH v2] libselinux: use designated initializers for label initfuncs
James Carter <[email protected]>
| Newsgroups | org.kernel.vger.selinux |
|---|---|
| Message-ID | <CAP+JOzRCkt0AqG-X2-fgBJwz9072i8=F3yG1oCSyb8GazH+REw@mail.gmail.com> |
On Wed, Jul 15, 2026 at 9:05 AM Stephen Smalley <[email protected]> wrote: > > On Tue, Jul 14, 2026 at 7:25 PM Thiébaud Weksteen <[email protected]> wrote: > > > > Previously, the initfuncs array relied on implicit positional ordering > > to match backend context constants (e.g., SELABEL_CTX_FILE). If constants > > were reordered or added, array indexing could become misaligned. > > > > Use C99 designated initializers in initfuncs to explicitly bind each > > initialization function to its corresponding context constant. > > > > Additionally, define _SELABEL_CTX_NUM in include/selinux/label.h > > to count total backends, and add a compile-time static_assert ensuring > > initfuncs stays in sync with _SELABEL_CTX_NUM. > > > > Signed-off-by: Thiébaud Weksteen <[email protected]> > > Acked-by: Stephen Smalley <[email protected]> > Merged. Thanks, Jim > > > --- > > v2: Rebase on selinux/main and format > > > > libselinux/include/selinux/label.h | 5 +++++ > > libselinux/src/label.c | 18 ++++++++++++------ > > 2 files changed, 17 insertions(+), 6 deletions(-) > > > > diff --git a/libselinux/include/selinux/label.h b/libselinux/include/selinux/label.h > > index 748b0db0..bde2501f 100644 > > --- a/libselinux/include/selinux/label.h > > +++ b/libselinux/include/selinux/label.h > > @@ -37,6 +37,11 @@ struct selabel_handle; > > #define SELABEL_CTX_ANDROID_PROP 4 > > /* Android service contexts */ > > #define SELABEL_CTX_ANDROID_SERVICE 5 > > +/* > > + * Total number of context backends. When adding a new backend, > > + * please increase this value. > > + */ > > +#define _SELABEL_CTX_NUM 6 > > > > /* > > * Available options > > diff --git a/libselinux/src/label.c b/libselinux/src/label.c > > index 1ccd1abe..991b9769 100644 > > --- a/libselinux/src/label.c > > +++ b/libselinux/src/label.c > > @@ -4,6 +4,7 @@ > > * Author : Eamon Walsh <[email protected]> > > */ > > > > +#include <assert.h> > > #include <sys/types.h> > > #include <ctype.h> > > #include <errno.h> > > @@ -45,14 +46,19 @@ typedef int (*selabel_initfunc)(struct selabel_handle *rec, > > const struct selinux_opt *opts, unsigned nopts); > > > > static const selabel_initfunc initfuncs[] = { > > - &selabel_file_init, > > - CONFIG_MEDIA_BACKEND(selabel_media_init), > > - CONFIG_X_BACKEND(selabel_x_init), > > - CONFIG_DB_BACKEND(selabel_db_init), > > - CONFIG_ANDROID_BACKEND(selabel_property_init), > > - CONFIG_ANDROID_BACKEND(selabel_service_init), > > + [SELABEL_CTX_FILE] = &selabel_file_init, > > + [SELABEL_CTX_MEDIA] = CONFIG_MEDIA_BACKEND(selabel_media_init), > > + [SELABEL_CTX_X] = CONFIG_X_BACKEND(selabel_x_init), > > + [SELABEL_CTX_DB] = CONFIG_DB_BACKEND(selabel_db_init), > > + [SELABEL_CTX_ANDROID_PROP] = > > + CONFIG_ANDROID_BACKEND(selabel_property_init), > > + [SELABEL_CTX_ANDROID_SERVICE] = > > + CONFIG_ANDROID_BACKEND(selabel_service_init), > > }; > > > > +static_assert(ARRAY_SIZE(initfuncs) == _SELABEL_CTX_NUM, > > + "initfuncs array size does not match _SELABEL_CTX_NUM"); > > + > > static inline struct selabel_digest * > > selabel_is_digest_set(const struct selinux_opt *opts, unsigned n) > > { > > -- > > 2.55.0.229.g6434b31f56-goog > >