From bb3f428c081fb7dd61453ce8cc749d1bf9162c94 Mon Sep 17 00:00:00 2001 From: Nicolas Iooss Date: Tue, 11 Apr 2017 23:46:01 +0200 Subject: [PATCH] libselinux: getsebool: always free names When getsebool's main() fails to allocate memory for the boolean names, it returns without freeing variables first, even though other errors do this (with label "out"). This silences a warning reported by clang's static analyzer. Signed-off-by: Nicolas Iooss --- libselinux/utils/getsebool.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libselinux/utils/getsebool.c b/libselinux/utils/getsebool.c index 3c6eba55..36994536 100644 --- a/libselinux/utils/getsebool.c +++ b/libselinux/utils/getsebool.c @@ -15,7 +15,7 @@ static __attribute__ ((__noreturn__)) void usage(const char *progname) int main(int argc, char **argv) { int i, get_all = 0, rc = 0, active, pending, len = 0, opt; - char **names; + char **names = NULL; while ((opt = getopt(argc, argv, "a")) > 0) { switch (opt) { @@ -55,7 +55,7 @@ int main(int argc, char **argv) if (argc < 2) usage(argv[0]); len = argc - 1; - names = malloc(sizeof(char *) * len); + names = calloc(len, sizeof(char *)); if (!names) { fprintf(stderr, "%s: out of memory\n", argv[0]); return 2; @@ -65,7 +65,8 @@ int main(int argc, char **argv) if (!names[i]) { fprintf(stderr, "%s: out of memory\n", argv[0]); - return 2; + rc = 2; + goto out; } } }