2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-31 06:15:24 +00:00
Commit Graph

5294 Commits

Author SHA1 Message Date
Kir Kolyshkin
08cdae901b log_init(): don't leak fd on error
Reported by Coverity, CID 51641.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:32:26 +03:00
Kir Kolyshkin
2b8f61393e tunfile_open(): don't leak fd on error path
Reported by Coverity, CID 51640.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:32:17 +03:00
Kir Kolyshkin
4f9e509c15 restore_fs(): don't leak fds on error
First, if we can't open dd_cwd, we leak opened dd_root.

Second, if chroot(dd_root) fails, we leak opened dd_cwd.

Instead of adding more close() statements in place, let's
change the code to close both fds on exit path.

Reported by Coverity, CID 51639, CID 51631.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:32:09 +03:00
Kir Kolyshkin
8d11952f6b serve_out_fd(): don't leak fd on error
Reported by Coverity, CID 51629.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:32:00 +03:00
Kir Kolyshkin
5e82fba10e open_inet_sk(): don't leak socket fd on error
Reported by Coverity, CID 51628.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:31:53 +03:00
Tycho Andersen
c6e724f61a lsm: add a test for apparmor
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:31:09 +03:00
Tycho Andersen
cf7a73389d test: add checkskip hook
Although there is the skip() macro, this doesn't actually do anything to skip
the test. I looked into adding a test_skip() function in the zdtm lib, but
there didn't seem an easy race-free way to propagate an exit code up to
run_test in zdtm.sh, so we add the checkskip hook for use in the apparmor test
(e.g. when apparmor isn't avialable in the kernel, or is disabled).

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:31:06 +03:00
Tycho Andersen
5fe3a138df lsm: add support for c/ring LSM profiles
This patch adds support for checkpoint and restore of two linux security
modules (apparmor and selinux). The actual checkpoint or restore code isn't
that interesting, other than that we have to do the LSM restore in the restorer
blob since it may block any number of things that we want to do as part of the
restore process.

I tried originally to get this to work using libraries in the restorer blob,
but I could _not_ get things to work correctly (I assume I was doing something
wrong with all the static linking, you can see my draft attempts here:
https://github.com/tych0/criu/commits/apparmor-using-libraries ). I can try to
resurrect this if it makes more sense, to do it that way, though.

v2: lsm_profile lives in creds.proto instead of the task core, look in a more
    canonical place for selinuxfs and don't try to special case any selinux
    profile names.
v3: only allow unconfined selinux profiles

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:31:05 +03:00
Tycho Andersen
a8b7e53b46 test: add mnt_ext_* tests to zdtm.sh
Note that we should only do the ns specific mounting when we are actually in a
ns test.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:30:12 +03:00
Tycho Andersen
8adbdbb1e6 test: add a test for mounts with external master peers
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:30:01 +03:00
Andrey Vagin
9997856e22 zdtm: check --ext-mount-map auto
Cc: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-08 15:29:56 +03:00
Cyrill Gorcunov
46a0e74d5f make: version -- Ensure that .gitid exist vefore read
In case if there is no .gitid file we might endup
with build error. Make sure it exist.

Reported-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-07 18:38:26 +03:00
Kir Kolyshkin
1e919423a8 cr_page_server(): avoid using uninit variable
In case opts.ps_socket is set (see commit 7058714),
we don't call accept() and so the peer address (caddr)
is left uninitialized, but we try to print it.

Fix by moving the printing code to right after accept().

Reported by Coverity, CID 51645.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-07 18:37:46 +03:00
Ruslan Kuprieiev
2403ee4695 libcriu: add skip_mnt and enable_fs support
Signed-off-by: Ruslan Kuprieiev <rkuprieiev@cloudlinux.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-07 18:37:16 +03:00
Laurent Dufour
c32add821f ppc64: belong on sysconf to get current page size
Page size may change, so page size should be read through sysconf.

Suggested-by: Christopher Covington <cov@codeaurora.org>
Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 23:12:13 +03:00
Laurent Dufour
61984edd1a ppc64: fixing comment
Fixing comment leading to think that 32bit tasks are supported, which is
not the case.

For the record, ppc64le is not supporting 32bit task, while ppc64 (the Big
Endian architecture) has an option to support 32bit task but CRIU doesn't
yet run on ppc64.

Reported-by: Christopher Covington <cov@codeaurora.org>
Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 23:12:09 +03:00
Cyrill Gorcunov
9b0746572e net: Drop @ri test but use known ARRA_SIZE
We might miss entry in "ri ? ri - 1" expression when ri = 1.
Lets use known array size instead.

For some reason it didn't trigger on my tests earlier.

Reported-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 22:28:28 +03:00
Andrey Vagin
4120637ffc zdtm: lock can belong to child or parent
Locks created by flock() are associated with an open file description
This means that duplicate file descriptors (created by, for  example,
fork or  dup)  refer  to  the  same  lock.

Reported-by: Mr Jenkins
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 22:01:24 +03:00
Andrew Vagin
76b4bad1fe test/Makefile: export ZDTM_ARGS
This variable is used from Makefile.zdtm

Signed-off-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 22:00:41 +03:00
Cyrill Gorcunov
0f857e0d5f net: Make @devconfs static
It is not used outside of net.c

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 14:14:30 +03:00
Cyrill Gorcunov
549998b118 sysctl: Pass number of requests in argument
This saves memory.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 14:14:24 +03:00
Cyrill Gorcunov
c8154faf2c net: Use snprintf instead of sprintf
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 14:14:01 +03:00
Laurent Dufour
fac0e2d11b cscope: ignore symbolic linked files
When it is run, cscope complains about files it cannot find:

cscope: cannot find file test/zdtm/live/streaming/socket-tcp.c
cscope: cannot find file test/zdtm/live/streaming/socket-tcp6.c
cscope: cannot find file test/zdtm/live/static/socket-tcpbuf-local.c
cscope: cannot find file test/zdtm/live/static/mntns_shared_bind02.c
cscope: cannot find file test/zdtm/live/static/socket_listen6.c
cscope: cannot find file test/zdtm/live/static/socket-tcp6.c
cscope: cannot find file test/zdtm/live/static/socket-tcpbuf6.c
cscope: cannot find file test/zdtm/live/static/mntns_link_ghost.c
cscope: cannot find file test/zdtm/live/transition/fork2.c

These files are relative symbolic links, and since cscope is run at the top
directory, the ../* links are not valid.

This patch removes the symbolic links from the list of scanned files. This
is not removing any tags since the real file are still scanned.

In addition, the test directory is not taken in account.

Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:47:41 +03:00
Kir Kolyshkin
3ea2fd78eb crtools.c: fix compilation by clang
Fix the following error:

> >   LINK     arch/x86/syscalls.built-in.o
> > arch/x86/crtools.c:36:20: error: unused function '__check_code_syscall'
> >       [-Werror,-Wunused-function]
> > static inline void __check_code_syscall(void)

As the function consists of a few BUILD_BUG_ONs, it gets optimized out.
Let's add __attribute__((__unused__)) so clang stops complaining.

[v2: s/used/unused/, fix all the arches, whitespace cleanup]

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:44:34 +03:00
Kir Kolyshkin
43fb948400 Makefile: allow optional local rules
I use Makefile.local to add my own rules for submitting a build
to Coverity. As those rules contain login credentials, they should
be kept private. Including Makefile.local (if present) seems to be
the best way to achieve that.

Also, add Makefile.local to .gitignore to make sure it never gets
commited into repo.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:43:55 +03:00
Andrey Vagin
af555618c6 image: don't free an img object from pb_write_one()
This is unexpected behaviour.
pb_write_one
  open_image_lazy
    do_open_image
      xfree(img)

255             if (pb_write_one(img, &cpu_info, PB_CPUINFO) < 0) {
>>> >>>     CID 92728:  Memory - illegal accesses  (USE_AFTER_FREE)
>>> >>>     Calling "close_image" dereferences freed pointer "img".
256                     close_image(img);
257                     return -1;
258             }

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:41:10 +03:00
Andrey Vagin
281a0f9d20 kerndat: pass null-terminated string into strstr
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:39:43 +03:00
Andrey Vagin
59bb688033 kerdat: don't leak a file descriptor
288             if (flock(fd, LOCK_SH)) {
289                     pr_perror("Can't take a lock\n");
>>> >>>     CID 92726:  Resource leaks  (RESOURCE_LEAK)
>>> >>>     Handle variable "fd" going out of scope leaks the handle.
290                     return -1;
291             }

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:39:19 +03:00
Kir Kolyshkin
8ac865f3ee Fix check for open_image() ret
When open_image() was modified to return a pointer rather than an int
in commit 295090c1, these two checks were overlooked and never fixed.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:37:16 +03:00
Kir Kolyshkin
b17962ad8d Fix pr_perror() usage
When using pr_perror(), format string should not end with \n,
as it is added by the macro itself.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Andrew Vagin <avagin@odin.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:36:29 +03:00
Laurent Dufour
de9df91002 Per architecture restorer trampolines
Some architectures like ppc64 requires a trampoline to be called prior to
the standard restorer services.

This patch introduces 3 trampolines which can be overwritten by
architectures in arch/x/include/asm/restore.h:
 - arch_export_restore_thread
 - arch_export_restore_task
 - arch_export_unmap

The architecture which doesn't need to overwrite them, has nothing to do.

Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-05-05 13:35:48 +03:00
Laurent Dufour
303b875892 arch/ppc64: Add PowerPC 64 LE support
This patch initiates the ppc64le architecture support in CRIU.

Note that ppc64 (Big Endian) architecture is not yet supported since there
are still several issues to address with this architecture. However, in the
long term, the two architectures should be addressed using the almost the
same code, so sharing the ppc64 directory.

Major ppc64 issues:

Loader is not involved when the parasite code is loaded. So no relocation
is done for the parasite code. As a consequence r2 must be set manually
when entering the parasite code, and GOT is not filled.

Furthermore, the r2 fixup code at the services's global address which has
not been fixed by the loader should not be run. Branching at local address,
as the assembly code does is jumping over it.

On the long term, relocation should be done when loading the parasite code.

We are introducing 2 trampolines for the 2 entry points of the restorer
blob.  These entry points are dealing with r2. These ppc64 specific entry
points are overwritting the standard one in sigreturn_restore() from
cr-restore.c.  Instead of using #ifdef, we may introduce a per arch wrapper
here.

CRIU needs 2 kernel patches to be run powerpc which are not yet upstream:
 - Tracking the vDSO remapping
 - Enabling the kcmp system call on powerpc

Feature not yet supported:
- Altivec registers C/R
- VSX registers C/R
- TM support
- all lot of things I missed..

Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-30 09:57:49 +03:00
Andrew Vagin
641693f8f0 proc_parse: remove a debug message
Signed-off-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-29 17:24:01 +03:00
Andrew Vagin
84c65f00f9 proc_parse: handle errors for breadline()
00:03:27.746 (00.008815) Error (bfd.c:149): bfd: Error reading file: No such process

Reported-by: Mr Jenkins
Signed-off-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-29 17:23:55 +03:00
Andrew Vagin
a2a0e2f2ed test/rpc: don't use shell-job
We want to execute this test in Jenkins.

Signed-off-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 17:51:41 +03:00
Andrew Vagin
fe0afaa787 test/rpc: unlink pidfile at the end
It's required to execute the test a few times

Signed-off-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 17:51:34 +03:00
Andrew Vagin
bc3ee6c50d jenkins: use tmpfs for images in criu-iter
It resuces I/O load.

Signed-off-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 17:51:30 +03:00
Andrey Vagin
4834c39d45 jenkins/criu-iter: reduce a number of jobs
maps007 fails due to intensive load

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 15:05:45 +03:00
Andrey Vagin
3785d112c5 test/unix-callback: don't use the --shell-job optios
It isn't required here and Mr Jenkins can't execute this job.

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 15:03:23 +03:00
Andrey Vagin
76df748c6c jenkins: use tmpfs for images in criu-sibling
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 15:03:22 +03:00
Oleg Nesterov
92480346e1 add RPC options for for --enable-fs and --skip_mount
Subject.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 14:57:27 +03:00
Oleg Nesterov
be4acd9d6e fix parse_mnt_flags() to dump/restore STRICTATIME correctly
CRIU always retores the mounts as MNT_RELATIME. This is because the
kernel uses this mode by default, so we need to pass MS_STRICTATIME
explicitely if we didn't see "noatime" or "MS_RELATIME".

While at it, make mnt_opt2flag[] and sb_opt2flag "static", otherwise
gcc actually creates these arrays on stack even if there are "const".

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 14:54:44 +03:00
Andrey Vagin
25267e5b30 lock: parse the lock field in fdinfo if it's avaliable (v2)
/proc/locks can contain a wrong pid for a lock and we always need to
check this fact.  Starting with the 4.1 kernel, locks are reported
in fdinfo.

v2: rebase to the curret master
    skip note_file_lock()

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 14:53:24 +03:00
Andrey Vagin
b9c14a09b0 kerndat: check the lock field in fdinfo (v2)
Starting with the 4.1 kernel, fdinfo contains information about file
locks.

v2: s/has_lock/has_fdinfo_lock/
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-27 14:53:22 +03:00
Andrew Vagin
a049768242 test: Fix random jenkins-other tests failures
- ext pipe test should build binar
- criu no longer accepts "extra" empty arguments
- adduser doesn't add more than one same user

All this came unnoticed due to error in tests failure detection
(36a13cbd test: don't ignore errors other other tests)

Signed-off-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-24 19:21:09 +03:00
Pavel Emelyanov
80d913dc41 test: Run unix-ext test with more debugging
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-24 19:19:20 +03:00
Andrey Vagin
36a13cbd5a test: don't ignore errors other other tests
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-24 15:57:18 +03:00
Cyrill Gorcunov
3d377863bf make: Introduce ldflags-y variable
We need a custom flags to build 32bit varian of criu
on 64bit host system, lets pass @ldflags-y here for
that.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-24 14:52:55 +03:00
Cyrill Gorcunov
b82a441525 x86: Add explicit type conversion for encode/decode pointer
Eliminate warning on 32bit builds.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-24 14:52:55 +03:00
Cyrill Gorcunov
05b28b7ba1 x86: Add explicit type conversion in show_rt_xsave_frame
So won't be a warning on x86-32 (I don't like PRI conversion,
it's ugly as hell, plain long is enough here).

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2015-04-24 14:52:55 +03:00