[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