Only add command_info to garbage collector on successful return.
Otherwise it will be freed on failure.
This commit is contained in:
@@ -606,7 +606,6 @@ sudoers_policy_store_result(bool accepted, char *argv[], char *envp[],
|
|||||||
command_info = calloc(55, sizeof(char *));
|
command_info = calloc(55, sizeof(char *));
|
||||||
if (command_info == NULL)
|
if (command_info == NULL)
|
||||||
goto oom;
|
goto oom;
|
||||||
sudoers_gc_add(GC_VECTOR, command_info);
|
|
||||||
|
|
||||||
if (safe_cmnd != NULL) {
|
if (safe_cmnd != NULL) {
|
||||||
command_info[info_len] = sudo_new_key_val("command", safe_cmnd);
|
command_info[info_len] = sudo_new_key_val("command", safe_cmnd);
|
||||||
@@ -882,6 +881,9 @@ sudoers_policy_store_result(bool accepted, char *argv[], char *envp[],
|
|||||||
*(exec_args->envp) = envp;
|
*(exec_args->envp) = envp;
|
||||||
*(exec_args->info) = command_info;
|
*(exec_args->info) = command_info;
|
||||||
|
|
||||||
|
/* Free command_info on exit. */
|
||||||
|
sudoers_gc_add(GC_VECTOR, command_info);
|
||||||
|
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
|
|
||||||
oom:
|
oom:
|
||||||
|
Reference in New Issue
Block a user