<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p dir="ltr"><br>
4 июля 2016 г. 20:05 пользователь Pavel Emelianov &lt;xemul@virtuozzo.com&gt; написал:<br>
&gt;<br>
&gt; On 06/30/2016 07:24 PM, Stanislav Kinsburskiy wrote:<br>
&gt; &gt; The correct place to get fd open flags for file mappings is<br>
&gt; &gt; /proc/&lt;pid&gt;/map_files.<br>
&gt; &gt; An attempt tp speculate on &quot;shared&quot; and &quot;maywrite&quot; bits doesn't garantee,<br>
&gt; &gt; that file will be opened with correct permissions on restore.<br>
&gt; &gt; Here is an example:<br>
&gt; &gt; <br>
&gt; &gt; Process mapping (read/write):<br>
&gt; &gt; <br>
&gt; &gt; # cat /proc/481943/maps | grep 7f7108077000-7f7108078000<br>
&gt; &gt; 7f7108077000-7f7108078000 rw-p 00001000 00:35 7 &lt;snip&gt;<br>
&gt; &gt; <br>
&gt; &gt; 1) Before suspend:<br>
&gt; &gt; <br>
&gt; &gt; # ls -l /proc/481427/map_files/7f7108077000-7f7108078000<br>
&gt; &gt; lrw------- &lt;snip&gt; /proc/481427/map_files/7f7108077000-7f7108078000 -&gt; &lt;snip&gt;<br>
&gt; &gt; <br>
&gt; &gt; 2) After restore:<br>
&gt; &gt; <br>
&gt; &gt; # ls -l /proc/481943/map_files/7f7108077000-7f7108078000<br>
&gt; &gt; lr-------- &lt;snip&gt; /proc/481943/map_files/7f7108077000-7f7108078000 -&gt; &lt;snip&gt;<br>
&gt; &gt; <br>
&gt; &gt; Write bit is lost.<br>
&gt; &gt; <br>
&gt; &gt; This patch set vma-&gt;e-&gt;fdflags as /proc/&lt;pid&gt;/map_files/&lt;vma&gt; open mode.<br>
&gt; &gt; <br>
&gt; &gt; Signed-off-by: Stanislav Kinsburskiy &lt;skinsbursky@virtuozzo.com&gt;<br>
&gt; &gt; ---<br>
&gt; &gt;&nbsp; criu/proc_parse.c |&nbsp;&nbsp; 51 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;-----------------<br>
&gt; &gt;&nbsp; criu/util.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 3 &#43;&#43;-<br>
&gt; &gt;&nbsp; 2 files changed, 36 insertions(&#43;), 18 deletions(-)<br>
&gt; &gt; <br>
&gt; &gt; diff --git a/criu/proc_parse.c b/criu/proc_parse.c<br>
&gt; &gt; index 5210226..8e36916 100644<br>
&gt; &gt; --- a/criu/proc_parse.c<br>
&gt; &gt; &#43;&#43;&#43; b/criu/proc_parse.c<br>
&gt; &gt; @@ -82,8 &#43;82,6 @@ static bool is_vma_range_fmt(char *line)<br>
&gt; &gt;&nbsp; static int parse_vmflags(char *buf, struct vma_area *vma_area)<br>
&gt; &gt;&nbsp; {<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *tok;<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; bool shared = false;<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; bool maywrite = false;<br>
&gt; &gt;&nbsp; <br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!buf[0])<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
&gt; &gt; @@ -95,12 &#43;93,6 @@ static int parse_vmflags(char *buf, struct vma_area *vma_area)<br>
&gt; &gt;&nbsp; #define _vmflag_match(_t, _s) (_t[0] == _s[0] &amp;&amp; _t[1] == _s[1])<br>
&gt; &gt;&nbsp; <br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do {<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* open() block */<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (_vmflag_match(tok, &quot;sh&quot;))<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shared = true;<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (_vmflag_match(tok, &quot;mw&quot;))<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maywrite = true;<br>
&gt; &gt; -<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* mmap() block */<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (_vmflag_match(tok, &quot;gd&quot;))<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;flags |= MAP_GROWSDOWN;<br>
&gt; &gt; @@ -144,12 &#43;136,6 @@ static int parse_vmflags(char *buf, struct vma_area *vma_area)<br>
&gt; &gt;&nbsp; <br>
&gt; &gt;&nbsp; #undef _vmflag_match<br>
&gt; &gt;&nbsp; <br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; if (shared &amp;&amp; maywrite)<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;fdflags = O_RDWR;<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; else<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;fdflags = O_RDONLY;<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;has_fdflags = true;<br>
&gt; &gt; -<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (vma_area-&gt;e-&gt;madv)<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;has_madv = true;<br>
&gt; &gt;&nbsp; <br>
&gt; &gt; @@ -175,12 &#43;161,46 @@ static inline int vfi_equal(struct vma_file_info *a, struct vma_file_info *b)<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a-&gt;dev_min ^ b-&gt;dev_min)) == 0;<br>
&gt; &gt;&nbsp; }<br>
&gt; &gt;&nbsp; <br>
&gt; &gt; &#43;static int vma_get_mapfile_flags(struct vma_area *vma, DIR *mfd, char *path)<br>
&gt; &gt; &#43;{<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; struct stat stat;<br>
&gt; &gt; &#43;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; if (fstatat(dirfd(mfd), path, &amp;stat, AT_SYMLINK_NOFOLLOW) &lt; 0) {<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (errno == ENOENT) {<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Just mapping w/o map_files link */<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pr_perror(&quot;Failed fstatat on map %&quot;PRIx64&quot;&quot;, vma-&gt;e-&gt;start);<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; &gt; &#43;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; switch(stat.st_mode &amp; 0600) {<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 0200:<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma-&gt;e-&gt;fdflags = O_WRONLY;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 0400:<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma-&gt;e-&gt;fdflags = O_RDONLY;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 0600:<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma-&gt;e-&gt;fdflags = O_RDWR;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; vma-&gt;e-&gt;has_fdflags = true;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
&gt; &gt; &#43;}<br>
&gt; &gt; &#43;<br>
&gt; &gt;&nbsp; static int vma_get_mapfile(char *fname, struct vma_area *vma, DIR *mfd,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct vma_file_info *vfi, struct vma_file_info *prev_vfi)<br>
&gt; &gt;&nbsp; {<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char path[32];<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int flags;<br>
&gt; &gt;&nbsp; <br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; /* Figure out if it's file mapping */<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; snprintf(path, sizeof(path), &quot;%&quot;PRIx64&quot;-%&quot;PRIx64, vma-&gt;e-&gt;start, vma-&gt;e-&gt;end);<br>
&gt; &gt; &#43;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; if (vma_get_mapfile_flags(vma, mfd, path))<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br>
&gt;<br>
&gt; Can we re-use the vmfd borrowing logic for fdflags too?<br>
&gt;</p>
<p dir="ltr">You mean in the cycle below?<br>
Yes, but then we have to add check for fdflags to vfi_equal, shouldn't we?</p>
<p dir="ltr">&gt; &gt; &#43;<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (prev_vfi-&gt;vma &amp;&amp; vfi_equal(vfi, prev_vfi)) {<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct vma_area *prev = prev_vfi-&gt;vma;<br>
&gt; &gt;&nbsp; <br>
&gt; &gt; @@ -209,9 &#43;229,6 @@ static int vma_get_mapfile(char *fname, struct vma_area *vma, DIR *mfd,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; &gt;&nbsp; <br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; /* Figure out if it's file mapping */<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; snprintf(path, sizeof(path), &quot;%&quot;PRIx64&quot;-%&quot;PRIx64, vma-&gt;e-&gt;start, vma-&gt;e-&gt;end);<br>
&gt; &gt; -<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Note that we &quot;open&quot; it in dumper process space<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * so later we might refer to it via /proc/self/fd/vm_file_fd<br>
&gt; &gt; diff --git a/criu/util.c b/criu/util.c<br>
&gt; &gt; index e8ebe61..07bc16e 100644<br>
&gt; &gt; --- a/criu/util.c<br>
&gt; &gt; &#43;&#43;&#43; b/criu/util.c<br>
&gt; &gt; @@ -161,12 &#43;161,13 @@ void pr_vma(unsigned int loglevel, const struct vma_area *vma_area)<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>
&gt; &gt;&nbsp; <br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_opt_str(vma_area, opt);<br>
&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp; print_on_level(loglevel, &quot;%#&quot;PRIx64&quot;-%#&quot;PRIx64&quot; (%&quot;PRIi64&quot;K) prot %#x flags %#x st %#x off %#&quot;PRIx64&quot; &quot;<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; print_on_level(loglevel, &quot;%#&quot;PRIx64&quot;-%#&quot;PRIx64&quot; (%&quot;PRIi64&quot;K) prot %#x flags %#x fdflags %#o st %#x off %#&quot;PRIx64&quot; &quot;<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;%s shmid: %#&quot;PRIx64&quot;\n&quot;,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;start, vma_area-&gt;e-&gt;end,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KBYTES(vma_area_len(vma_area)),<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;prot,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;flags,<br>
&gt; &gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;fdflags,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;status,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vma_area-&gt;e-&gt;pgoff,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opt, vma_area-&gt;e-&gt;shmid);<br>
&gt; &gt; <br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; CRIU mailing list<br>
&gt; &gt; CRIU@openvz.org<br>
&gt; &gt; https://lists.openvz.org/mailman/listinfo/criu<br>
&gt; &gt; .<br>
&gt; &gt; <br>
&gt;<br>
</p>
</body>
</html>