Quoting Oren Laadan (orenl@xxxxxxxxxxxxxxx): > > > Serge E. Hallyn wrote: > > Quoting Oren Laadan (orenl@xxxxxxxxxxxxxxx): > >>> /* dump the task_struct of a given task */ > >>> static int checkpoint_task_struct(struct ckpt_ctx *ctx, struct task_struct *t) > >>> { > >>> struct ckpt_hdr_task *h; > >>> int ret; > >>> + int realcred_ref, ecred_ref; > >>> + > >>> + realcred_ref = checkpoint_obj(ctx, t->real_cred, CKPT_OBJ_CRED); > >>> + if (realcred_ref < 0) > >>> + return realcred_ref; > >>> + > >>> + ecred_ref = checkpoint_obj(ctx, t->cred, CKPT_OBJ_CRED); > >>> + if (ecred_ref < 0) > >>> + return ecred_ref; > >> Is this safe even if the checkpointed task's state changes ? > >> (e.g. unfrozen - yes, I know there is a patch in the works to > >> prevent this; but if we ever want to checkpoint STOPPED tasks... > >> for instance). > >> > >> Would incrementing the refcount on t->{cred,real_cred} help ? > > > > Doesn't checkpoint_obj already do that through obj_new? > > > > No, it does not. There is a (potentially long) window of opportunity > between the callback invoked from checkpoint_obj() - where the pointer > is used, and when checkpoint_obj() later takes the extra reference. > > See for comparison checkpoint_mm_obj(), it safely grabs the task->mm > (with a reference) around the invocation of checkpoint_obj(). Hmm, ok. Will do. -serge _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers