From: Daniel Burgener <dburgener@linux.microsoft.com>
To: cgzones@googlemail.com, selinux@vger.kernel.org
Cc: "Paul Moore" <paul@paul-moore.com>,
"Stephen Smalley" <stephen.smalley.work@gmail.com>,
"Ondrej Mosnacek" <omosnace@redhat.com>,
"Jacob Satterfield" <jsatterfield.linux@gmail.com>,
"Eric Suen" <ericsu@linux.microsoft.com>,
"Bram Bonné" <brambonne@google.com>,
"Thiébaud Weksteen" <tweek@google.com>,
"Canfeng Guo" <guocanfeng@uniontech.com>,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 07/22] selinux: use known type instead of void pointer
Date: Mon, 16 Dec 2024 09:36:45 -0500 [thread overview]
Message-ID: <207cc828-d54a-440c-b3fe-da2c2e88270c@linux.microsoft.com> (raw)
In-Reply-To: <20241115133619.114393-7-cgoettsche@seltendoof.de>
On 11/15/2024 8:35 AM, Christian Göttsche wrote:
> From: Christian Göttsche <cgzones@googlemail.com>
>
> Improve type safety and readability by using the known type.
>
> Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
> ---
> security/selinux/ss/avtab.c | 8 +--
> security/selinux/ss/avtab.h | 9 ++--
> security/selinux/ss/conditional.c | 12 ++---
> security/selinux/ss/conditional.h | 6 +--
> security/selinux/ss/ebitmap.c | 4 +-
> security/selinux/ss/ebitmap.h | 5 +-
> security/selinux/ss/policydb.c | 88 +++++++++++++++----------------
> security/selinux/ss/policydb.h | 17 +++---
> 8 files changed, 76 insertions(+), 73 deletions(-)
>
> diff --git a/security/selinux/ss/avtab.c b/security/selinux/ss/avtab.c
> index 8e400dd736b7..23210faaa046 100644
> --- a/security/selinux/ss/avtab.c
> +++ b/security/selinux/ss/avtab.c
> @@ -336,7 +336,7 @@ static const uint16_t spec_order[] = {
> };
> /* clang-format on */
>
> -int avtab_read_item(struct avtab *a, void *fp, struct policydb *pol,
> +int avtab_read_item(struct avtab *a, struct policy_file *fp, struct policydb *pol,
> int (*insertf)(struct avtab *a, const struct avtab_key *k,
> const struct avtab_datum *d, void *p),
> void *p)
> @@ -500,7 +500,7 @@ static int avtab_insertf(struct avtab *a, const struct avtab_key *k,
> return avtab_insert(a, k, d);
> }
>
> -int avtab_read(struct avtab *a, void *fp, struct policydb *pol)
> +int avtab_read(struct avtab *a, struct policy_file *fp, struct policydb *pol)
> {
> int rc;
> __le32 buf[1];
> @@ -543,7 +543,7 @@ int avtab_read(struct avtab *a, void *fp, struct policydb *pol)
> goto out;
> }
>
> -int avtab_write_item(struct policydb *p, const struct avtab_node *cur, void *fp)
> +int avtab_write_item(struct policydb *p, const struct avtab_node *cur, struct policy_file *fp)
> {
> __le16 buf16[4];
> __le32 buf32[ARRAY_SIZE(cur->datum.u.xperms->perms.p)];
> @@ -579,7 +579,7 @@ int avtab_write_item(struct policydb *p, const struct avtab_node *cur, void *fp)
> return 0;
> }
>
> -int avtab_write(struct policydb *p, struct avtab *a, void *fp)
> +int avtab_write(struct policydb *p, struct avtab *a, struct policy_file *fp)
> {
> u32 i;
> int rc = 0;
> diff --git a/security/selinux/ss/avtab.h b/security/selinux/ss/avtab.h
> index e10b78e61611..c671b6e909d4 100644
> --- a/security/selinux/ss/avtab.h
> +++ b/security/selinux/ss/avtab.h
> @@ -105,15 +105,16 @@ static inline void avtab_hash_eval(struct avtab *h, const char *tag)
> #endif
>
> struct policydb;
> -int avtab_read_item(struct avtab *a, void *fp, struct policydb *pol,
> +struct policy_file;
> +int avtab_read_item(struct avtab *a, struct policy_file *fp, struct policydb *pol,
> int (*insert)(struct avtab *a, const struct avtab_key *k,
> const struct avtab_datum *d, void *p),
> void *p);
>
> -int avtab_read(struct avtab *a, void *fp, struct policydb *pol);
> +int avtab_read(struct avtab *a, struct policy_file *fp, struct policydb *pol);
> int avtab_write_item(struct policydb *p, const struct avtab_node *cur,
> - void *fp);
> -int avtab_write(struct policydb *p, struct avtab *a, void *fp);
> + struct policy_file *fp);
> +int avtab_write(struct policydb *p, struct avtab *a, struct policy_file *fp);
>
> struct avtab_node *avtab_insert_nonunique(struct avtab *h,
> const struct avtab_key *key,
> diff --git a/security/selinux/ss/conditional.c b/security/selinux/ss/conditional.c
> index 64ba95e40a6f..244dc8279113 100644
> --- a/security/selinux/ss/conditional.c
> +++ b/security/selinux/ss/conditional.c
> @@ -206,7 +206,7 @@ static int bool_isvalid(struct cond_bool_datum *b)
> return 1;
> }
>
> -int cond_read_bool(struct policydb *p, struct symtab *s, void *fp)
> +int cond_read_bool(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct cond_bool_datum *booldatum;
> @@ -323,7 +323,7 @@ static int cond_insertf(struct avtab *a, const struct avtab_key *k,
> return 0;
> }
>
> -static int cond_read_av_list(struct policydb *p, void *fp,
> +static int cond_read_av_list(struct policydb *p, struct policy_file *fp,
> struct cond_av_list *list,
> struct cond_av_list *other)
> {
> @@ -375,7 +375,7 @@ static int expr_node_isvalid(struct policydb *p, struct cond_expr_node *expr)
> return 1;
> }
>
> -static int cond_read_node(struct policydb *p, struct cond_node *node, void *fp)
> +static int cond_read_node(struct policydb *p, struct cond_node *node, struct policy_file *fp)
> {
> __le32 buf[2];
> u32 i, len;
> @@ -415,7 +415,7 @@ static int cond_read_node(struct policydb *p, struct cond_node *node, void *fp)
> return cond_read_av_list(p, fp, &node->false_list, &node->true_list);
> }
>
> -int cond_read_list(struct policydb *p, void *fp)
> +int cond_read_list(struct policydb *p, struct policy_file *fp)
> {
> __le32 buf[1];
> u32 i, len;
> @@ -453,7 +453,7 @@ int cond_write_bool(void *vkey, void *datum, void *ptr)
> char *key = vkey;
> struct cond_bool_datum *booldatum = datum;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> __le32 buf[3];
> u32 len;
> int rc;
> @@ -536,7 +536,7 @@ static int cond_write_node(struct policydb *p, struct cond_node *node,
> return 0;
> }
>
> -int cond_write_list(struct policydb *p, void *fp)
> +int cond_write_list(struct policydb *p, struct policy_file *fp)
> {
> u32 i;
> __le32 buf[1];
> diff --git a/security/selinux/ss/conditional.h b/security/selinux/ss/conditional.h
> index 8827715bad75..468e98ad3ea1 100644
> --- a/security/selinux/ss/conditional.h
> +++ b/security/selinux/ss/conditional.h
> @@ -68,10 +68,10 @@ int cond_destroy_bool(void *key, void *datum, void *p);
>
> int cond_index_bool(void *key, void *datum, void *datap);
>
> -int cond_read_bool(struct policydb *p, struct symtab *s, void *fp);
> -int cond_read_list(struct policydb *p, void *fp);
> +int cond_read_bool(struct policydb *p, struct symtab *s, struct policy_file *fp);
> +int cond_read_list(struct policydb *p, struct policy_file *fp);
> int cond_write_bool(void *key, void *datum, void *ptr);
> -int cond_write_list(struct policydb *p, void *fp);
> +int cond_write_list(struct policydb *p, struct policy_file *fp);
>
> void cond_compute_av(struct avtab *ctab, struct avtab_key *key,
> struct av_decision *avd, struct extended_perms *xperms);
> diff --git a/security/selinux/ss/ebitmap.c b/security/selinux/ss/ebitmap.c
> index 99c01be15115..cd84357db2c4 100644
> --- a/security/selinux/ss/ebitmap.c
> +++ b/security/selinux/ss/ebitmap.c
> @@ -360,7 +360,7 @@ void ebitmap_destroy(struct ebitmap *e)
> e->node = NULL;
> }
>
> -int ebitmap_read(struct ebitmap *e, void *fp)
> +int ebitmap_read(struct ebitmap *e, struct policy_file *fp)
> {
> struct ebitmap_node *n = NULL;
> u32 mapunit, count, startbit, index, i;
> @@ -478,7 +478,7 @@ int ebitmap_read(struct ebitmap *e, void *fp)
> goto out;
> }
>
> -int ebitmap_write(const struct ebitmap *e, void *fp)
> +int ebitmap_write(const struct ebitmap *e, struct policy_file *fp)
> {
> struct ebitmap_node *n;
> u32 bit, count, last_bit, last_startbit;
> diff --git a/security/selinux/ss/ebitmap.h b/security/selinux/ss/ebitmap.h
> index ba2ac3da1153..e0150695566c 100644
> --- a/security/selinux/ss/ebitmap.h
> +++ b/security/selinux/ss/ebitmap.h
> @@ -129,8 +129,9 @@ int ebitmap_contains(const struct ebitmap *e1, const struct ebitmap *e2,
> int ebitmap_get_bit(const struct ebitmap *e, u32 bit);
> int ebitmap_set_bit(struct ebitmap *e, u32 bit, int value);
> void ebitmap_destroy(struct ebitmap *e);
> -int ebitmap_read(struct ebitmap *e, void *fp);
> -int ebitmap_write(const struct ebitmap *e, void *fp);
> +struct policy_file;
> +int ebitmap_read(struct ebitmap *e, struct policy_file *fp);
> +int ebitmap_write(const struct ebitmap *e, struct policy_file *fp);
> u32 ebitmap_hash(const struct ebitmap *e, u32 hash);
>
> #ifdef CONFIG_NETLABEL
> diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
> index d04d9ada3835..e94ecb81c6d3 100644
> --- a/security/selinux/ss/policydb.c
> +++ b/security/selinux/ss/policydb.c
> @@ -994,7 +994,7 @@ int policydb_context_isvalid(struct policydb *p, struct context *c)
> * Read a MLS range structure from a policydb binary
> * representation file.
> */
> -static int mls_read_range_helper(struct mls_range *r, void *fp)
> +static int mls_read_range_helper(struct mls_range *r, struct policy_file *fp)
> {
> __le32 buf[2];
> u32 items;
> @@ -1054,7 +1054,7 @@ static int mls_read_range_helper(struct mls_range *r, void *fp)
> * from a policydb binary representation file.
> */
> static int context_read_and_validate(struct context *c, struct policydb *p,
> - void *fp)
> + struct policy_file *fp)
> {
> __le32 buf[3];
> int rc;
> @@ -1092,7 +1092,7 @@ static int context_read_and_validate(struct context *c, struct policydb *p,
> * binary representation file.
> */
>
> -static int str_read(char **strp, gfp_t flags, void *fp, u32 len)
> +static int str_read(char **strp, gfp_t flags, struct policy_file *fp, u32 len)
> {
> int rc;
> char *str;
> @@ -1115,7 +1115,7 @@ static int str_read(char **strp, gfp_t flags, void *fp, u32 len)
> return 0;
> }
>
> -static int perm_read(struct policydb *p, struct symtab *s, void *fp)
> +static int perm_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct perm_datum *perdatum;
> @@ -1148,7 +1148,7 @@ static int perm_read(struct policydb *p, struct symtab *s, void *fp)
> return rc;
> }
>
> -static int common_read(struct policydb *p, struct symtab *s, void *fp)
> +static int common_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct common_datum *comdatum;
> @@ -1200,7 +1200,7 @@ static void type_set_init(struct type_set *t)
> ebitmap_init(&t->negset);
> }
>
> -static int type_set_read(struct type_set *t, void *fp)
> +static int type_set_read(struct type_set *t, struct policy_file *fp)
> {
> __le32 buf[1];
> int rc;
> @@ -1219,7 +1219,7 @@ static int type_set_read(struct type_set *t, void *fp)
> }
>
> static int read_cons_helper(struct policydb *p, struct constraint_node **nodep,
> - u32 ncons, int allowxtarget, void *fp)
> + u32 ncons, int allowxtarget, struct policy_file *fp)
> {
> struct constraint_node *c, *lc;
> struct constraint_expr *e, *le;
> @@ -1313,7 +1313,7 @@ static int read_cons_helper(struct policydb *p, struct constraint_node **nodep,
> return 0;
> }
>
> -static int class_read(struct policydb *p, struct symtab *s, void *fp)
> +static int class_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct class_datum *cladatum;
> @@ -1410,7 +1410,7 @@ static int class_read(struct policydb *p, struct symtab *s, void *fp)
> return rc;
> }
>
> -static int role_read(struct policydb *p, struct symtab *s, void *fp)
> +static int role_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct role_datum *role;
> @@ -1467,7 +1467,7 @@ static int role_read(struct policydb *p, struct symtab *s, void *fp)
> return rc;
> }
>
> -static int type_read(struct policydb *p, struct symtab *s, void *fp)
> +static int type_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct type_datum *typdatum;
> @@ -1519,7 +1519,7 @@ static int type_read(struct policydb *p, struct symtab *s, void *fp)
> * Read a MLS level structure from a policydb binary
> * representation file.
> */
> -static int mls_read_level(struct mls_level *lp, void *fp)
> +static int mls_read_level(struct mls_level *lp, struct policy_file *fp)
> {
> __le32 buf[1];
> int rc;
> @@ -1541,7 +1541,7 @@ static int mls_read_level(struct mls_level *lp, void *fp)
> return 0;
> }
>
> -static int user_read(struct policydb *p, struct symtab *s, void *fp)
> +static int user_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct user_datum *usrdatum;
> @@ -1592,7 +1592,7 @@ static int user_read(struct policydb *p, struct symtab *s, void *fp)
> return rc;
> }
>
> -static int sens_read(struct policydb *p, struct symtab *s, void *fp)
> +static int sens_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct level_datum *levdatum;
> @@ -1633,7 +1633,7 @@ static int sens_read(struct policydb *p, struct symtab *s, void *fp)
> return rc;
> }
>
> -static int cat_read(struct policydb *p, struct symtab *s, void *fp)
> +static int cat_read(struct policydb *p, struct symtab *s, struct policy_file *fp)
> {
> char *key = NULL;
> struct cat_datum *catdatum;
> @@ -1668,7 +1668,7 @@ static int cat_read(struct policydb *p, struct symtab *s, void *fp)
>
> /* clang-format off */
> static int (*const read_f[SYM_NUM])(struct policydb *p, struct symtab *s,
> - void *fp) = {
> + struct policy_file *fp) = {
> common_read,
> class_read,
> role_read,
> @@ -1838,7 +1838,7 @@ u32 string_to_av_perm(struct policydb *p, u16 tclass, const char *name)
> return 1U << (perdatum->value - 1);
> }
>
> -static int range_read(struct policydb *p, void *fp)
> +static int range_read(struct policydb *p, struct policy_file *fp)
> {
> struct range_trans *rt = NULL;
> struct mls_range *r = NULL;
> @@ -1915,7 +1915,7 @@ static int range_read(struct policydb *p, void *fp)
> return rc;
> }
>
> -static int filename_trans_read_helper_compat(struct policydb *p, void *fp)
> +static int filename_trans_read_helper_compat(struct policydb *p, struct policy_file *fp)
> {
> struct filename_trans_key key, *ft = NULL;
> struct filename_trans_datum *last, *datum = NULL;
> @@ -2000,7 +2000,7 @@ static int filename_trans_read_helper_compat(struct policydb *p, void *fp)
> return rc;
> }
>
> -static int filename_trans_read_helper(struct policydb *p, void *fp)
> +static int filename_trans_read_helper(struct policydb *p, struct policy_file *fp)
> {
> struct filename_trans_key *ft = NULL;
> struct filename_trans_datum **dst, *datum, *first = NULL;
> @@ -2089,7 +2089,7 @@ static int filename_trans_read_helper(struct policydb *p, void *fp)
> return rc;
> }
>
> -static int filename_trans_read(struct policydb *p, void *fp)
> +static int filename_trans_read(struct policydb *p, struct policy_file *fp)
> {
> u32 nel, i;
> __le32 buf[1];
> @@ -2130,7 +2130,7 @@ static int filename_trans_read(struct policydb *p, void *fp)
> return 0;
> }
>
> -static int genfs_read(struct policydb *p, void *fp)
> +static int genfs_read(struct policydb *p, struct policy_file *fp)
> {
> int rc;
> u32 i, j, nel, nel2, len, len2;
> @@ -2244,7 +2244,7 @@ static int genfs_read(struct policydb *p, void *fp)
> }
>
> static int ocontext_read(struct policydb *p,
> - const struct policydb_compat_info *info, void *fp)
> + const struct policydb_compat_info *info, struct policy_file *fp)
> {
> int rc;
> unsigned int i;
> @@ -2441,7 +2441,7 @@ static int ocontext_read(struct policydb *p,
> * Read the configuration data from a policy database binary
> * representation file into a policy database structure.
> */
> -int policydb_read(struct policydb *p, void *fp)
> +int policydb_read(struct policydb *p, struct policy_file *fp)
> {
> struct role_allow *ra, *lra;
> struct role_trans_key *rtk = NULL;
> @@ -2764,7 +2764,7 @@ int policydb_read(struct policydb *p, void *fp)
> * Write a MLS level structure to a policydb binary
> * representation file.
> */
> -static int mls_write_level(struct mls_level *l, void *fp)
> +static int mls_write_level(struct mls_level *l, struct policy_file *fp)
> {
> __le32 buf[1];
> int rc;
> @@ -2785,7 +2785,7 @@ static int mls_write_level(struct mls_level *l, void *fp)
> * Write a MLS range structure to a policydb binary
> * representation file.
> */
> -static int mls_write_range_helper(struct mls_range *r, void *fp)
> +static int mls_write_range_helper(struct mls_range *r, struct policy_file *fp)
> {
> __le32 buf[3];
> size_t items;
> @@ -2825,7 +2825,7 @@ static int sens_write(void *vkey, void *datum, void *ptr)
> char *key = vkey;
> struct level_datum *levdatum = datum;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> __le32 buf[2];
> size_t len;
> int rc;
> @@ -2853,7 +2853,7 @@ static int cat_write(void *vkey, void *datum, void *ptr)
> char *key = vkey;
> struct cat_datum *catdatum = datum;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> __le32 buf[3];
> size_t len;
> int rc;
> @@ -2878,7 +2878,7 @@ static int role_trans_write_one(void *key, void *datum, void *ptr)
> struct role_trans_key *rtk = key;
> struct role_trans_datum *rtd = datum;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> struct policydb *p = pd->p;
> __le32 buf[3];
> int rc;
> @@ -2898,7 +2898,7 @@ static int role_trans_write_one(void *key, void *datum, void *ptr)
> return 0;
> }
>
> -static int role_trans_write(struct policydb *p, void *fp)
> +static int role_trans_write(struct policydb *p, struct policy_file *fp)
> {
> struct policy_data pd = { .p = p, .fp = fp };
> __le32 buf[1];
> @@ -2912,7 +2912,7 @@ static int role_trans_write(struct policydb *p, void *fp)
> return hashtab_map(&p->role_tr, role_trans_write_one, &pd);
> }
>
> -static int role_allow_write(struct role_allow *r, void *fp)
> +static int role_allow_write(struct role_allow *r, struct policy_file *fp)
> {
> struct role_allow *ra;
> __le32 buf[2];
> @@ -2940,7 +2940,7 @@ static int role_allow_write(struct role_allow *r, void *fp)
> * Write a security context structure
> * to a policydb binary representation file.
> */
> -static int context_write(struct policydb *p, struct context *c, void *fp)
> +static int context_write(struct policydb *p, struct context *c, struct policy_file *fp)
> {
> int rc;
> __le32 buf[3];
> @@ -2993,7 +2993,7 @@ static int common_write(void *vkey, void *datum, void *ptr)
> char *key = vkey;
> struct common_datum *comdatum = datum;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> __le32 buf[4];
> size_t len;
> int rc;
> @@ -3018,7 +3018,7 @@ static int common_write(void *vkey, void *datum, void *ptr)
> return 0;
> }
>
> -static int type_set_write(struct type_set *t, void *fp)
> +static int type_set_write(struct type_set *t, struct policy_file *fp)
> {
> int rc;
> __le32 buf[1];
> @@ -3037,7 +3037,7 @@ static int type_set_write(struct type_set *t, void *fp)
> }
>
> static int write_cons_helper(struct policydb *p, struct constraint_node *node,
> - void *fp)
> + struct policy_file *fp)
> {
> struct constraint_node *c;
> struct constraint_expr *e;
> @@ -3088,7 +3088,7 @@ static int class_write(void *vkey, void *datum, void *ptr)
> char *key = vkey;
> struct class_datum *cladatum = datum;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> struct policydb *p = pd->p;
> struct constraint_node *c;
> __le32 buf[6];
> @@ -3173,7 +3173,7 @@ static int role_write(void *vkey, void *datum, void *ptr)
> char *key = vkey;
> struct role_datum *role = datum;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> struct policydb *p = pd->p;
> __le32 buf[3];
> size_t items, len;
> @@ -3213,7 +3213,7 @@ static int type_write(void *vkey, void *datum, void *ptr)
> struct type_datum *typdatum = datum;
> struct policy_data *pd = ptr;
> struct policydb *p = pd->p;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> __le32 buf[4];
> int rc;
> size_t items, len;
> @@ -3254,7 +3254,7 @@ static int user_write(void *vkey, void *datum, void *ptr)
> struct user_datum *usrdatum = datum;
> struct policy_data *pd = ptr;
> struct policydb *p = pd->p;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> __le32 buf[3];
> size_t items, len;
> int rc;
> @@ -3439,7 +3439,7 @@ static int ocontext_write(struct policydb *p,
> return 0;
> }
>
> -static int genfs_write(struct policydb *p, void *fp)
> +static int genfs_write(struct policydb *p, struct policy_file *fp)
> {
> struct genfs *genfs;
> struct ocontext *c;
> @@ -3497,7 +3497,7 @@ static int range_write_helper(void *key, void *data, void *ptr)
> struct range_trans *rt = key;
> struct mls_range *r = data;
> struct policy_data *pd = ptr;
> - void *fp = pd->fp;
> + struct policy_file *fp = pd->fp;
> struct policydb *p = pd->p;
> int rc;
>
> @@ -3519,7 +3519,7 @@ static int range_write_helper(void *key, void *data, void *ptr)
> return 0;
> }
>
> -static int range_write(struct policydb *p, void *fp)
> +static int range_write(struct policydb *p, struct policy_file *fp)
> {
> __le32 buf[1];
> int rc;
> @@ -3546,7 +3546,7 @@ static int filename_write_helper_compat(void *key, void *data, void *ptr)
> struct filename_trans_key *ft = key;
> struct filename_trans_datum *datum = data;
> struct ebitmap_node *node;
> - void *fp = ptr;
> + struct policy_file *fp = ptr;
> __le32 buf[4];
> int rc;
> u32 bit, len = strlen(ft->name);
> @@ -3583,7 +3583,7 @@ static int filename_write_helper(void *key, void *data, void *ptr)
> {
> struct filename_trans_key *ft = key;
> struct filename_trans_datum *datum;
> - void *fp = ptr;
> + struct policy_file *fp = ptr;
> __le32 buf[3];
> int rc;
> u32 ndatum, len = strlen(ft->name);
> @@ -3628,7 +3628,7 @@ static int filename_write_helper(void *key, void *data, void *ptr)
> return 0;
> }
>
> -static int filename_trans_write(struct policydb *p, void *fp)
> +static int filename_trans_write(struct policydb *p, struct policy_file *fp)
> {
> __le32 buf[1];
> int rc;
> @@ -3660,7 +3660,7 @@ static int filename_trans_write(struct policydb *p, void *fp)
> * structure to a policy database binary representation
> * file.
> */
> -int policydb_write(struct policydb *p, void *fp)
> +int policydb_write(struct policydb *p, struct policy_file *fp)
> {
> unsigned int num_syms;
> int rc;
> diff --git a/security/selinux/ss/policydb.h b/security/selinux/ss/policydb.h
> index 5c11069121d3..985f319e2266 100644
> --- a/security/selinux/ss/policydb.h
> +++ b/security/selinux/ss/policydb.h
> @@ -318,8 +318,14 @@ extern int policydb_context_isvalid(struct policydb *p, struct context *c);
> extern int policydb_class_isvalid(struct policydb *p, unsigned int class);
> extern int policydb_type_isvalid(struct policydb *p, unsigned int type);
> extern int policydb_role_isvalid(struct policydb *p, unsigned int role);
> -extern int policydb_read(struct policydb *p, void *fp);
> -extern int policydb_write(struct policydb *p, void *fp);
> +
> +struct policy_file {
> + char *data;
> + size_t len;
> +};
> +
> +extern int policydb_read(struct policydb *p, struct policy_file *fp);
> +extern int policydb_write(struct policydb *p, struct policy_file *fp);
nit: It feels weird to me to have the struct definition break up the
policydb_*() declarations like this. I feel as though the file scans
more cleanly if the policy_file struct definition is directly below the
policydb struct definition, keeping the policydb_*() functions all together.
>
> extern struct filename_trans_datum *
> policydb_filenametr_search(struct policydb *p, struct filename_trans_key *key);
> @@ -342,14 +348,9 @@ policydb_roletr_search(struct policydb *p, struct role_trans_key *key);
> #define POLICYDB_MAGIC SELINUX_MAGIC
> #define POLICYDB_STRING "SE Linux"
>
> -struct policy_file {
> - char *data;
> - size_t len;
> -};
> -
> struct policy_data {
> struct policydb *p;
> - void *fp;
> + struct policy_file *fp;
> };
>
> static inline int next_entry(void *buf, struct policy_file *fp, size_t bytes)
next prev parent reply other threads:[~2024-12-16 14:36 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-15 13:35 [RFC PATCH 01/22] selinux: supply missing field initializers Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 02/22] selinux: avoid using types indicating user space interaction Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 03/22] selinux: align and constify functions Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 04/22] selinux: rework match_ipv6_addrmask() Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 05/22] selinux: avoid nontransitive comparison Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 06/22] selinux: rename comparison functions for clarity Christian Göttsche
2024-12-16 14:28 ` Daniel Burgener
2024-11-15 13:35 ` [RFC PATCH 07/22] selinux: use known type instead of void pointer Christian Göttsche
2024-12-16 14:36 ` Daniel Burgener [this message]
2024-11-15 13:35 ` [RFC PATCH 08/22] selinux: avoid unnecessary indirection in struct level_datum Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 09/22] selinux: make use of str_read() Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 10/22] selinux: use u16 for security classes Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 11/22] selinux: more strict policy parsing Christian Göttsche
2024-12-03 0:34 ` Thiébaud Weksteen
2024-11-15 13:35 ` [RFC PATCH 12/22] selinux: check length fields in policies Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 13/22] selinux: validate constraints Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 14/22] selinux: pre-validate conditional expressions Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 15/22] selinux: introduce ebitmap_highest_set_bit() Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 16/22] selinux: check type attr map overflows Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 17/22] selinux: reorder policydb_index() Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 18/22] selinux: beef up isvalid checks Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 19/22] selinux: validate symbols Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 20/22] selinux: more strict bounds check Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 21/22] selinux: check for simple types Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 22/22] selinux: restrict policy strings Christian Göttsche
2024-12-13 22:14 ` Daniel Burgener
2024-12-16 16:02 ` Christian Göttsche
2024-11-15 13:35 ` [RFC PATCH 00/22] selinux: harden against malformed policies Christian Göttsche
2024-11-18 15:35 ` Daniel Burgener
2024-11-25 17:26 ` Christian Göttsche
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=207cc828-d54a-440c-b3fe-da2c2e88270c@linux.microsoft.com \
--to=dburgener@linux.microsoft.com \
--cc=brambonne@google.com \
--cc=cgzones@googlemail.com \
--cc=ericsu@linux.microsoft.com \
--cc=guocanfeng@uniontech.com \
--cc=jsatterfield.linux@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=omosnace@redhat.com \
--cc=paul@paul-moore.com \
--cc=selinux@vger.kernel.org \
--cc=stephen.smalley.work@gmail.com \
--cc=tweek@google.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.