[Devel] Re: [PATCH 5/6] cr: restore file->f_cred

Oren Laadan orenl at cs.columbia.edu
Wed May 20 08:08:30 PDT 2009



Serge E. Hallyn wrote:
> Ony seems useful if you're using coda or hppfs, but go ahead and

  ^^^

(It is also used in some place under net/*...)

> restore a file's f_cred.  This is set to the cred of the task doing
> the open, so often it will be the same as that of the restarted task.
> 
> Signed-off-by: Serge E. Hallyn <serue at us.ibm.com>
> ---
>  checkpoint/files.c             |   16 ++++++++++++++--
>  include/linux/checkpoint_hdr.h |    1 +
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/checkpoint/files.c b/checkpoint/files.c
> index 6107361..edf81ce 100644
> --- a/checkpoint/files.c
> +++ b/checkpoint/files.c
> @@ -151,7 +151,11 @@ int checkpoint_file_common(struct ckpt_ctx *ctx, struct file *file,
>  	h->f_pos = file->f_pos;
>  	h->f_version = file->f_version;
>  
> -	/* FIX: need also file->uid, file->gid, file->f_owner, etc */
> +	h->f_credref = checkpoint_obj(ctx, file->f_cred, CKPT_OBJ_CRED);
> +	if (h->f_credref < 0)
> +		return h->f_credref;
> +
> +	/* FIX: need also file->f_owner, etc */
>  
>  	return 0;
>  }
> @@ -359,8 +363,16 @@ int restore_file_common(struct ckpt_ctx *ctx, struct file *file,
>  			struct ckpt_hdr_file *h)
>  {
>  	int ret;
> +	struct cred *cred;
> +
> +	/* FIX: need to restore owner etc */
>  
> -	/* FIX: need to restore uid, gid, owner etc */
> +	/* restore the cred */
> +	cred = ckpt_obj_fetch(ctx, h->f_credref, CKPT_OBJ_CRED);
> +	if (IS_ERR(cred))
> +		return PTR_ERR(cred);
> +	put_cred(file->f_cred);
> +	file->f_cred = get_cred(cred);
>  
>  	/* safe to set 1st arg (fd) to 0, as command is F_SETFL */
>  	ret = vfs_fcntl(0, F_SETFL, h->f_flags & CKPT_SETFL_MASK, file);
> diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
> index 98fc0f7..2693a72 100644
> --- a/include/linux/checkpoint_hdr.h
> +++ b/include/linux/checkpoint_hdr.h
> @@ -341,6 +341,7 @@ struct ckpt_hdr_file {
>  	__u32 _padding;
>  	__u64 f_pos;
>  	__u64 f_version;
> +	__s32 f_credref;

This can replace the unused _padding field above ?

>  } __attribute__((aligned(8)));
>  
>  struct ckpt_hdr_file_generic {

Acked-by: Oren Laadan <orenl at cs.columbia.edu>
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list