[Devel] [PATCH 1/4] restart: check for overflow when counting (nested) vpids
Oren Laadan
orenl at cs.columbia.edu
Fri Jul 30 10:08:30 PDT 2010
Signed-off-by: Oren Laadan <orenl at cs.columbia.edu>
---
restart.c | 29 +++++++++++++++++------------
1 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/restart.c b/restart.c
index d813269..b281ca2 100644
--- a/restart.c
+++ b/restart.c
@@ -1780,14 +1780,10 @@ static pid_t ckpt_fork_child(struct ckpt_ctx *ctx, struct task *child)
flags |= CLONE_NEWPID;
}
if (flags & CLONE_NEWPID && !ctx->args->pidns) {
- ckpt_err("Must use --pidns for nested pidns container");
+ ckpt_err("need --pidns for nested pidns container");
errno = -EINVAL;
return -1;
}
-#if 0
- if (flags & CLONE_NEWPID)
- clone_args.nr_pids--;
-#endif
#endif /* CLONE_NEWPID */
}
@@ -2375,17 +2371,26 @@ static int ckpt_read_vpids(struct ckpt_ctx *ctx)
{
int i, len, ret;
- for (i = 0; i < ctx->pids_nr; i++)
- ctx->vpids_nr += ctx->pids_arr[i].depth;
+ for (i = 0; i < ctx->pids_nr; i++) {
+ if (ctx->pids_arr[i].depth < 0) {
+ ckpt_err("Invalid depth %d for pid %d",
+ ctx->pids_arr[i].depth,
+ ctx->tasks_arr[i].pid);
+ errno = -EINVAL;
+ return -1;
+ }
- ckpt_dbg("number of vpids: %d\n", ctx->vpids_nr);
+ ctx->vpids_nr += ctx->pids_arr[i].depth;
- if (ctx->vpids_nr < 0) {
- ckpt_err("Invalid number of vpids %d", ctx->vpids_nr);
- errno = -EINVAL;
- return -1;
+ if(ctx->vpids_nr < 0) {
+ ckpt_err("Number of vpids overflowed");
+ errno = -E2BIG;
+ return -1;
+ }
}
+ ckpt_dbg("number of vpids: %d\n", ctx->vpids_nr);
+
if (!ctx->vpids_nr)
return 0;
--
1.7.0.4
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list