[CRIU] [PATCH 2/3] criu: fetch kdat.has_loginuid value on C/R
Pavel Emelyanov
xemul at parallels.com
Thu Dec 24 02:28:47 PST 2015
On 12/23/2015 04:47 PM, Dmitry Safonov wrote:
> Dump/Restore loginuid value only when kdat.has_loginuid set.
>
> Signed-off-by: Dmitry Safonov <dsafonov at odin.com>
> ---
> cr-dump.c | 24 ++++++++++++++----------
> cr-restore.c | 3 ++-
> 2 files changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/cr-dump.c b/cr-dump.c
> index fabf20a..8f7f505 100644
> --- a/cr-dump.c
> +++ b/cr-dump.c
> @@ -327,17 +327,21 @@ static int dump_pid_misc(pid_t pid, TaskCoreEntry *tc)
> {
> int ret;
>
> - pr_info("dumping /proc/%d/{oom_score_adj,loginuid}\n", pid);
> + if (kdat.has_loginuid) {
> + pr_info("dumping /proc/%d/{oom_score_adj,loginuid}\n", pid);
Only loginuid, oom_score_adj is dumped eve w/o kdat.has_loginuid.
>
> - tc->has_loginuid = true;
> - tc->loginuid = parse_pid_loginuid(pid, &ret);
> - tc->loginuid = userns_uid(tc->loginuid);
> - /*
> - * loginuid dumping is critical, as if not correctly
> - * restored, you may loss ability to login via SSH to CT
> - */
> - if (ret < 0)
> - return ret;
> + tc->has_loginuid = true;
> + tc->loginuid = parse_pid_loginuid(pid, &ret);
> + tc->loginuid = userns_uid(tc->loginuid);
> + /*
> + * loginuid dumping is critical, as if not correctly
> + * restored, you may loss ability to login via SSH to CT
> + */
> + if (ret < 0)
> + return ret;
> + } else {
> + tc->has_loginuid = false;
> + }
>
> tc->oom_score_adj = parse_pid_oom_score_adj(pid, &ret);
> /*
> diff --git a/cr-restore.c b/cr-restore.c
> index 52d70a9..7941290 100644
> --- a/cr-restore.c
> +++ b/cr-restore.c
> @@ -865,7 +865,8 @@ static int prepare_proc_misc(pid_t pid, TaskCoreEntry *tc)
> int ret;
>
> /* loginuid value is critical to restore */
> - if (tc->has_loginuid && tc->loginuid != INVALID_UID) {
> + if (kdat.has_loginuid && tc->has_loginuid &&
> + tc->loginuid != INVALID_UID) {
Presumably it's not all, the prepare_userns_hook should also check kdat, shouldn't it?
> ret = prepare_loginuid(tc->loginuid);
> if (ret < 0)
> return ret;
>
More information about the CRIU
mailing list