- 14 Mar, 2017 40 commits
-
-
Cyrill Gorcunov authored
compel-host is needed to build criu itself and run during piegen blob generation. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
The default compel binary is the one compiled for target architecture. The compel-host one is compel compiled for current arch that is needed to build something for target arch. We could use default compel if target arch == current arch, but this makes things more complex. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
Use new compel.h header with appropriate types. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
This is fd passing via unix sockets (scm creds) suitable for use by parasite code. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
prologue.h defines sys_recv() macro - let's use it by now Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
The shmem pluging allows creation of shared memory segment between parasite code and the caller. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
The prologue includes routines needed for parasite blob to work and is always included with the std plugin. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Fixes: GEN compel/include/version.h GEN compel/include/version.h Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Delete plugins/include/asm/std directory - let it be without plugin name. Make symlinks to reuse criu's files, except those, which will be deleted after libcompel from criu (like syscalls). Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
The plugin provides basic features as string copying, syscalls, printing. Not used on its own by now but will be shipping by default with other plugins. With great help from Dmitry Safonov. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
Here we rather suffle source code into directories preparing ground for future work. Basically all this files movements should end up in the following compel/ tree structure compel/ ├── arch │ ├── aarch64 │ │ ├── plugins │ │ │ └── std │ │ └── src │ │ └── lib │ ├── arm ... │ ├── ppc64 ... │ └── x86 ... This is architectural part, where each arch consists of plugins/, and src/. src/ stands for code needed by compel cli + lib ├── include │ ├── compiler.h -> ../../criu/include/compiler.h │ ├── elf32-types.h │ ├── elf64-types.h │ ├── int.h -> ../../criu/include/asm-generic/int.h │ ├── piegen.h │ ├── shmem.h │ └── uapi │ ├── compel.h │ └── plugins.h Common includes + uapi ├── plugins │ ├── fds │ ├── shmem │ └── std Plugins source code └── src ├── lib │ ├── handle-elf-32.c -> handle-elf.c │ ├── handle-elf-32-host.c -> handle-elf-32.c │ ├── handle-elf.c │ └── handle-elf-host.c -> handle-elf.c compel library ├── main.c ├── main-host.c -> main.c compel cli └── shared └── fds.c shared code between plugins and compel cli Note: cross-compile won't work for a while. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
Will be used later. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
As we meet this before, I think, we should abort generation here. No point for making PIE with external symbols for us (at least, yet), so let's break build than find the problem at runtime. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
It's used in restorer to map compatible vDSO blob. When !CONFIG_COMPAT it's not needed and even more: vdso_fill_symtable_compat is macro and is undefined in that case. It will never shoot, as compat_vdso is always false for that case, but get rid of it. I also need to leave CONFIG_X86_64 here, as arch_prctl() is not defined for x86_32. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
The other way to solve this is to compile shared between CRIU and PIEs objects twice: without stack-protection and with environment choice. But I don't think it worth it. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
I think, we could transpher also `-m elf_i386' and `-m32' to compel output - but only in case if we will not support native x86_32 in compel (as they are wrong for native build). Or introduce something like compat_ia32 in compel option, not sure. Left in makefile for a while. Also it would be good to remove $(LD_R) in makefile and use compel output for ldflags, but that will be valid only when compel will support arm arch. Fixes (with the following patches): GEN criu/pie/parasite-compat-blob.h parasite_compat_blob: Error (compel/handle-elf-32.c:322): Unexpected undefined symbol: `__stack_chk_fail'. External symbol in PIE? Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Don't use compiler-provided memset in parasite. Fixes: commit 86434deba0b4 ("x86: dump TLS entries from GDT"). Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
As we will not support *native* 32-bit i386 build, I dropped some ifdefs, introducing instead of ifdef(CONFIG_X86_64) -- ifdef(CONFIG_COMPAT). CRIU should build now without ia32 Glibc and gcc-multilib support. Maybe I should add some warning that the build is made without compatible task support (or criu check should print that), will do as compat patches hit master. Fixes: #181 Cc: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Andrew Vagin <avagin@virtuozzo.com> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Acked-by:
Andrew Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
I'll wrap all compatible code in this CONFIG_COMPAT define. As I'll wrap also compatible parasite generation in this, it's also makefile variable, rather than just C define. The test itself consists of including stubs-32.h, which is glibc6-i686 presence test and is compiled with -m32 option, which is test for gcc-multilib. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Andrew Vagin <avagin@virtuozzo.com> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Reviewed-by:
Cyrill Gorcunov <gorcunov@openvz.org> Acked-by:
Andrew Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Laurent Dufour authored
In is_required_syscall() req_sysnr is set according to the native mode so we can check the syscall number directly against it. No functional change expected. Cc: Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Target criu depends on all, so this is redundant and makes noise: if you had typed `make` without arguments, it has built compel firstly, if you had typed `make criu`, it has built protobuf images firstly. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
@gpregs_case is a bit vague name, lets define traditional @mode here. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Tried hard to save compile-time static type checking and make code more readable, hiding native/compat details in macros. I think, it's better now. Also BTW fixes: #188 (and compatible zdtm test) Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Reviewed-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
So, I made a mistake in find_syscall: it can't use arch_task_compatible to find out in which mode the application is (native/compat). The reason is that arch_task_compatible uses PTRACE_GETREGSET. And at the moment of find_syscall we haven't yet seized the task. In this patch I move syscall's number check right before injecting a syscall, where we have parasite_ctl with all needed information about task's mode. This makes error-path for wrong syscall number longer and subtler (includes curing now), but I think it's a corner-case, so as it makes error-less path to execute_syscall shorter and without additional ptrace syscalls, it's better. Reported-by:
Andrew Vagin <avagin@virtuozzo.com> Cc: Andrew Vagin <avagin@virtuozzo.com> Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
ptrace_get_regs correctly returns error code in case of failure, but for debugging reasons let's add error printing in case of PTRACE_GETREGSET failed right after the call to ptrace(). Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Andrew Vagin authored
CID 163751 (#1 of 1): Big parameter passed by value (PASS_BY_VALUE) pass_by_value: Passing parameter regs of type user_regs_struct_t (size 224 bytes) by value. Signed-off-by:
Andrew Vagin <avagin@virtuozzo.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
- use entry/end from linkage - use macros for segments - use C style comments Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Tested-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
When mapping compatible vDSO in restorer blob (with vdso_map_compat), we don't know if the kernel will map firstly vvar pages or vdso pages. So we attempt search by checking ELF header magic on those pages. Which leads to following "errors", which this patch hides: pie: 1: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 1: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 7: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 7: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 6: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 6: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 4: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 5: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 4: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> pie: 5: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic misma> (for two vvar pages and 5 processes being restored). Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Otherwise compiler nicely align it for us on 24 bytes. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
The kernel patch "x86/signal: add SA_{X32,IA32}_ABI sa_flags" makes signal's ABI the same as sigaction's syscall ABI instead of per-thread's TIF_IA32 flag. So for delivering signals with compatible ABI, we need to call sigaction through raw int80 exception. This patch restores signals with int80: cr-restore part and PIE restorer's part lay in sigaction_compat.c, which compiled for criu binary and for restorer PIE. The PIE's part is needed strictly for setting SIGCHLD handler, other signal handlers are set in cr-restore (as it was before). Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
`make test COMPAT_TEST=y` will build all executable tests as i386 ELFs. For building tests, need the following libraries from multilib: libaio.i686 libaio-devel.i686 libcap-devel.i686 libcap.i686 Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Put dumped TLS descriptors back to GDT. Do it only if it was present. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Dump TLS with the help of SYS_get_thread_area. Primary for 32-bit applications, but this also may be used by mixed 64/32 bit code. I do not enable dumping for 64 bit unless we'll meet such code, but include 3 user_desc entries of TLS as not present in 64-bit images. That's arguable and I may include user_descs only for compat tasks. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
I prefer this to be done in callee, than in caller for simplicity. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
I need it to call sigaction from 32-bit code as kernel will set sigframe ABI according to sigaction call ABI. Also I will call {get,set}_thread_area to restore TLS entries. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Otherwise, we still have parsed x86_64 vdso symtable. After this: pie: 17917: vdso: Mapping compatible vDSO at 0x25000 pie: 17917: vdso: Parsing at 0x25000 0x29000 pie: 17917: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic m> pie: 17917: ismatch pie: 17917: vdso: Parsing at 0x26000 0x29000 pie: 17917: Error (pie/util-vdso-elf32.c:87): vdso: Elf header magic m> pie: 17917: ismatch pie: 17917: vdso: Parsing at 0x27000 0x29000 pie: 17917: vdso: PT_LOAD p_vaddr: 0x0 pie: 17917: vdso: DT_HASH: 0xb4 pie: 17917: vdso: DT_STRTAB: 0x1c0 pie: 17917: vdso: DT_SYMTAB: 0x130 pie: 17917: vdso: DT_STRSZ: 0x95 pie: 17917: vdso: DT_SYMENT: 0x10 pie: 17917: vdso: nbucket 0x3 nchain 0x9 bucket 0x270bc chain 0x270c8 Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-