Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/checkpoint-restore/criu.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-06-24criu: Version 3.17.1v3.17.1masterAdrian Reber
* Fixes for pre-dump read mode * Fixes for mount-v2 * amdgpu plugin build and installation fixes * Some minor CI related fixes Signed-off-by: Adrian Reber <areber@redhat.com>
2022-06-22ci: Fix code indentRadostin Stoyanov
This patch contains auto-generated changes from `make indent` Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-06-22zdtm: add mnt_root_ext testPavel Tikhomirov
This test has one external mount [criumntns] /zdtm_root_ext.tmp -> [testmntns] /mnt_root_ext.test, and it specifically gives '--external mnt[MNT]:.zdtm_root_ext.tmp' option on restore without '/' to make dirname on it return static '.' path (see glibc dirname() code) and reproduce a segfault in resolve_mountpoint(). Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
2022-06-22util/mount-v2: fix resolve_mountpoint() to always return freeable pointerPavel Tikhomirov
Else we have a Segmentation fault in __move_mount_set_group() on xfree(source_mp) if resolve_mountpoint() returned statically allocated path. Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
2022-06-22zdtm: test multiple ext bindmounts with no common root and same masterPavel Tikhomirov
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
2022-06-22mount-v2: workaround for multiple external bindmounts with no common rootPavel Tikhomirov
It's a problem when while restoring sharing group we need to copy sharing between two mounts with non-intersecting roots, because kernel does not allow it. We have a case https://github.com/opencontainers/runc/pull/3442, where runc adds different devtmpfs file-bindmounts to container and there is no fsroot mount in container for this devtmpfs, thus mount-v2 faces the above problem. Luckily for the case of external mounts which are in one sharing group and which have non-intersecting roots, these mounts likely only have external master with no sharing, so we can just copy sharing from external source and make it slave as a workaround. https://github.com/checkpoint-restore/criu/issues/1886 Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
2022-06-22mount-v2: split out restore_one_sharing helperPavel Tikhomirov
This helper restores master_id and shared_id of first mount in the sharing group. It first copies sharing from either external source or internal parent sharing group and makes master_id from shared_id. Next it creates new shared_id when needed. All other mounts except first are just copied from the first one. Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
2022-06-22amdgpu: Set PLUGINDIR to /usr/lib/criuRadostin Stoyanov
Building the criu packages for Ubuntu/Debian fails with: mkdir: cannot create directory '/var/lib/criu': Permission denied This patch updates PLUGINDIR with the value /usr/lib/criu Fixes: #1877 Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-06-22amdgpu/Makefile: Fix include pathRadostin Stoyanov
When building packages for CRIU the source directory might have a name different than 'criu'. Fixes: #1877 Reported-by: @siris Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-06-22ci: test the read mode of pre-dumpAndrei Vagin
Signed-off-by: Andrei Vagin <avagin@gmail.com>
2022-06-22page-xfer: refactoring analyze_iov and fill_userbufAndrei Vagin
* handle unexpected errors of process_vm_readv * adjust riovs in analyze_iov * call handle_faulty_iov only if process_vm_readv returns EFAULT. Signed-off-by: Andrei Vagin <avagin@gmail.com>
2022-06-22pre-dump: call vmsplice with SPLICE_F_GIFTAndrei Vagin
In this case, vmplice attaches pages without coping them. Signed-off-by: Andrei Vagin <avagin@gmail.com>
2022-06-22page-xfer: adjust a buffer to a pipe sizeAndrei Vagin
Due to side effects of F_SETPIPE_SZ, the actual pipe size can be greater than PIPE_MAX_SIZE. Signed-off-by: Andrei Vagin <avagin@gmail.com>
2022-06-22page-xfer: use negative values for error codesAndrei Vagin
Signed-off-by: Andrei Vagin <avagin@gmail.com>
2022-06-22page-pipe: fix limiting a pipe sizeAndrei Vagin
But actually, 5a92f100b88e probably has to be reverted as a whole. PIPE_MAX_SIZE is the hard limit to avoid PAGE_ALLOC_COSTLY_ORDER allocations in the kernel. But F_SETPIPE_SZ rounds up a requested pipe size to a power-of-2 pages. It means that when we request PIPE_MAX_SIZE that isn't a power-of-2 number, we actually request a pipe size greater than PIPE_MAX_SIZE. Fixes: 5a92f100b88e ("page-pipe: Resize up to PIPE_MAX_SIZE") Signed-off-by: Andrei Vagin <avagin@gmail.com>
2022-06-22crit: Use same version as criuRadostin Stoyanov
Name collision with an abandoned project named 'crit' in pypi causes pip to show crit (CRiu Image Tool) as outdated. This patch updates crit to use the same version and license as criu. Fixes #1878 Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-06-22ci: Fix unsafe repository errorRadostin Stoyanov
Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-05-05criu: Version 3.17v3.17Adrian Reber
Amongst a huge number of fixes all over the place this release introduces: * mount-v2 engine * support for MAP_HUGETLB mappings * support for Linux Restartable Sequences * support for SOCK_SEQPACKET unix sockets * CRIU AMD GPU plugin * setsockopt(SO_BUF_LOCK) support for tcp sockets Signed-off-by: Adrian Reber <areber@redhat.com>
2022-05-05ci: skip new hugetlb maps09/maps10 tests for pre-dumpAlexander Mikhalitsyn
This commit has to be reverted once we fix the issue. Issue: https://github.com/checkpoint-restore/criu/issues/1868 Reported-by: Mr. Jenkins Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-05-05kerndat: handle the case when hugetlb isn't supportedAlexander Mikhalitsyn
Currently we check memfd_hugetlb by doing memfd_create("", MFD_HUGETLB). If we see EINVAL we report that it's not supported, but we can also get ENOENT error in such case in hugetlb_file_setup() while trying to find proper hugetlbfs mount. Reference: https://github.com/torvalds/linux/blob/06fb4ecfeac/fs/hugetlbfs/inode.c#L1465 Fixes: 4245e6b02fa ("check: Add a check for using memfd with hugetlb") Reported-by: Mr. Jenkins (ppc64le) Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-05-05zdtm: handle the case when hugetlb isn't supportedAlexander Mikhalitsyn
Fixes: e2e02bc83e ("zdtm: Add MAP_HUGETLB memory mapping test") Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-05-05ci: workaround race between sit module loading and bridge testAlexander Mikhalitsyn
https://github.com/checkpoint-restore/criu/issues/1866 Suggested-by: Andrei Vagin <avagin@gmail.com> Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-05-05ci: print kernel modules listAlexander Mikhalitsyn
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-05-05test: install criu in /usrAdrian Reber
GitHub Actions comes with pre-installed criu in /usr. configure scripts looking for CRIU will pickup the pre-installed version in /usr if we do not install CI criu also in /usr. Signed-off-by: Adrian Reber <areber@redhat.com>
2022-04-29readme: Add badge links to workflowsRadostin Stoyanov
This commit adds a link to the workflow runs for each badge. Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-04-29sk-unix: rework bind_on_deleted() return codesAndrey Zhadchenko
bind_on_delete() return code is only used for setting errno for pr_perror() This is mostly useless since a lot of syscalls already set it. All of non-syscall errors already have prints in case of failure. Fix bind_on_deleted() always returning 0 and simplify error juggling to returning -1 in case of errors. Fixes: #1771 Fixes: d0308e5ecc1c ("sk-unix: make criu respect existing files while restoring ghost unix socket fd") Signed-off-by: Andrey Zhadchenko <andrey.zhadchenko@virtuozzo.com>
2022-04-29proc_parse: Fix parsing bpf map_extraRadostin Stoyanov
The map_extra field has been introduced in Linux Kernel release 5.16 and does not exist in older kernel versions. The current parsing implementation fails when map_extra is missing. In particular, it tries to parse the `memlock` field as `map_extra` and fails but it does not exit with an error because map_extra is marked as "optional". It then tries to parse the `map_id` field as `memlock` and fails with an error because map_id is not optional: Error (criu/proc_parse.c:2161): parse_fdinfo_pid_s: error parsing [map_type:\t2] for 19: Success' To correctly handle this, we should try to parse again the next field when parsing of `map_extra` fails, without reading the next line from the bpfmap. Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-04-29bpf: update deprecated APIRadostin Stoyanov
bpf_create_map_xattr() has been replaced with bpf_map_create() https://github.com/libbpf/libbpf/commit/6cfb97c DECLARE_LIBBPF_OPTS has been renamed to LIBBPF_OPTS https://github.com/libbpf/libbpf/commit/ea6c242 Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2022-04-29ci: print mountinfo instead of mount cmd outputAlexander Mikhalitsyn
mountinfo contains more info than just "mount" output Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29ci: criu-fault: skip inotify_irmap fault-injection on btrfsAlexander Mikhalitsyn
It looks like we've got broken fhandles from fdinfo for inotifies/fanotifies for btrfs. I will look into that. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29scripts/ci: fix ZDTM_OPTS variable passingAlexander Mikhalitsyn
We have a separate target for alpine in script/ci/Makefile which defines some extra opts for zdtm using ZDTM_OPTIONS variable. But really it doesn't work. First of all, variable should be named as ZDTM_OPTS and also we have to specify it directly in the CONTAINER_RUNTIME cmdline to make it work. I've also changed variable value just to make it consistent with docker.env value which was really used. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29zdtm: temporary disable rseq02 testAlexander Mikhalitsyn
That's strange but rseq02 test fails with: 09:06:16.222: 51: exit 555f52082120 555f52082120 09:06:16.282: 51: exit 555f52082120 555f52082120 09:06:16.340: 51: exit 555f52082120 555f52082120 09:06:16.397: 51: exit 555f52082120 555f52082120 09:06:16.503: 51: exit 0 555f52082120 09:06:16.503: 51: FAIL: rseq02.c:235: Failed to increment per-cpu counter (errno = 2 (No such file or directory)) 09:06:16.503: 51: FAIL: rseq02.c:246: (errno = 16 (Device or resource busy)) It means that rseq_cs pointer was cleaned up by the kernel despite of NO_RESTART* flags. That's a hardly reproducible and I will investigate that. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29zdtm: add rseq02 transition test with NO_RESTART CS flagAlexander Mikhalitsyn
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29rseq: handle rseq/rseq_cs flags properlyAlexander Mikhalitsyn
Userspace may configure rseq cs abort policy by setting RSEQ_CS_FLAG_NO_RESTART_ON_* flags. In ("cr-dump: fixup thread IP when inside rseq cs") we have supported the case when process was caught by CRIU during rseq cs execution by fixing up IP to abort_ip. Thats a common case, but there is special flag called RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL, in this case we have to leave process IP as it was before CRIU seized it. Unfortunately, that's not all that we need here. We also must preserve (struct rseq)->rseq_cs field. You may ask like "why we need to preserve it by hands? CRIU is dumping all process memory and restores it". That's true. But not so easy. The problem here is that the kernel performs this field cleanup when it realized that the process gets out of rseq cs. But during dump/restore procedures we are executing parasite/restorer from the process context. It means that process will get out of rseq cs in any case and (struct rseq)->rseq_cs will be cleared by the kernel. So we need to restore this field by hands at the *last* stage of restore just before releasing processes. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29Revert "test: disable rseq also on Archlinux"Alexander Mikhalitsyn
This reverts commit f008f740411156b7309219c7e052cb8bc24d5aae. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29zdtm: add transition/rseq01 test for amd64Alexander Mikhalitsyn
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29cr-dump: fixup thread IP when inside rseq csAlexander Mikhalitsyn
If we caught the process when it's inside rseq critical section we have to handle it properly. From the kernel side of view, if the process is executing inside the rseq cs and gets a signal, rseq critical section execution will be interrupted and after signal handler execution, we will proceed to rseq cs abort handler instead of continuing normal rseq cs execution (if RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL isn't set). When CRIU seizes processes that's the same thing as getting signal from the rseq point of view. So we need to fixup instruction pointer to rseq cs abort handler address. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29compel: add helpers to get/set instruction pointerAlexander Mikhalitsyn
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29zdtm/static/rseq00: fix rseq test when linking with a fresh GlibcAlexander Mikhalitsyn
Fresh Glibc does rseq() register by default. We need to unregister rseq before registering our own. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29pie/restorer: unregister (g)libc rseq before memory restorationAlexander Mikhalitsyn
Fresh glibc does rseq registration by default during start_thread(). [ see https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=95e114a0919d844d8fe07839cb6538b7f5ee920e ] This cause process crashes during memory restore procedure, because memory which corresponds to the struct rseq will be unmapped and overriden in __export_restore_task. Let's perform rseq unregistration just before unmap_old_vmas(). To achieve that we need to determine (struct rseq) address at first while we are in Glibc (we do that in prep_libc_rseq_info using Glibc exported symbols). See also ("nptl: Add public rseq symbols and <sys/rseq.h>") https://sourceware.org/git?p=glibc.git;a=commit;h=c901c3e764d7c7079f006b4e21e877d5036eb4f5 ("nptl: Add <thread_pointer.h> for defining __thread_pointer") https://sourceware.org/git?p=glibc.git;a=commit;h=8dbeb0561eeb876f557ac9eef5721912ec074ea5 TODO: do the same for musl-libc if it will start to register rseq by default Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29include: add thread_pointer.h from GlibcAlexander Mikhalitsyn
Let's take thread_pointer() implementation from Glibc. It will be useful in the further because Glibc stores struct rseq on the TLS. Absolute address can be calculated as __criu_thread_pointer() + __rseq_offset. __rseq_offset is an exported symbol from Glibc itself. We need to have an ability to determine where struct rseq is stored to unregister it in CRIU during the restore stage. For different libc like musl-libc we will have to handle rseq separately depends on how struct rseq is stored. Right now that's not a problem because musl-libc has no rseq support, so we don't need to unregister it. https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=8dbeb0561eeb876f557ac9eef5721912ec074ea5 https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=cb976fba4c51ede7bf8cee5035888527c308dfbc Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29ci: add Fedora Rawhide based test on CirrusAlexander Mikhalitsyn
We have ability to use nested virtualization on Cirrus, and already have "Vagrant Fedora based test (no VDSO)" test, let's do analogical for Fedora Rawhide to get fresh kernel. Suggested-by: Adrian Reber <areber@redhat.com> Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29Revert "ci: disable glibc rseq support"Alexander Mikhalitsyn
Let's see how rseq() C/R feature works This reverts commit d99def7dcfa938918368c91021f72a77f738bc61. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29zdtm: add basic static/rseq00 test for rseq C/RAlexander Mikhalitsyn
Here we just want to check that if rseq was registered before C/R it remains registered after it. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29rseq: fail dump if rseq is used but host doesn't support get_rseq_conf featureAlexander Mikhalitsyn
A lot of kernel versions lacks support for ptrace(PTRACE_GET_RSEQ_CONFIGURATION). But the userspace may be fresh (for instance containers with fresh Fedora runs on CentOS 7 host). Consider two scenarious: - kernel has no ptrace(PTRACE_GET_RSEQ_CONFIGURATION) support 1. there is a process which use rseq => fail dump 2. there is no process which use rseq => we can dump without any problems But how to determine if process use rseq or not without get_rseq_conf feature? Let's just try to do rseq registration from the parasite. If rseq is already registered then we'll got EBUSY error. If not we'll success in registration. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29rseq: initial supportAlexander Mikhalitsyn
Support basic rseq C/R scenario. Assume that: - there are no processes with IP inside the rseq critical section (CS) - kernel has ptrace(PTRACE_GET_RSEQ_CONFIGURATION) support On dump: 1. use ptrace(PTRACE_GET_RSEQ_CONFIGURATION) to get struct rseq pointer, rseq size and signature from the kernel. 2. save to the image On restore: 1. get rseq ptr, size, signature from the image 2. register it back using rseq() from the restorer parasite Fixes: #1696 Reported-by: Radostin Stoyanov <radostin@redhat.com> Suggested-by: Florian Weimer <fweimer@redhat.com> Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29cr-check: Add ptrace rseq conf dump featureAlexander Mikhalitsyn
Add "get_rseq_conf" feature corresponding to the ptrace(PTRACE_GET_RSEQ_CONFIGURATION) support. Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29util: move fork_and_ptrace_attach helper from cr-checkAlexander Mikhalitsyn
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29kerndat: check for rseq syscall supportAlexander Mikhalitsyn
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
2022-04-29compel: add rseq syscall into compel std plugin syscall tablesAlexander Mikhalitsyn
Add rseq syscall numbers for: arm/aarch64, mips64, ppc64le, s390, x86_64/x86 Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>