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 <nicolas.iooss@m4x.org>
This commit is contained in:
Nicolas Iooss 2017-04-11 23:46:01 +02:00 committed by Stephen Smalley
parent a9094fae2c
commit bb3f428c08

View File

@ -15,7 +15,7 @@ static __attribute__ ((__noreturn__)) void usage(const char *progname)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int i, get_all = 0, rc = 0, active, pending, len = 0, opt; int i, get_all = 0, rc = 0, active, pending, len = 0, opt;
char **names; char **names = NULL;
while ((opt = getopt(argc, argv, "a")) > 0) { while ((opt = getopt(argc, argv, "a")) > 0) {
switch (opt) { switch (opt) {
@ -55,7 +55,7 @@ int main(int argc, char **argv)
if (argc < 2) if (argc < 2)
usage(argv[0]); usage(argv[0]);
len = argc - 1; len = argc - 1;
names = malloc(sizeof(char *) * len); names = calloc(len, sizeof(char *));
if (!names) { if (!names) {
fprintf(stderr, "%s: out of memory\n", argv[0]); fprintf(stderr, "%s: out of memory\n", argv[0]);
return 2; return 2;
@ -65,7 +65,8 @@ int main(int argc, char **argv)
if (!names[i]) { if (!names[i]) {
fprintf(stderr, "%s: out of memory\n", fprintf(stderr, "%s: out of memory\n",
argv[0]); argv[0]);
return 2; rc = 2;
goto out;
} }
} }
} }