2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 05:48:05 +00:00

6308 Commits

Author SHA1 Message Date
Pavel Emelyanov
d10835c4ee dump: Dont read prohibited kernel files
In particular, we won't be able to do memory tracking and
zero page detection.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Looks-good-to-me: Andrew Vagin <avagin@virtuozzo.com>
2015-12-24 14:40:04 +03:00
Pavel Emelyanov
2e2e1c13fb kerndat: Read anon shmem dev via maps
Kernel doesn't allow to read /proc/pid/map_files. This file
is used to get pseudo device for anon shmem mappings, but
this info can be get by scanning /proc/self/maps file.

This works slower, but still.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Looks-good-to-me: Andrew Vagin <avagin@virtuozzo.com>
2015-12-24 14:40:03 +03:00
Pavel Emelyanov
df1729e3ec util: Ability to ignore errno when opening proc
When run from regular user criu will get EACCES/EPERM from
opening proc, but in some situations criu will now how to
deal with it. So this patch makes it possible not to print
error message in logs for such cases.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Looks-good-to-me: Andrew Vagin <avagin@virtuozzo.com>
2015-12-24 14:40:02 +03:00
Cyrill Gorcunov
70681dd81b parasite: Add @pad argument for syscall run
We will need an extra space for memfd based
syscall (without poking the stack since it's
not that safe without additional tests).

So add @pad argument which will be used
to find proper memory for seized syscall
execution.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Looks-good-to-me: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 14:40:01 +03:00
Pavel Emelyanov
5bfb579eba proc: Get full file path into handle_vma
Right now we only get first 31 symbols of it, but in the
next patches full path would be required.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Looks-good-to-me: Andrew Vagin <avagin@virtuozzo.com>
2015-12-24 14:40:00 +03:00
Pavel Emelyanov
6c22bfe216 criu: Remove security
We no longer support root-mode service and suid binaries, so
any artificial restrictions no longer make sense.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Looks-good-to-me: Andrew Vagin <avagin@virtuozzo.com>
2015-12-24 14:39:58 +03:00
Cyrill Gorcunov
35cb599634 test: different_creds -- Enhance the testing
To test c/r of creds we need more precise way,
so lets add a few additional creds to test.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:30:25 +03:00
Cyrill Gorcunov
e8dd8c63f8 zdtm: Add ARRAY_SIZE into the header
Suitable macro.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:30:06 +03:00
Andrew Vagin
e09f7ea05c zdtm: set the dumpable flag after setuid (v2)
Otherwise we will not able to access /proc/pid/* for the process.

v2: s/__NR_WAIT4/__NR_setresuid

Cc: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:29:34 +03:00
Andrew Vagin
7c11b0b914 zdtm.py: don't worry if a test class doesn't have ns() and static()
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:25:06 +03:00
Andrew Vagin
57d73475af test/inhfd: use os.fdopen instead of a home-made class
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:24:36 +03:00
Pavel Tikhomirov
6aaa1a2efc cpt/rst: access and modification time of ghost files
Modification time changes after cpt/rst file_attr test in VZ7CT:
CT-102 criu# cat test/zdtm/live/static/file_attr.out
15:05:05.315:   146: FAIL: file_attr.c:101: modification time has
changed (errno = 11 (Resource temporarily unavailable))

https://jira.sw.ru/browse/PSBM-41401

v2: add timeval message, test seem to pass now - remove noauto
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:24:05 +03:00
Cyrill Gorcunov
e9fc593cde creds: dump -- Implement per-thread dump of credentials
This as well as restore requires several steps to reach per-thread
support during dump stage

 - @creds area to be fetched from the parasite is embedded into
   parasite_dump_structure

 - when test for task to be dumpable we no longer compare caps
   because we now allow them to be different (and I renamed
   proc_status_creds_eq to proc_status_creds_dumpable for this
   sake)

 - have to extend dump_thread_common to support dumping of
   creds (we call for dump_thread_common in several places,
   in particular when we need to fetch misc params we don't
   need creds, here @creds option comes into the play)

 - after this patch no creds-X.img file be generated anymore,
   I guess we might drop it off with time from descriptors

https://jira.sw.ru/browse/PSBM-41416

v2:
 - In dump_task_creds() don't mangle the call for parasite_dump_creds
   and collect_lsm_profile
 - PARASITE_MAX_GROUPS takes parasite_dump_thread into account because
   dump_thread_common now serves two cases: for plain misc parameters
   fetching and for creds as well (depending on the context)
 - when test for dumpable we still require the seccomp filters
   to match, they can be different and we need to support such
   configuration too but not in this series

v3:
 - Rip off dump_task_creds completely, together with PARASITE_CMD_DUMP_CREDS,
   we dump creds unconditionally in dump_thread_common
 - the group leader thread data is fetched via new
   parasite_dump_thread_leader_seized helper

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:21:50 +03:00
Cyrill Gorcunov
eb5d84428e creds: restore -- Implement per-thread restore of credentials
Because the creds parameters are to be passed inside pie/restorer
code but read before thread_restore_args and task_restore_args
structures are allocated we need a small trick and prepare
creds int several stages

 - collect all creds data into separate private memory blobs
 - once all memory needed for restorer is allocated we relocate
   pointers in this blocks and setup
   thread_restore_args::thread_creds_args to appropriate
   address
 - restorer works as usual and setup creds parameters as before

v2:
 - fix addressing in positioning of rst_ memory (I've occasionally
   zap pointers and when been sending patches forgot to merge changes
   back, so while I've the series successfully restoring containers
   with different creds, if been merged the series won't work. So
   all changes are merged as appropriate)

 - drop module's global @cap_last_cap from pie/restorer.c

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:20:58 +03:00
Cyrill Gorcunov
212e210552 creds: Move proc_status_creds::cap_X at the end of structure
For easier comparision which gonna be addressed in next patch.

https://jira.sw.ru/PSBM-41416

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:18:39 +03:00
Cyrill Gorcunov
85ea6877ac creds: Allocate CredsEntry for every thread in core_entry_alloc
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:18:35 +03:00
Cyrill Gorcunov
dde0df4602 creds: protobuf -- Move @creds_entry into @thread_core_entry
Creds are per-thread data, declare them appropriately.
We will need this data to restore threads with different
credentials.

(In a scope of https://jira.sw.ru/browse/PSBM-41416)

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:18:32 +03:00
Cyrill Gorcunov
767e3e994e xmalloc: Add xmemdup helper
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:18:05 +03:00
Cyrill Gorcunov
9fa11f3aab arm: syscalls -- Wire in sys_setgroups
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:17:55 +03:00
Cyrill Gorcunov
c89ba9a4a4 ppc64: syscalls -- Wire in sys_setgroups
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:17:54 +03:00
Cyrill Gorcunov
592f45b10f x86: syscalls -- Wire in sys_setgroups
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:17:53 +03:00
MATSUMOTO, Ryosuke
b64159acdd Fix 'mnt_path' may be used uninitialized in this function
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-24 13:08:29 +03:00
Pavel Emelyanov
7f75e74ae7 zdtm_ct: Mount binfmt misc in ct creation
The mountpoints.c test creates such mount and criu will try to
kerndat-check one, so this fs should be on "host".

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-23 17:42:44 +03:00
Pavel Emelyanov
a5c2e8cd86 jenkins: Mount binfmt misc in run_ct
The mountpoints.c test creates such mount and criu will try to
kerndat-check one, so this fs should be on "host".

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-23 17:12:53 +03:00
Andrew Vagin
c3e9140304 jenkins: build criu with debuginfo
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-23 16:34:27 +03:00
Andrew Vagin
a21ea70df2 zdtm/file_locks04: use test_waitsig() to synchronize child and parent
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-23 15:50:48 +03:00
Andrew Vagin
bd806a7832 zdtm/fifo_wronly: wait when a child opens a file descriptor
A static test should not change its state during C/R

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-23 15:49:45 +03:00
Andrew Vagin
64744030f2 zdtm.sh: remove warnings about existent directories
and call mknod with correct argumetns

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-23 15:49:14 +03:00
Kirill Tkhai
36c4cba986 binfmt_misc: Skip dumping if it's not virtual
Similar to devtmpfs and devpts, skip binfmt_misc
mount if it's not virtual.

Signed-off-by: Kirill Tkhai <ktkhai@odin.com>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-23 15:44:45 +03:00
Pavel Emelyanov
505896e664 zdtm.py: Test how freeze cgroup works (v2)
V2: Fix the test/Makefile

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Acked-by:  Andrew Vagin <avagin@virtuozzo.com>
2015-12-23 15:43:37 +03:00
Andrei Vagin
4d90c130d1 zdtm/pstree: check return codes
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 18:20:35 +03:00
Andrei Vagin
bd649cebbf zdtm/pstree: read from a correct file descriptor
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 18:20:23 +03:00
Andrei Vagin
09d00c411e test: wait when a prepartion stage will be completed
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 18:20:15 +03:00
Andrew Vagin
f8550e45d6 pipe00: when while a child is preparing file descriptors
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 15:44:13 +03:00
Andrew Vagin
d35efb4abe zdtm/socket_close_data01: wait a child before c/r
A static test should not change its state during C/R.

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 15:14:29 +03:00
Andrew Vagin
2784095aaf zdtm/sigpending: wait a child before C/R
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 15:13:18 +03:00
Andrey Vagin
097d0618c4 zdtm: don't hardcode file names in test soruces
Cc: Kirill Tkhai <ktkhai@odin.com>
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Acked-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 14:00:29 +03:00
Cyrill Gorcunov
5ac87708a2 test: write_read10 -- Wait for children to create
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 11:05:52 +03:00
Cyrill Gorcunov
2529adceb5 test: write_read_10 -- Fix typo in testing opened file descriptor
Should be @child_fd instead of @fd

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 11:04:24 +03:00
Andrew Vagin
caeb8db5ce zdtm:mntns_open: wait when a child process opens descriptors
Reported-by: Mr Jenkins
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-22 11:04:16 +03:00
Andrew Vagin
7edbcdac86 zdtm/mountpoints: wait when a child process opens descriptors
Otherwise we can see this error:
5: Old files lost: set([])
5: New files appeared: set(['5', '6'])

Reported-by: Mr Jenkins
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 15:54:42 +03:00
Stanislav Kinsburskiy
64d311507c files-reg: fix compilation issues
Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 13:20:54 +03:00
Andrew Vagin
66468976c4 mountpoints: don't re-create /dev/null
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 12:03:39 +03:00
Pavel Tikhomirov
17c0461939 rst: set mode on ghost-files after write
Do so as in user-namespace on mainstream kernel writing to file
with suid bit set always cleares these bit, regardless to CAP_FSETID.
(see in should_remove_suid plane capable() is used, and same in VZ7)

Also we have an alternative to wait while several patches will get
in MS kernel:

[PATCH v4 0/7] Initial support for user namespace owned mounts
https://lkml.org/lkml/2015/9/23/591
[PATCH v2 12/18] fs: Don't remove suid for CAP_FSETID in s_user_ns
http://www.spinics.net/lists/linux-fsdevel/msg92533.html

Got error while suspending/resuming file_attr test in VZ7CT:
CT-102 criu# cat test/zdtm/live/static/file_attr.out
13:11:01.952: 30635: FAIL: file_attr.c:96: permissions have changed
(errno = 11 (Resource temporarily unavailable))

https://jira.sw.ru/browse/PSBM-41401
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 12:02:35 +03:00
Andrey Ryabinin
d0ff73077d dump: add timeout for collecting processes
Currently criu dump may hang indefinitely. E.g. in wait for task
that blocked in vfork() or task could be in D state for some other
reason. This patch adds time limit on collecting tasks during the
dump operation. If collecting processes takes too long, the dump
process will be terminated. Timeout is 5 seconds by default, but
it could be changed via parameter.

Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 12:00:49 +03:00
Andrey Ryabinin
9bfd62c52b dump: factor out cleanup code into separate functions
This moves cleanup code from cr_dump_tasks()/cr_pre_dump_tasks()
into separte functions. No functional changes here.

Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 12:00:10 +03:00
Andrey Ryabinin
411f639089 dump: fix return code in message on pre-dump failure
Obviously we should print pre_dump_ret value if pre-dump failed.

Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 11:59:47 +03:00
Andrey Ryabinin
7398d9fd35 seize: slightly cleanup collect_pstree() exit path.
Use 'goto err;' everywhere. Remove 'pstree_switch_state(root_item, TASK_ALIVE)'
on error path as all collect_pstree() callers do this if collect_pstree()
failed.

Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 11:59:40 +03:00
Dmitry Safonov
19a49e098d cr-restore: optimize {loginuid,oom_score_adj} restoring
1. Use PROC_SELF instead pid as prepare_pid_* used on restore only to
set value to current process.
2. Do not set default values.

Signed-off-by: Dmitry Safonov <dsafonov@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 11:58:05 +03:00
Stanislav Kinsburskiy
7f9b25bffa mount: use xsprintf() in resolve_external_mounts()
Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-12-21 11:57:03 +03:00