[V2] libselinux: Fix security_get_boolean_names build error
diff mbox series

Message ID 20190708133701.32317-1-richard_c_haines@btinternet.com
State Accepted
Headers show
Series
  • [V2] libselinux: Fix security_get_boolean_names build error
Related show

Commit Message

Richard Haines July 8, 2019, 1:37 p.m. UTC
When running 'make' from libselinux on Fedora 30 (gcc 9.1.1) the
following error is reported:

bute=const -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wstrict-overflow=5
-I../include -D_GNU_SOURCE  -DNO_ANDROID_BACKEND  -c -o booleans.o
booleans.c
booleans.c: In function ‘security_get_boolean_names’:
booleans.c:39:5: error: assuming signed overflow does not occur when
changing X +- C1 cmp C2 to X cmp C2 -+ C1 [-Werror=strict-overflow]
  39 | int security_get_boolean_names(char ***names, int *len)
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:171: booleans.o] Error 1

This is caused by the '--i' in the: 'for (--i; i >= 0; --i)' loop.

Signed-off-by: Richard Haines <richard_c_haines@btinternet.com>
---
V2 Change: Simplify the free loop.

 libselinux/src/booleans.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Nicolas Iooss July 21, 2019, 10:53 p.m. UTC | #1
On Mon, Jul 8, 2019 at 3:37 PM Richard Haines
<richard_c_haines@btinternet.com> wrote:
>
> When running 'make' from libselinux on Fedora 30 (gcc 9.1.1) the
> following error is reported:
>
> bute=const -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wstrict-overflow=5
> -I../include -D_GNU_SOURCE  -DNO_ANDROID_BACKEND  -c -o booleans.o
> booleans.c
> booleans.c: In function ‘security_get_boolean_names’:
> booleans.c:39:5: error: assuming signed overflow does not occur when
> changing X +- C1 cmp C2 to X cmp C2 -+ C1 [-Werror=strict-overflow]
>   39 | int security_get_boolean_names(char ***names, int *len)
>       |    ^~~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> make[1]: *** [Makefile:171: booleans.o] Error 1
>
> This is caused by the '--i' in the: 'for (--i; i >= 0; --i)' loop.
>
> Signed-off-by: Richard Haines <richard_c_haines@btinternet.com>

Your patch looks good to me. Sorry for the delay (I had some issues
getting a reliable Internet connection lately, which have been fixed).

Merged, thanks!
Nicolas

> ---
> V2 Change: Simplify the free loop.
>
>  libselinux/src/booleans.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/libselinux/src/booleans.c b/libselinux/src/booleans.c
> index ab1e0754..a9154ce8 100644
> --- a/libselinux/src/booleans.c
> +++ b/libselinux/src/booleans.c
> @@ -81,8 +81,10 @@ int security_get_boolean_names(char ***names, int *len)
>         free(namelist);
>         return rc;
>        bad_freen:
> -       for (--i; i >= 0; --i)
> -               free(n[i]);
> +       if (i > 0) {
> +               while (i >= 1)
> +                       free(n[--i]);
> +       }
>         free(n);
>        bad:
>         goto out;
> --
> 2.21.0
>

Patch
diff mbox series

diff --git a/libselinux/src/booleans.c b/libselinux/src/booleans.c
index ab1e0754..a9154ce8 100644
--- a/libselinux/src/booleans.c
+++ b/libselinux/src/booleans.c
@@ -81,8 +81,10 @@  int security_get_boolean_names(char ***names, int *len)
 	free(namelist);
 	return rc;
       bad_freen:
-	for (--i; i >= 0; --i)
-		free(n[i]);
+	if (i > 0) {
+		while (i >= 1)
+			free(n[--i]);
+	}
 	free(n);
       bad:
 	goto out;