Fix a memory leak on malloc() error in sudo_ldap_role_to_priv().

Coverity CID 188804
This commit is contained in:
Todd C. Miller
2018-10-18 15:38:54 -06:00
parent 84ef500061
commit deccfe68f1

View File

@@ -410,23 +410,23 @@ sudo_ldap_role_to_priv(const char *cn, void *hosts, void *runasusers,
#ifdef HAVE_SELINUX #ifdef HAVE_SELINUX
} else if (strcmp(var, "role") == 0 && val != NULL) { } else if (strcmp(var, "role") == 0 && val != NULL) {
if ((cmndspec->role = strdup(val)) == NULL) if ((cmndspec->role = strdup(val)) == NULL)
goto oom; break;
} else if (strcmp(var, "type") == 0 && val != NULL) { } else if (strcmp(var, "type") == 0 && val != NULL) {
if ((cmndspec->type = strdup(val)) == NULL) if ((cmndspec->type = strdup(val)) == NULL)
goto oom; break;
#endif /* HAVE_SELINUX */ #endif /* HAVE_SELINUX */
#ifdef HAVE_PRIV_SET #ifdef HAVE_PRIV_SET
} else if (strcmp(var, "privs") == 0 && val != NULL) { } else if (strcmp(var, "privs") == 0 && val != NULL) {
if ((cmndspec->privs = strdup(val)) == NULL) if ((cmndspec->privs = strdup(val)) == NULL)
goto oom; break;
} else if (strcmp(var, "limitprivs") == 0 && val != NULL) { } else if (strcmp(var, "limitprivs") == 0 && val != NULL) {
if ((cmndspec->limitprivs = strdup(val)) == NULL) if ((cmndspec->limitprivs = strdup(val)) == NULL)
goto oom; break;
#endif /* HAVE_PRIV_SET */ #endif /* HAVE_PRIV_SET */
} else if (store_options) { } else if (store_options) {
if (!sudo_ldap_add_default(var, val, op, source, if (!sudo_ldap_add_default(var, val, op, source,
&priv->defaults)) { &priv->defaults)) {
goto oom; break;
} }
} else { } else {
/* Convert to tags. */ /* Convert to tags. */
@@ -446,6 +446,10 @@ sudo_ldap_role_to_priv(const char *cn, void *hosts, void *runasusers,
} }
} }
rcstr_delref(source); rcstr_delref(source);
if (opt != NULL) {
/* Defer oom until we drop the ref on source. */
goto oom;
}
} }
/* So we can inherit previous values. */ /* So we can inherit previous values. */