Re: [PATCH 4/6] cr: checkpoint and restore task credentials

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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().

Oren.
_______________________________________________
Containers mailing list
Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/containers

[Index of Archives]     [Cgroups]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux