Commit 9498609f authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

dump: don't play with a function exit code

We should not have a chance to exit with a wrong code on error paths.

Now dump_one_task() returs zero, if allocation of dfds failed:

ret = collect_mappings(pid, &vmas);
if (ret) {
	pr_err("Collect mappings (pid: %d) failed with %d\n", pid, ret);
	goto err;
}

if (!shared_fdtable(item)) {
	dfds = xmalloc(sizeof(*dfds));
	if (!dfds)
		goto err;

...
err:
	return -1;
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 198c9365
...@@ -1470,7 +1470,7 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1470,7 +1470,7 @@ static int dump_one_task(struct pstree_item *item)
pid_t pid = item->pid.real; pid_t pid = item->pid.real;
struct vm_area_list vmas; struct vm_area_list vmas;
struct parasite_ctl *parasite_ctl; struct parasite_ctl *parasite_ctl;
int ret = -1; int ret, exit_code = -1;
struct parasite_dump_misc misc; struct parasite_dump_misc misc;
struct cr_imgset *cr_imgset = NULL; struct cr_imgset *cr_imgset = NULL;
struct parasite_drain_fd *dfds = NULL; struct parasite_drain_fd *dfds = NULL;
...@@ -1500,7 +1500,6 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1500,7 +1500,6 @@ static int dump_one_task(struct pstree_item *item)
goto err; goto err;
if (!may_dump(&cr)) { if (!may_dump(&cr)) {
ret = -1;
pr_err("Check uid (pid: %d) failed\n", pid); pr_err("Check uid (pid: %d) failed\n", pid);
goto err; goto err;
} }
...@@ -1535,7 +1534,6 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1535,7 +1534,6 @@ static int dump_one_task(struct pstree_item *item)
goto err; goto err;
} }
ret = -1;
parasite_ctl = parasite_infect_seized(pid, item, &vmas, dfds, proc_args.timer_n); parasite_ctl = parasite_infect_seized(pid, item, &vmas, dfds, proc_args.timer_n);
if (!parasite_ctl) { if (!parasite_ctl) {
pr_err("Can't infect (pid: %d) with parasite\n", pid); pr_err("Can't infect (pid: %d) with parasite\n", pid);
...@@ -1579,11 +1577,9 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1579,11 +1577,9 @@ static int dump_one_task(struct pstree_item *item)
if (item->sid == 0) { if (item->sid == 0) {
pr_err("A session leader of %d(%d) is outside of its pid namespace\n", pr_err("A session leader of %d(%d) is outside of its pid namespace\n",
item->pid.real, item->pid.virt); item->pid.real, item->pid.virt);
ret = -1;
goto err_cure; goto err_cure;
} }
ret = -1;
cr_imgset = cr_task_imgset_open(item->pid.virt, O_DUMP); cr_imgset = cr_task_imgset_open(item->pid.virt, O_DUMP);
if (!cr_imgset) if (!cr_imgset)
goto err_cure; goto err_cure;
...@@ -1661,11 +1657,12 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1661,11 +1657,12 @@ static int dump_one_task(struct pstree_item *item)
} }
close_cr_imgset(&cr_imgset); close_cr_imgset(&cr_imgset);
exit_code = 0;
err: err:
close_pid_proc(); close_pid_proc();
free_mappings(&vmas); free_mappings(&vmas);
xfree(dfds); xfree(dfds);
return ret; return exit_code;
err_cure: err_cure:
close_cr_imgset(&cr_imgset); close_cr_imgset(&cr_imgset);
......
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