Message ID | 20190703141255.6321-1-richard_c_haines@btinternet.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | libselinux: Fix security_get_boolean_names build error | expand |
On Wed, Jul 3, 2019 at 5:22 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> > --- > libselinux/src/booleans.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/libselinux/src/booleans.c b/libselinux/src/booleans.c > index ab1e0754..882a5dca 100644 > --- a/libselinux/src/booleans.c > +++ b/libselinux/src/booleans.c > @@ -81,8 +81,13 @@ int security_get_boolean_names(char ***names, int *len) > free(namelist); > return rc; > bad_freen: > - for (--i; i >= 0; --i) > + if (i == 0) > + goto bad_freen1; > + else if (i > 0) > + --i; > + for (; i >= 0; --i) > free(n[i]); > +bad_freen1: > free(n); > bad: > goto out; > -- > 2.21.0 > Hi, Thanks for your patch. It looks more complicated than it should be. Why do you introduce a new label instead of a simpler if statement? For example I think of this code (I have not tested it and it may contain issues): bad_freen: if (i > 0) { for (--i; i >= 0; --i) free(n[i]); } free(n); >From my point of view, this would be easier to maintain. If you have a good reason for using a new goto label, please add some sentences about this in the patch description or/and in a comment next to the modified lines. Thanks, Nicolas
diff --git a/libselinux/src/booleans.c b/libselinux/src/booleans.c index ab1e0754..882a5dca 100644 --- a/libselinux/src/booleans.c +++ b/libselinux/src/booleans.c @@ -81,8 +81,13 @@ int security_get_boolean_names(char ***names, int *len) free(namelist); return rc; bad_freen: - for (--i; i >= 0; --i) + if (i == 0) + goto bad_freen1; + else if (i > 0) + --i; + for (; i >= 0; --i) free(n[i]); +bad_freen1: free(n); bad: goto out;
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> --- libselinux/src/booleans.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)