<div dir="ltr">Hi Andrei,<div><br></div><div>I have resent the whole series.</div><div><br></div><div>Best,</div><div>Harsha</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 20, 2019 at 10:37 AM Andrei Vagin &lt;<a href="mailto:avagin@gmail.com">avagin@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Sun, Sep 15, 2019 at 10:27:04AM +0530, Harshavardhan Unnibhavi wrote:<br>
&gt; Hi Andrei,<br>
&gt; <br>
&gt; This is actually a continuation of the series of patches that I have<br>
&gt; started from here:<br>
&gt; <a href="https://lists.openvz.org/pipermail/criu/2019-June/044144.html" rel="noreferrer" target="_blank">https://lists.openvz.org/pipermail/criu/2019-June/044144.html</a>. I think<br>
&gt; I made a mistake and sent it as a patch series instead of a standalone<br>
&gt; patch.<br>
&gt; <br>
&gt; Should I just send it as a single patch or send the three patches<br>
&gt; together or leave it as is?<br>
<br>
Could you resend the whole series?<br>
<br>
&gt; <br>
&gt; Best,<br>
&gt; Harsha<br>
&gt; <br>
&gt; <br>
&gt; On Sun, Sep 15, 2019 at 10:19 AM Andrei Vagin &lt;<a href="mailto:avagin@gmail.com" target="_blank">avagin@gmail.com</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; I see only the third patch of this series. Where are two others and a<br>
&gt; &gt; cover letter?<br>
&gt; &gt;<br>
&gt; &gt; On Thu, Sep 05, 2019 at 07:25:59PM +0530, Harshavardhan Unnibhavi wrote:<br>
&gt; &gt; &gt; This commit restores anonymized images containing their file paths<br>
&gt; &gt; &gt; maximized.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; This commit introduces the following:<br>
&gt; &gt; &gt;   - anon option for the restore action.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; This commit modifies the following:<br>
&gt; &gt; &gt;   - pretend anonymized files in question are opened.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Resolve Issue #360.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Signed-off-by: Harshavardhan Unnibhavi &lt;<a href="mailto:hvubfoss@gmail.com" target="_blank">hvubfoss@gmail.com</a>&gt;<br>
&gt; &gt; &gt; ---<br>
&gt; &gt; &gt;  criu/config.c             |  5 +++++<br>
&gt; &gt; &gt;  criu/cr-restore.c         |  5 +++++<br>
&gt; &gt; &gt;  criu/files-reg.c          | 12 ++++++++++--<br>
&gt; &gt; &gt;  criu/files.c              |  4 ++--<br>
&gt; &gt; &gt;  criu/include/cr_options.h |  1 +<br>
&gt; &gt; &gt;  criu/include/restorer.h   |  1 +<br>
&gt; &gt; &gt;  criu/pie/restorer.c       |  4 ++--<br>
&gt; &gt; &gt;  7 files changed, 26 insertions(+), 6 deletions(-)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; diff --git a/criu/config.c b/criu/config.c<br>
&gt; &gt; &gt; index 3a54afd4..d36150e0 100644<br>
&gt; &gt; &gt; --- a/criu/config.c<br>
&gt; &gt; &gt; +++ b/criu/config.c<br>
&gt; &gt; &gt; @@ -276,6 +276,7 @@ void init_opts(void)<br>
&gt; &gt; &gt;       opts.empty_ns = 0;<br>
&gt; &gt; &gt;       opts.status_fd = -1;<br>
&gt; &gt; &gt;       opts.log_level = DEFAULT_LOGLEVEL;<br>
&gt; &gt; &gt; +     opts.anonymize = false;<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;  bool deprecated_ok(char *what)<br>
&gt; &gt; &gt; @@ -455,6 +456,7 @@ int parse_options(int argc, char **argv, bool *usage_error,<br>
&gt; &gt; &gt;               { &quot;root&quot;,                       required_argument,      0, &#39;r&#39;  },<br>
&gt; &gt; &gt;               { USK_EXT_PARAM,                optional_argument,      0, &#39;x&#39;  },<br>
&gt; &gt; &gt;               { &quot;help&quot;,                       no_argument,            0, &#39;h&#39;  },<br>
&gt; &gt; &gt; +             { &quot;anon&quot;,                       no_argument,            0, &#39;a&#39;  },<br>
&gt; &gt; &gt;               BOOL_OPT(SK_EST_PARAM, &amp;opts.tcp_established_ok),<br>
&gt; &gt; &gt;               { &quot;close&quot;,                      required_argument,      0, 1043 },<br>
&gt; &gt; &gt;               BOOL_OPT(&quot;log-pid&quot;, &amp;opts.log_file_per_pid),<br>
&gt; &gt; &gt; @@ -574,6 +576,9 @@ int parse_options(int argc, char **argv, bool *usage_error,<br>
&gt; &gt; &gt;                       continue;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;               switch (opt) {<br>
&gt; &gt; &gt; +             case &#39;a&#39;:<br>
&gt; &gt; &gt; +                     opts.anonymize = true;<br>
&gt; &gt; &gt; +                     break;<br>
&gt; &gt; &gt;               case &#39;s&#39;:<br>
&gt; &gt; &gt;                       opts.final_state = TASK_STOPPED;<br>
&gt; &gt; &gt;                       break;<br>
&gt; &gt; &gt; diff --git a/criu/cr-restore.c b/criu/cr-restore.c<br>
&gt; &gt; &gt; index de0b2cb4..05896ab0 100644<br>
&gt; &gt; &gt; --- a/criu/cr-restore.c<br>
&gt; &gt; &gt; +++ b/criu/cr-restore.c<br>
&gt; &gt; &gt; @@ -882,6 +882,9 @@ static int restore_one_alive_task(int pid, CoreEntry *core)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       memzero(ta, args_len);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; +     if(opts.anonymize)<br>
&gt; &gt; &gt; +             ta-&gt;anonymize = true;<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt;       if (prepare_fds(current))<br>
&gt; &gt; &gt;               return -1;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; @@ -2268,6 +2271,8 @@ skip_ns_bouncing:<br>
&gt; &gt; &gt;               goto out_kill;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       pr_info(&quot;Restore finished successfully. Resuming tasks.\n&quot;);<br>
&gt; &gt; &gt; +     if(opts.anonymize)<br>
&gt; &gt; &gt; +             return 0;<br>
&gt; &gt; &gt;       __restore_switch_stage(CR_STATE_COMPLETE);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       if (ret == 0)<br>
&gt; &gt; &gt; diff --git a/criu/files-reg.c b/criu/files-reg.c<br>
&gt; &gt; &gt; index 1b51d108..a3a2396d 100644<br>
&gt; &gt; &gt; --- a/criu/files-reg.c<br>
&gt; &gt; &gt; +++ b/criu/files-reg.c<br>
&gt; &gt; &gt; @@ -1745,14 +1745,14 @@ ext:<br>
&gt; &gt; &gt;                       return -1;<br>
&gt; &gt; &gt;               }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -             if (rfi-&gt;rfe-&gt;has_size &amp;&amp; (st.st_size != rfi-&gt;rfe-&gt;size)) {<br>
&gt; &gt; &gt; +             if (rfi-&gt;rfe-&gt;has_size &amp;&amp; (st.st_size != rfi-&gt;rfe-&gt;size) &amp;&amp; (!opts.anonymize)) {<br>
&gt; &gt; &gt;                       pr_err(&quot;File %s has bad size %&quot;PRIu64&quot; (expect %&quot;PRIu64&quot;)\n&quot;,<br>
&gt; &gt; &gt;                                       rfi-&gt;path, st.st_size,<br>
&gt; &gt; &gt;                                       rfi-&gt;rfe-&gt;size);<br>
&gt; &gt; &gt;                       return -1;<br>
&gt; &gt; &gt;               }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -             if (rfi-&gt;rfe-&gt;has_mode &amp;&amp; (st.st_mode != rfi-&gt;rfe-&gt;mode)) {<br>
&gt; &gt; &gt; +             if (rfi-&gt;rfe-&gt;has_mode &amp;&amp; (st.st_mode != rfi-&gt;rfe-&gt;mode) &amp;&amp; (!opts.anonymize)) {<br>
&gt; &gt; &gt;                       pr_err(&quot;File %s has bad mode 0%o (expect 0%o)\n&quot;,<br>
&gt; &gt; &gt;                              rfi-&gt;path, (int)st.st_mode,<br>
&gt; &gt; &gt;                              rfi-&gt;rfe-&gt;mode);<br>
&gt; &gt; &gt; @@ -1793,6 +1793,14 @@ int do_open_reg_noseek_flags(int ns_root_fd, struct reg_file_info *rfi, void *ar<br>
&gt; &gt; &gt;       flags &amp;= ~O_TMPFILE;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       fd = openat(ns_root_fd, rfi-&gt;path, flags);<br>
&gt; &gt; &gt; +     if(opts.anonymize){<br>
&gt; &gt; &gt; +             fd = openat(ns_root_fd, &quot;/dev/zero&quot;, flags);<br>
&gt; &gt; &gt; +             if(fd &lt; 0){<br>
&gt; &gt; &gt; +                     pr_perror(&quot;Unable to create a fake file descriptor&quot;);<br>
&gt; &gt; &gt; +                     return fd;<br>
&gt; &gt; &gt; +             }<br>
&gt; &gt; &gt; +             pr_info(&quot;Restoring anonymized file paths.\n&quot;);<br>
&gt; &gt; &gt; +     }<br>
&gt; &gt; &gt;       if (fd &lt; 0) {<br>
&gt; &gt; &gt;               pr_perror(&quot;Can&#39;t open file %s on restore&quot;, rfi-&gt;path);<br>
&gt; &gt; &gt;               return fd;<br>
&gt; &gt; &gt; diff --git a/criu/files.c b/criu/files.c<br>
&gt; &gt; &gt; index ffdaa459..a7e76247 100644<br>
&gt; &gt; &gt; --- a/criu/files.c<br>
&gt; &gt; &gt; +++ b/criu/files.c<br>
&gt; &gt; &gt; @@ -1313,7 +1313,7 @@ static int fchroot(int fd)<br>
&gt; &gt; &gt;        * it using fchdir()<br>
&gt; &gt; &gt;        */<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -     if (fchdir(fd) &lt; 0) {<br>
&gt; &gt; &gt; +     if (fchdir(fd) &lt; 0 &amp;&amp; !(opts.anonymize)) {<br>
&gt; &gt; &gt;               pr_perror(&quot;Can&#39;t chdir to proc&quot;);<br>
&gt; &gt; &gt;               return -1;<br>
&gt; &gt; &gt;       }<br>
&gt; &gt; &gt; @@ -1356,7 +1356,7 @@ int restore_fs(struct pstree_item *me)<br>
&gt; &gt; &gt;       }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       ret = fchdir(dd_cwd);<br>
&gt; &gt; &gt; -     if (ret &lt; 0) {<br>
&gt; &gt; &gt; +     if (ret &lt; 0 &amp;&amp; !(opts.anonymize)) {<br>
&gt; &gt; &gt;               pr_perror(&quot;Can&#39;t change cwd&quot;);<br>
&gt; &gt; &gt;               goto out;<br>
&gt; &gt; &gt;       }<br>
&gt; &gt; &gt; diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h<br>
&gt; &gt; &gt; index c519c740..75539625 100644<br>
&gt; &gt; &gt; --- a/criu/include/cr_options.h<br>
&gt; &gt; &gt; +++ b/criu/include/cr_options.h<br>
&gt; &gt; &gt; @@ -111,6 +111,7 @@ struct cr_options {<br>
&gt; &gt; &gt;       int                     enable_external_masters;<br>
&gt; &gt; &gt;       bool                    aufs;           /* auto-detected, not via cli */<br>
&gt; &gt; &gt;       bool                    overlayfs;<br>
&gt; &gt; &gt; +     bool                    anonymize;<br>
&gt; &gt; &gt;  #ifdef CONFIG_BINFMT_MISC_VIRTUALIZED<br>
&gt; &gt; &gt;       bool                    has_binfmt_misc; /* auto-detected */<br>
&gt; &gt; &gt;  #endif<br>
&gt; &gt; &gt; diff --git a/criu/include/restorer.h b/criu/include/restorer.h<br>
&gt; &gt; &gt; index b93807f5..203b1153 100644<br>
&gt; &gt; &gt; --- a/criu/include/restorer.h<br>
&gt; &gt; &gt; +++ b/criu/include/restorer.h<br>
&gt; &gt; &gt; @@ -136,6 +136,7 @@ struct task_restore_args {<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       int                             uffd;<br>
&gt; &gt; &gt;       bool                            has_thp_enabled;<br>
&gt; &gt; &gt; +     bool                            anonymize;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       /* threads restoration */<br>
&gt; &gt; &gt;       int                             nr_threads;             /* number of threads */<br>
&gt; &gt; &gt; diff --git a/criu/pie/restorer.c b/criu/pie/restorer.c<br>
&gt; &gt; &gt; index 390c0e1a..87c8ed4a 100644<br>
&gt; &gt; &gt; --- a/criu/pie/restorer.c<br>
&gt; &gt; &gt; +++ b/criu/pie/restorer.c<br>
&gt; &gt; &gt; @@ -1719,12 +1719,12 @@ long __export_restore_task(struct task_restore_args *args)<br>
&gt; &gt; &gt;                */<br>
&gt; &gt; &gt;               ret |= restore_self_exe_late(args);<br>
&gt; &gt; &gt;       } else {<br>
&gt; &gt; &gt; -             if (ret)<br>
&gt; &gt; &gt; +             if (ret &amp;&amp; !(args-&gt;anonymize))<br>
&gt; &gt; &gt;                       pr_err(&quot;sys_prctl(PR_SET_MM, PR_SET_MM_MAP) failed with %d\n&quot;, (int)ret);<br>
&gt; &gt; &gt;               sys_close(args-&gt;fd_exe_link);<br>
&gt; &gt; &gt;       }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -     if (ret)<br>
&gt; &gt; &gt; +     if (ret &amp;&amp; !(args-&gt;anonymize))<br>
&gt; &gt; &gt;               goto core_restore_end;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       /* SELinux (1) process context needs to be set before creating threads. */<br>
&gt; &gt; &gt; --<br>
&gt; &gt; &gt; 2.17.1<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; CRIU mailing list<br>
&gt; &gt; &gt; <a href="mailto:CRIU@openvz.org" target="_blank">CRIU@openvz.org</a><br>
&gt; &gt; &gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" rel="noreferrer" target="_blank">https://lists.openvz.org/mailman/listinfo/criu</a><br>
</blockquote></div>