From 821e8a07da9cd1bfd125fe0daa55739fa58a7e16 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Mar 2018 14:55:17 -0600 Subject: [PATCH] Silence a false positive from the clang static analyzer. --- plugins/sudoers/cvtsudoers.c | 10 +++++----- plugins/sudoers/gram.c | 18 +++++++++--------- plugins/sudoers/gram.y | 18 +++++++++--------- plugins/sudoers/parse.h | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index db2b4dd1c..c61d09073 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -762,7 +762,7 @@ static void filter_defaults(void) { struct defaults *def, *next; - struct member_list *binding = NULL; + struct member_list *prev_binding = NULL; debug_decl(filter_defaults, SUDOERS_DEBUG_DEFAULTS) TAILQ_FOREACH_SAFE(def, &defaults, entries, next) { @@ -770,17 +770,17 @@ filter_defaults(void) case DEFAULTS_USER: if (!userlist_matches_filter(def->binding)) { TAILQ_REMOVE(&defaults, def, entries); - binding = free_default(def, binding); + free_default(def, &prev_binding); } else { - binding = def->binding; + prev_binding = def->binding; } break; case DEFAULTS_HOST: if (!hostlist_matches_filter(def->binding)) { TAILQ_REMOVE(&defaults, def, entries); - binding = free_default(def, binding); + free_default(def, &prev_binding); } else { - binding = def->binding; + prev_binding = def->binding; } break; default: diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index ba5803745..a88dea3a6 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -871,13 +871,13 @@ free_members(struct member_list *members) debug_return; } -struct member_list * -free_default(struct defaults *def, struct member_list *binding) +void +free_default(struct defaults *def, struct member_list **binding) { debug_decl(free_default, SUDOERS_DEBUG_PARSER) - if (def->binding != binding) { - binding = def->binding; + if (def->binding != *binding) { + *binding = def->binding; free_members(def->binding); free(def->binding); } @@ -886,14 +886,14 @@ free_default(struct defaults *def, struct member_list *binding) free(def->val); free(def); - debug_return_ptr(binding); + debug_return; } void free_privilege(struct privilege *priv) { struct member_list *runasuserlist = NULL, *runasgrouplist = NULL; - struct member_list *binding = NULL; + struct member_list *prev_binding = NULL; struct cmndspec *cs; struct defaults *def; #ifdef HAVE_SELINUX @@ -946,7 +946,7 @@ free_privilege(struct privilege *priv) } while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) { TAILQ_REMOVE(&priv->defaults, def, entries); - binding = free_default(def, binding); + free_default(def, &prev_binding); } free(priv); @@ -983,7 +983,7 @@ free_userspec(struct userspec *us) bool init_parser(const char *path, bool quiet) { - struct member_list *binding = NULL; + struct member_list *prev_binding = NULL; struct defaults *def; struct userspec *us; bool ret = true; @@ -996,7 +996,7 @@ init_parser(const char *path, bool quiet) TAILQ_INIT(&userspecs); TAILQ_FOREACH_SAFE(def, &defaults, entries, next) { - binding = free_default(def, binding); + free_default(def, &prev_binding); } TAILQ_INIT(&defaults); diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 59f40b25e..a6556ec47 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -1099,13 +1099,13 @@ free_members(struct member_list *members) debug_return; } -struct member_list * -free_default(struct defaults *def, struct member_list *binding) +void +free_default(struct defaults *def, struct member_list **binding) { debug_decl(free_default, SUDOERS_DEBUG_PARSER) - if (def->binding != binding) { - binding = def->binding; + if (def->binding != *binding) { + *binding = def->binding; free_members(def->binding); free(def->binding); } @@ -1114,14 +1114,14 @@ free_default(struct defaults *def, struct member_list *binding) free(def->val); free(def); - debug_return_ptr(binding); + debug_return; } void free_privilege(struct privilege *priv) { struct member_list *runasuserlist = NULL, *runasgrouplist = NULL; - struct member_list *binding = NULL; + struct member_list *prev_binding = NULL; struct cmndspec *cs; struct defaults *def; #ifdef HAVE_SELINUX @@ -1174,7 +1174,7 @@ free_privilege(struct privilege *priv) } while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) { TAILQ_REMOVE(&priv->defaults, def, entries); - binding = free_default(def, binding); + free_default(def, &prev_binding); } free(priv); @@ -1211,7 +1211,7 @@ free_userspec(struct userspec *us) bool init_parser(const char *path, bool quiet) { - struct member_list *binding = NULL; + struct member_list *prev_binding = NULL; struct defaults *def; struct userspec *us; bool ret = true; @@ -1224,7 +1224,7 @@ init_parser(const char *path, bool quiet) TAILQ_INIT(&userspecs); TAILQ_FOREACH_SAFE(def, &defaults, entries, next) { - binding = free_default(def, binding); + free_default(def, &prev_binding); } TAILQ_INIT(&defaults); diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index 1d7770ff0..229cf5a7c 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -269,7 +269,7 @@ void free_member(struct member *m); void free_members(struct member_list *members); void free_privilege(struct privilege *priv); void free_userspec(struct userspec *us); -struct member_list *free_default(struct defaults *def, struct member_list *binding); +void free_default(struct defaults *def, struct member_list **binding); /* match_addr.c */ bool addr_matches(char *n); -- 2.40.0