SELinux Security Module development
 help / color / mirror / Atom feed
* [PATCH v2] libsepol: policydb_read(): use a static string for policydb_str
@ 2026-04-03  6:53 Rahul Sandhu
  2026-04-03  6:56 ` [PATCH v3] " Rahul Sandhu
  0 siblings, 1 reply; 6+ messages in thread
From: Rahul Sandhu @ 2026-04-03  6:53 UTC (permalink / raw)
  To: selinux; +Cc: Rahul Sandhu, Rahul Sandhu

From: Rahul Sandhu <nvraxn@gmail.com>

We know the maximum possible size of policydb_str at compile time; it's
POLICYDB_STRING_MAX_LENGTH + 1 (with + 1 accounting for the null term).
As POLICYDB_STRING_MAX_LENGTH is trivially small, make it a static str,
avoiding an extra allocation.

Signed-off-by: Rahul Sandhu <nvraxn@posteo.uk>
---
 libsepol/src/policydb.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
index 9760b164..8d290d86 100644
--- a/libsepol/src/policydb.c
+++ b/libsepol/src/policydb.c
@@ -4192,7 +4192,7 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 	unsigned int i, j, r_policyvers;
 	uint32_t buf[5], nprim;
 	size_t len, nel;
-	char *policydb_str;
+	char policydb_str[POLICYDB_STRING_MAX_LENGTH + 1];
 	const struct policydb_compat_info *info;
 	unsigned int policy_type, bufindex;
 	ebitmap_node_t *tnode;
@@ -4222,16 +4222,9 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 		return POLICYDB_ERROR;
 	}
 
-	policydb_str = malloc(len + 1);
-	if (!policydb_str) {
-		ERR(fp->handle, "unable to allocate memory for policydb "
-		    "string of length %zu", len);
-		return POLICYDB_ERROR;
-	}
 	rc = next_entry(policydb_str, fp, len);
 	if (rc < 0) {
 		ERR(fp->handle, "truncated policydb string identifier");
-		free(policydb_str);
 		return POLICYDB_ERROR;
 	}
 	policydb_str[len] = 0;
@@ -4248,22 +4241,16 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 		if (i == POLICYDB_TARGET_SZ) {
 			ERR(fp->handle, "cannot find a valid target for policy "
 				"string %s", policydb_str);
-			free(policydb_str);
 			return POLICYDB_ERROR;
 		}
 	} else {
 		if (strcmp(policydb_str, POLICYDB_MOD_STRING)) {
 			ERR(fp->handle, "invalid string identifier %s",
 				policydb_str);
-			free(policydb_str);
 			return POLICYDB_ERROR;
 		}
 	}
 
-	/* Done with policydb_str. */
-	free(policydb_str);
-	policydb_str = NULL;
-
 	/* Read the version, config, and table sizes (and policy type if it's a module). */
 	if (policy_type == POLICY_KERN)
 		nel = 4;
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v3] libsepol: policydb_read(): use a static string for policydb_str
  2026-04-03  6:53 [PATCH v2] libsepol: policydb_read(): use a static string for policydb_str Rahul Sandhu
@ 2026-04-03  6:56 ` Rahul Sandhu
  2026-04-03  6:58   ` Rahul Sandhu
                     ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Rahul Sandhu @ 2026-04-03  6:56 UTC (permalink / raw)
  To: nvraxn; +Cc: nvraxn, selinux

We know the maximum possible size of policydb_str at compile time; it's
POLICYDB_STRING_MAX_LENGTH + 1 (with + 1 accounting for the null term).
As POLICYDB_STRING_MAX_LENGTH is trivially small, make it a static str,
avoiding an extra allocation.

Signed-off-by: Rahul Sandhu <nvraxn@posteo.uk>
---
 libsepol/src/policydb.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

v3: fix authorship mess

diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
index 9760b164..8d290d86 100644
--- a/libsepol/src/policydb.c
+++ b/libsepol/src/policydb.c
@@ -4192,7 +4192,7 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 	unsigned int i, j, r_policyvers;
 	uint32_t buf[5], nprim;
 	size_t len, nel;
-	char *policydb_str;
+	char policydb_str[POLICYDB_STRING_MAX_LENGTH + 1];
 	const struct policydb_compat_info *info;
 	unsigned int policy_type, bufindex;
 	ebitmap_node_t *tnode;
@@ -4222,16 +4222,9 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 		return POLICYDB_ERROR;
 	}
 
-	policydb_str = malloc(len + 1);
-	if (!policydb_str) {
-		ERR(fp->handle, "unable to allocate memory for policydb "
-		    "string of length %zu", len);
-		return POLICYDB_ERROR;
-	}
 	rc = next_entry(policydb_str, fp, len);
 	if (rc < 0) {
 		ERR(fp->handle, "truncated policydb string identifier");
-		free(policydb_str);
 		return POLICYDB_ERROR;
 	}
 	policydb_str[len] = 0;
@@ -4248,22 +4241,16 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 		if (i == POLICYDB_TARGET_SZ) {
 			ERR(fp->handle, "cannot find a valid target for policy "
 				"string %s", policydb_str);
-			free(policydb_str);
 			return POLICYDB_ERROR;
 		}
 	} else {
 		if (strcmp(policydb_str, POLICYDB_MOD_STRING)) {
 			ERR(fp->handle, "invalid string identifier %s",
 				policydb_str);
-			free(policydb_str);
 			return POLICYDB_ERROR;
 		}
 	}
 
-	/* Done with policydb_str. */
-	free(policydb_str);
-	policydb_str = NULL;
-
 	/* Read the version, config, and table sizes (and policy type if it's a module). */
 	if (policy_type == POLICY_KERN)
 		nel = 4;
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] libsepol: policydb_read(): use a static string for policydb_str
  2026-04-03  6:56 ` [PATCH v3] " Rahul Sandhu
@ 2026-04-03  6:58   ` Rahul Sandhu
  2026-04-24 20:40   ` Rahul Sandhu
  2026-05-12 19:14   ` James Carter
  2 siblings, 0 replies; 6+ messages in thread
From: Rahul Sandhu @ 2026-04-03  6:58 UTC (permalink / raw)
  To: Rahul Sandhu; +Cc: selinux

And from this side, not an impersonator, I have a new email address now.

(And the patch _should_(?) be signed with my gpg key...)

Rahul

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] libsepol: policydb_read(): use a static string for policydb_str
  2026-04-03  6:56 ` [PATCH v3] " Rahul Sandhu
  2026-04-03  6:58   ` Rahul Sandhu
@ 2026-04-24 20:40   ` Rahul Sandhu
  2026-05-12 19:14   ` James Carter
  2 siblings, 0 replies; 6+ messages in thread
From: Rahul Sandhu @ 2026-04-24 20:40 UTC (permalink / raw)
  To: nvraxn; +Cc: selinux


Ping

On Fri Apr 03, 2026 at 07:56 AM BST, Rahul Sandhu wrote:
> We know the maximum possible size of policydb_str at compile time; it's
> POLICYDB_STRING_MAX_LENGTH + 1 (with + 1 accounting for the null term).
> As POLICYDB_STRING_MAX_LENGTH is trivially small, make it a static str,
> avoiding an extra allocation.
>
> Signed-off-by: Rahul Sandhu <nvraxn@posteo.uk>
> ---
>  libsepol/src/policydb.c | 15 +--------------
>  1 file changed, 1 insertion(+), 14 deletions(-)
>
> v3: fix authorship mess
>
> diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
> index 9760b164..8d290d86 100644
> --- a/libsepol/src/policydb.c
> +++ b/libsepol/src/policydb.c
> @@ -4192,7 +4192,7 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
>  	unsigned int i, j, r_policyvers;
>  	uint32_t buf[5], nprim;
>  	size_t len, nel;
> -	char *policydb_str;
> +	char policydb_str[POLICYDB_STRING_MAX_LENGTH + 1];
>  	const struct policydb_compat_info *info;
>  	unsigned int policy_type, bufindex;
>  	ebitmap_node_t *tnode;
> @@ -4222,16 +4222,9 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
>  		return POLICYDB_ERROR;
>  	}
>  
> -	policydb_str = malloc(len + 1);
> -	if (!policydb_str) {
> -		ERR(fp->handle, "unable to allocate memory for policydb "
> -		    "string of length %zu", len);
> -		return POLICYDB_ERROR;
> -	}
>  	rc = next_entry(policydb_str, fp, len);
>  	if (rc < 0) {
>  		ERR(fp->handle, "truncated policydb string identifier");
> -		free(policydb_str);
>  		return POLICYDB_ERROR;
>  	}
>  	policydb_str[len] = 0;
> @@ -4248,22 +4241,16 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
>  		if (i == POLICYDB_TARGET_SZ) {
>  			ERR(fp->handle, "cannot find a valid target for policy "
>  				"string %s", policydb_str);
> -			free(policydb_str);
>  			return POLICYDB_ERROR;
>  		}
>  	} else {
>  		if (strcmp(policydb_str, POLICYDB_MOD_STRING)) {
>  			ERR(fp->handle, "invalid string identifier %s",
>  				policydb_str);
> -			free(policydb_str);
>  			return POLICYDB_ERROR;
>  		}
>  	}
>  
> -	/* Done with policydb_str. */
> -	free(policydb_str);
> -	policydb_str = NULL;
> -
>  	/* Read the version, config, and table sizes (and policy type if it's a module). */
>  	if (policy_type == POLICY_KERN)
>  		nel = 4;

-- 
Rahul Sandhu

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] libsepol: policydb_read(): use a static string for policydb_str
  2026-04-03  6:56 ` [PATCH v3] " Rahul Sandhu
  2026-04-03  6:58   ` Rahul Sandhu
  2026-04-24 20:40   ` Rahul Sandhu
@ 2026-05-12 19:14   ` James Carter
  2026-05-13 13:57     ` James Carter
  2 siblings, 1 reply; 6+ messages in thread
From: James Carter @ 2026-05-12 19:14 UTC (permalink / raw)
  To: Rahul Sandhu; +Cc: nvraxn, selinux

On Fri, Apr 3, 2026 at 2:56 AM Rahul Sandhu <nvraxn@posteo.uk> wrote:
>
> We know the maximum possible size of policydb_str at compile time; it's
> POLICYDB_STRING_MAX_LENGTH + 1 (with + 1 accounting for the null term).
> As POLICYDB_STRING_MAX_LENGTH is trivially small, make it a static str,
> avoiding an extra allocation.
>
> Signed-off-by: Rahul Sandhu <nvraxn@posteo.uk>

Acked-by: James Carter <jwcart2@gmail.com>

> ---
>  libsepol/src/policydb.c | 15 +--------------
>  1 file changed, 1 insertion(+), 14 deletions(-)
>
> v3: fix authorship mess
>
> diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
> index 9760b164..8d290d86 100644
> --- a/libsepol/src/policydb.c
> +++ b/libsepol/src/policydb.c
> @@ -4192,7 +4192,7 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
>         unsigned int i, j, r_policyvers;
>         uint32_t buf[5], nprim;
>         size_t len, nel;
> -       char *policydb_str;
> +       char policydb_str[POLICYDB_STRING_MAX_LENGTH + 1];
>         const struct policydb_compat_info *info;
>         unsigned int policy_type, bufindex;
>         ebitmap_node_t *tnode;
> @@ -4222,16 +4222,9 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
>                 return POLICYDB_ERROR;
>         }
>
> -       policydb_str = malloc(len + 1);
> -       if (!policydb_str) {
> -               ERR(fp->handle, "unable to allocate memory for policydb "
> -                   "string of length %zu", len);
> -               return POLICYDB_ERROR;
> -       }
>         rc = next_entry(policydb_str, fp, len);
>         if (rc < 0) {
>                 ERR(fp->handle, "truncated policydb string identifier");
> -               free(policydb_str);
>                 return POLICYDB_ERROR;
>         }
>         policydb_str[len] = 0;
> @@ -4248,22 +4241,16 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
>                 if (i == POLICYDB_TARGET_SZ) {
>                         ERR(fp->handle, "cannot find a valid target for policy "
>                                 "string %s", policydb_str);
> -                       free(policydb_str);
>                         return POLICYDB_ERROR;
>                 }
>         } else {
>                 if (strcmp(policydb_str, POLICYDB_MOD_STRING)) {
>                         ERR(fp->handle, "invalid string identifier %s",
>                                 policydb_str);
> -                       free(policydb_str);
>                         return POLICYDB_ERROR;
>                 }
>         }
>
> -       /* Done with policydb_str. */
> -       free(policydb_str);
> -       policydb_str = NULL;
> -
>         /* Read the version, config, and table sizes (and policy type if it's a module). */
>         if (policy_type == POLICY_KERN)
>                 nel = 4;
> --
> 2.53.0
>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] libsepol: policydb_read(): use a static string for policydb_str
  2026-05-12 19:14   ` James Carter
@ 2026-05-13 13:57     ` James Carter
  0 siblings, 0 replies; 6+ messages in thread
From: James Carter @ 2026-05-13 13:57 UTC (permalink / raw)
  To: Rahul Sandhu; +Cc: nvraxn, selinux

On Tue, May 12, 2026 at 3:14 PM James Carter <jwcart2@gmail.com> wrote:
>
> On Fri, Apr 3, 2026 at 2:56 AM Rahul Sandhu <nvraxn@posteo.uk> wrote:
> >
> > We know the maximum possible size of policydb_str at compile time; it's
> > POLICYDB_STRING_MAX_LENGTH + 1 (with + 1 accounting for the null term).
> > As POLICYDB_STRING_MAX_LENGTH is trivially small, make it a static str,
> > avoiding an extra allocation.
> >
> > Signed-off-by: Rahul Sandhu <nvraxn@posteo.uk>
>
> Acked-by: James Carter <jwcart2@gmail.com>
>

Merged.
Thanks,
Jim

> > ---
> >  libsepol/src/policydb.c | 15 +--------------
> >  1 file changed, 1 insertion(+), 14 deletions(-)
> >
> > v3: fix authorship mess
> >
> > diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
> > index 9760b164..8d290d86 100644
> > --- a/libsepol/src/policydb.c
> > +++ b/libsepol/src/policydb.c
> > @@ -4192,7 +4192,7 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
> >         unsigned int i, j, r_policyvers;
> >         uint32_t buf[5], nprim;
> >         size_t len, nel;
> > -       char *policydb_str;
> > +       char policydb_str[POLICYDB_STRING_MAX_LENGTH + 1];
> >         const struct policydb_compat_info *info;
> >         unsigned int policy_type, bufindex;
> >         ebitmap_node_t *tnode;
> > @@ -4222,16 +4222,9 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
> >                 return POLICYDB_ERROR;
> >         }
> >
> > -       policydb_str = malloc(len + 1);
> > -       if (!policydb_str) {
> > -               ERR(fp->handle, "unable to allocate memory for policydb "
> > -                   "string of length %zu", len);
> > -               return POLICYDB_ERROR;
> > -       }
> >         rc = next_entry(policydb_str, fp, len);
> >         if (rc < 0) {
> >                 ERR(fp->handle, "truncated policydb string identifier");
> > -               free(policydb_str);
> >                 return POLICYDB_ERROR;
> >         }
> >         policydb_str[len] = 0;
> > @@ -4248,22 +4241,16 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
> >                 if (i == POLICYDB_TARGET_SZ) {
> >                         ERR(fp->handle, "cannot find a valid target for policy "
> >                                 "string %s", policydb_str);
> > -                       free(policydb_str);
> >                         return POLICYDB_ERROR;
> >                 }
> >         } else {
> >                 if (strcmp(policydb_str, POLICYDB_MOD_STRING)) {
> >                         ERR(fp->handle, "invalid string identifier %s",
> >                                 policydb_str);
> > -                       free(policydb_str);
> >                         return POLICYDB_ERROR;
> >                 }
> >         }
> >
> > -       /* Done with policydb_str. */
> > -       free(policydb_str);
> > -       policydb_str = NULL;
> > -
> >         /* Read the version, config, and table sizes (and policy type if it's a module). */
> >         if (policy_type == POLICY_KERN)
> >                 nel = 4;
> > --
> > 2.53.0
> >
> >

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-05-13 13:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-03  6:53 [PATCH v2] libsepol: policydb_read(): use a static string for policydb_str Rahul Sandhu
2026-04-03  6:56 ` [PATCH v3] " Rahul Sandhu
2026-04-03  6:58   ` Rahul Sandhu
2026-04-24 20:40   ` Rahul Sandhu
2026-05-12 19:14   ` James Carter
2026-05-13 13:57     ` James Carter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox