Commit graph

1305 commits

Author SHA1 Message Date
Pavel Emelyanov
ef2bd77ebd show: Beautify output of the -c data dump
Calculate the best width for address and print them all with it.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-29 09:05:21 +04:00
Andrey Vagin
f3e8977c73 proc: add a static buffer to prevent segv (v3)
A few of our functions use buffer and string functions.
All these functions require that a string contains '\0' at the end.
Before this patch we didn't guarantee that.

I've seen segmentation fault in parse_pid_stat_small.

v2: simplify code
v3: remove assignment, because it's redundant and a size of object file
become bigger.

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-05-03 13:09:20 +04:00
Cyrill Gorcunov
4f31e13c92 test, app-emu: Add HelloWorld java test
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-05-03 13:06:56 +04:00
Pavel Emelyanov
4debf589f6 tcp: Automate TCP stream c/r
This test is very basic :( Need more work on it.
One note about --close arg to crtools -- bash leaves all
fds open when laucnhing progams, and for restore this is
critical, as one of them can be busy. Iterating over all
the possibel fds and closing them is "do not want" thing.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 20:37:54 +04:00
Pavel Emelyanov
b2fced0601 tcp: Basic test of tcp conn
Only manual mode at the moment. Need to automate it later.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:21 +04:00
Pavel Emelyanov
f9a8673d52 tcp: Dump and restore support
What it does is uses the tcp repair engine from the kernel.

On dump the connection is locked with netfilter, socket is put
in the repair state and then its internals are dumped.

On restore we create a socket, put it into repair, dress it up
and then unlock all the connections at the very end.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:21 +04:00
Pavel Emelyanov
675b4698ce tcp: Put connection locking management over the code
When dump finished with error we should unlock all locked
previously connections.

When restoring we should collect connctions and unlock them
all at the end.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:21 +04:00
Pavel Emelyanov
a53aa45be0 tcp: Initial image description
Introduce the image file for tcp info, its entry and the show method.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:21 +04:00
Pavel Emelyanov
64c64e4f2c net: Add code for locking a tcp connection with netfilter
Between dump and restore of a tcp conn we have to keep the connection
blocked, since the socket doesn't exists in the kernel at this time
and any packet from peer will result in RST. Thus, add the -j DROP rule
for every connection we're about to repair.

Later, when we support containers, this will be extended to stop the
whole networking in a CT instead of cherry-peeking connections.

It does system("iptables ...") for this, but I'd prefer using the
libnetfilter-devel sometime in the future.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:21 +04:00
Pavel Emelyanov
051b0a1f02 tcp: Prepare sk-inet for dumping and restoring tcp connections
First of all -- to make crtools dump/restore established tcp sockets
you have to specify the --tcp-established options. By doing so you
inform crtools that

a) you know, that after dump there will be a netfilter rules blocking
   the dumped connections

b) you guarantee, that before restore this netfilter block is still
   there

What else this patch does is simple -- collects establised sockets and
calls the dump/restore tcp function (now empty) where appropriate.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:21 +04:00
Pavel Emelyanov
a915a4622d inet: Move inet sk cpt and rst structs to header
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:20 +04:00
Pavel Emelyanov
65e48c41b1 inet: Introduce helpers for binding and connecting inet socket on restore
Just a codemove.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:20 +04:00
Pavel Emelyanov
92a088a04c files: Restore fdflags on proper fd
After reopen_fd_as the original fd is closed.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 17:59:20 +04:00
Pavel Emelyanov
2d636abe9a gitignore: Add syscall generated files
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-28 16:35:40 +04:00
Pavel Emelyanov
52cb8d43b9 sk: Move unix socket code to separate file
Funny, but after this git thinks, that I've renamed the sockets.c
file into sk-unix.c one and fixed it a little bit %)

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:39 +04:00
Pavel Emelyanov
709bbc7f41 sk: Opencode sk_hash_lookup fns
For simpler unix socket code move.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:36 +04:00
Pavel Emelyanov
be6630bf27 sk: Opencode sk_hash_link
For simpler unix socket code move.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:35 +04:00
Pavel Emelyanov
518361dcaa sk: Move inet socket code to separate file
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:31 +04:00
Pavel Emelyanov
8cd64c5ae7 unix: Cleanup ext socket check
Rename the fn and fix indentation.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:30 +04:00
Pavel Emelyanov
fbcb43bd4b unix: Fix external socket dumping
Collect all unix sockets in a list while dumping to check
whether we've missed something early (at the restore time
it can be already late for roll-back).

Plus, fix the checks for external stream sockets.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:28 +04:00
Pavel Emelyanov
3b0a8e7c81 file: Factor out fowners and flags restore
This is common, that opened fd fix its fowner and flags. Make
a cuntion for this. Those that obtain fd with open() don't need
to restore flags though.

A thought -- do we need yet another abstraction between fdinfo and
type-d files?

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:26 +04:00
Pavel Emelyanov
1f94837afb sk: Sanitize socket's fowner and flags restore
The conn job misses fowner restoratio. Other places are ok, but toss
the code for easier next patching.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 15:30:25 +04:00
Cyrill Gorcunov
bd6e8df419 restorer: Drop setup_mm_special
The kernel patch titled

	c/r: prctl: Simplify PR_SET_MM on mm::code/data assignment

(which now in linux-next) allows us to setup code/data addresses
without requirement of underlied VMA. So revert commit
090513d5fd and make code
more simplier

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 00:56:00 +04:00
Cyrill Gorcunov
06986dfe50 proc: Fix parsing of stack string
Kernel 3.4-rc4 has two formats for stack
"[stack]" and "[stack:%d]" (for threads)
so adopt our parsing routine for both.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 00:55:20 +04:00
Cyrill Gorcunov
6670d294fb prctl: Update PR_GET_TID_ADDR definition
To reflect the change in kernel v3.4-rc4
update PR_GET_TID_ADDR and rename it to
PR_GET_TID_ADDRESS as it named in kernel.

[xemul: this fixes futex test broken with 3.4 rebase]

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-26 00:54:48 +04:00
Pavel Emelyanov
9a2d2a6990 fown: Fix compilation for older distros
Some of them (FC12 I debug on) doesn't have fown_ex stuff in their
libc. Add the missing declarations.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-25 21:36:43 +04:00
Pavel Emelyanov
59a2f13e7e Helper for si_code event extraction.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-25 21:35:40 +04:00
Pavel Emelyanov
b749f4b1c3 ptrace: Fix to use new (final) SEIZE functionality
Since 3.4-rc the seize-devel flag is removed, the stop event
is renamed (great) and the way si_code should be parsed has
been fixed.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-25 21:35:38 +04:00
Pavel Emelyanov
32dc4c5702 zdtm: Fix xids00 test compilation on older distrol
The getsid/getpig require _GNU_SOURCE on some libc-s.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-25 21:35:37 +04:00
Konstantin Khlebnikov
bef7092834 Replace printf format "0x%x" with "%#x"
printf() has standard flag for adding "0x" prefix before hexadecimal integer.

MOD='[-+]\?[0-9]*.\?[0-9]*[lL]*'
git grep -l "0x%${MOD}x" | xargs -n1 sed -e "s/0x%\(${MOD}\)x/%#\1x/g" -i

Signed-off-by:    Konstantin Khlebnikov <khlebnikov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-24 15:20:24 +04:00
Cyrill Gorcunov
f737cb441f sockets: Move packet queue handling into sk-queue.h
Easier to read.

[ xemul: There's a silent change in how sk buffer is read in -- before
  the patch there was a static buffer for data, now this thing is
  xrealloc-ed ]

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-23 14:23:40 +04:00
Cyrill Gorcunov
4c4a47a1a9 zdtm: Add socket6_udp test
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-23 14:11:31 +04:00
Cyrill Gorcunov
94657b6be1 sockets: Add support for IPv6 sockets
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-23 14:10:44 +04:00
Cyrill Gorcunov
cd29ec489b sockets: Use socket family in show_inetsk
Needed for IPv6.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-23 14:07:58 +04:00
Cyrill Gorcunov
702ab17e16 sockets: Show uncollected socket ino in hex
To be in same form as collected sockets.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-23 14:07:28 +04:00
Cyrill Gorcunov
9634153dfc sockets: Align output in collected unix/inet sockets debug printing
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-23 14:06:55 +04:00
Cyrill Gorcunov
84cc188b24 sockets: Use socket family for inet_ntop
Will need it for IPv6

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-23 14:06:11 +04:00
Cyrill Gorcunov
7a0f2389e7 make: Split generation of %.bin and %.bin.o into two rules
This allows to have more detailed control over files
generated and might be extended in future.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-19 12:12:06 +04:00
Cyrill Gorcunov
c7093a0dda make: Simplify Makefile.pie
No need to duplicate variable for pie.lds.S.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-19 12:11:36 +04:00
Cyrill Gorcunov
145525167c make: Fix typo in Makefile.syscall
Should be -fpie (actually it's not a problem
at moment since asm files have simple code
and work even without -fpie passed, but better
to fix it anyaway).

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-19 12:11:08 +04:00
Cyrill Gorcunov
19c1de828b sockets: Restore unconnected dgram sockets v7
In case if dgram socket peer is not connected back
we can try to resolve peer by name.

For security reason this happens only if '-x' option
is passed at checkpoint and restore time.

In particular this is needed for programs which do
use dgram socket to send messages to /dev/log.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-19 12:04:58 +04:00
Pavel Emelyanov
fd85b194ab dump: Init mmap's file pos
It's unused, but makes show command show 0, not trash.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-19 01:14:00 +04:00
Cyrill Gorcunov
2ea781a9ea syscalls: Complete redesign v9
At early days we've been using only a few syscalls
which together with debug compiler options always
produce relative addresses for memory variables used
in parasite and restorer blobs. Thus it came in unnoticed
that there is something worng with syscalls declarations
we use.

Basically all our syscalls are just a wrappers over inline
assembly code in form of

static long syscall2(int nr, long arg0, long arg1)
{
	long ret;
	asm volatile(
		"movl %1, %%eax		\t\n"
		"movq %2, %%rdi		\t\n"
		"movq %3, %%rsi		\t\n"
		"syscall		\t\n"
		"movq %%rax, %0		\t\n"
		: "=r"(ret)
		: "g" ((int)nr), "g" (arg0), "g" (arg1)
		: "rax", "rdi", "rsi", "memory");
	return ret;
}

so every argument treated to be plain long (even if the call
sematics implies it's a memory address passed but not some
integer direct value) and transferred via general purpose
register.

As being mentioned it caused no problems when debug options
specified at compile time, the compiler do not tries to optimize
addressing but generates code which always compute them.

The situation is changed if one is building crtools with
optimization enabled -- the compiler finds that arguments
are rather plain long numbers and might pass direct addresses
of variables, instead of generating relative addresses
(because function declarations have no pointers and 'g' in cope
 with 'mov' is used, which is of course wrong).

To fix all this -- now syscalls declarations are generated from
syscall.def file and function arguments are passed in conform
with x86-64 ABI.

This shrinks amount of source code needed to declare syscalls
and opens a way to use optimization.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 18:23:19 +04:00
Cyrill Gorcunov
88f7ae0186 parasite: Move bootstrap code into parasite-head-x86-64.S
Inline assembly is very convenient if a couple of
instructions is used but when it grows better to
move it out of wrapper C code and write in plain
assembly, after all we need a very precise control
in bootstrap code.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 18:22:52 +04:00
Cyrill Gorcunov
5fe6f90b19 make: Add own Makefile.pie for binary blobs we generate
Since the blob files are generated a different way
in compare with plain compiling we use for regular
*.c files -- add own Makefile.pie for this target.

This increases readability of general Makefile
and Makefile.pie itself.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 18:22:32 +04:00
Cyrill Gorcunov
4a2a290137 make: Generate offsets from linked files only
Instead of generating offsets from early compiled
object files (one day the offsets obtained from
there might be changed during linkage stage) better
to get them from a final stage where all object
files involved are linked into complete binary blob.

That happened that at early stage we indeed were using
only single file per parasite and restorer but at present
there a couple of file involved (and will be more in
future) so we need a safe approach.

Also note the symbols being exported are prefixed as
"__export_". This is easier approach for now. Putting
such symbols into separate section requires a way
more efforts to handle.

The main reason of having two files (Elf object
and binary blob) is to get 1:1 mapping between
symbols definition and their position in binary
target.

The exported symbols name addresses are obtained
from object file and used as offsets in binary
target.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 18:22:15 +04:00
Cyrill Gorcunov
662bfd5fbc make: Sanitize pie.lds.S
Build one "section for all" only. This reflects
what we really do runtime with generated parasite
and restorer blobs.

Signle section is named as ".crblob".

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 18:21:40 +04:00
Pavel Emelyanov
e2f745b920 files: Simplify fd-s restore
Don't re-read fdinfo image 4 times on restore, just use those collected
on me pstree_entry instance.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 16:27:46 +04:00
Pavel Emelyanov
a72d858652 files: Collect fdinfo-s on per-pstree_item list
Later we'll be able to restore them without re-reading the fdinfo file again.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 16:24:08 +04:00
Pavel Emelyanov
0e57ce29be files: Put fdinfo entry on fdinfo_list_entry
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2012-04-18 16:03:14 +04:00