Commit ef4dbebe authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

criu: seize -- Don't left dangling @processes_to_wait_pids pointer

If an error occured during freezer_wait_processes we are
freeing processes_to_wait_pids array but same time
take freezer_detach on error path to execute, which
lead in nil dereference in best case.

Simply zap dangling pointer and make sure it exist
in freezer_detach.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 2d938397
...@@ -203,6 +203,7 @@ static int freezer_wait_processes() ...@@ -203,6 +203,7 @@ static int freezer_wait_processes()
if (pid < 0) { if (pid < 0) {
pr_perror("Unable to wait processes"); pr_perror("Unable to wait processes");
xfree(processes_to_wait_pids); xfree(processes_to_wait_pids);
processes_to_wait_pids = NULL;
return -1; return -1;
} }
pr_warn("Unexpected process %d in the freezer cgroup (status 0x%x)\n", pid, status); pr_warn("Unexpected process %d in the freezer cgroup (status 0x%x)\n", pid, status);
...@@ -220,7 +221,7 @@ static int freezer_detach(void) ...@@ -220,7 +221,7 @@ static int freezer_detach(void)
if (!opts.freeze_cgroup) if (!opts.freeze_cgroup)
return 0; return 0;
for (i = 0; i < processes_to_wait; i++) { for (i = 0; i < processes_to_wait && processes_to_wait_pids; i++) {
pid_t pid = processes_to_wait_pids[i]; pid_t pid = processes_to_wait_pids[i];
int status, save_errno; int status, save_errno;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment