Userspace checkpoint/restart hack: cryo
A guy named Marc Vertes wrote this as a little demonstration of checkpoint/restart. I've been using it to experiment with checkpoint/restart. I thought it might be of some use as we move subsystems to being helped by the kernel to checkpoint and restart.
It's ptrace-based, and stuck on i386 for now. It can probably be ported
elsewhere without too much trouble. It doesn't support *anything
fancy like multuiple tasks :). It has the advantage of being very feature-bare, and I think it is pretty easy to hack on. Whatever c/r support we add to the kernel could easily be added on and tested.
http://userweb.kernel.org/~daveh/cryo/cryo-001.tar.gz
Usage:
cr -p pidof task > checkpoint.cryo
cr -r < checkpoint.cryo
If anyone else has something simpler or easier to hack on, I'm all ears.
-- Dave
A message that is not in the archive (sent off-list or not yet received): 1209144259.12718.46.camel-FpcvD5N4B9G9xGwK5P7XA+TW4wlIGRCZ@public.gmane.org
Quoted 11 lines · Dave Hansen
A guy named Marc Vertes wrote this as a little demonstration of checkpoint/restart. I've been using it to experiment with checkpoint/restart. I thought it might be of some use as we move subsystems to being helped by the kernel to checkpoint and restart.
It's ptrace-based, and stuck on i386 for now. It can probably be ported
elsewhere without too much trouble. It doesn't support *anything
fancy like multuiple tasks :). It has the advantage of being very feature-bare, and I think it is pretty easy to hack on. Whatever c/r support we add to the kernel could easily be added on and tested.
Quoted 7 lines
http://userweb.kernel.org/~daveh/cryo/cryo-001.tar.gz
Usage:
cr -ppidof task> checkpoint.cryo
cr -r < checkpoint.cryoIf anyone else has something simpler or easier to hack on, I'm all ears.
Indeed. It looks simple enough.
do you have some kernel requirement ? I run Fedora 8
Here's my first try on a program calculating decimal of PI :
$ ./cr -p `pidof pi1` > pi1.cryo attaching to pid: 11082 [11087 cr.c:243 getfdinfo()] n : 0 WARNING (sci.c:242) unexpected signal for 11082: 11 [11087 sci.c:228 ptrace_waitsyscall()] WTERMSIG(status) : 11 ERROR (sci.c:383) ptrace_getregs(11082, 0xbfe4a3d0) errno=3: No such process ./cr[0x8051f10] ./cr[0x8049ce9] ./cr[0x804b7d2] ./cr[0x804f75b] ***STOP***
other terminal :
$ pi1 20000 pi1 - 20000 digits, 78.1 kbytes Segmentation fault (core dumped)
Thanks,
C.
Makefile 2008-04-28 09:02:50.000000000 +0200 renamed from Makefile~ 2008-04-25 19:05:57.000000000 +0200 +0 -3
@@ -7,6 +7,3 @@ all : $(BIN) $(MAN1) #cr: cr.o utils.o list_hash.o ptrace_linux_x86.o cr: cr.o utils.o list_hash.o sci.o injlib.o - -include ../version.mk -include ../c.mk
A message that is not in the archive (sent off-list or not yet received): 48159D1D.3050302-NmTC/[email protected]
Quoted 42 lines · Cedric Le Goater
Quoted 11 lines · Dave Hansen
A guy named Marc Vertes wrote this as a little demonstration of checkpoint/restart. I've been using it to experiment with checkpoint/restart. I thought it might be of some use as we move subsystems to being helped by the kernel to checkpoint and restart.
It's ptrace-based, and stuck on i386 for now. It can probably be ported
elsewhere without too much trouble. It doesn't support *anything
fancy like multuiple tasks :). It has the advantage of being very feature-bare, and I think it is pretty easy to hack on. Whatever c/r support we add to the kernel could easily be added on and tested.Quoted 7 lines
http://userweb.kernel.org/~daveh/cryo/cryo-001.tar.gz
Usage:
cr -ppidof task> checkpoint.cryo
cr -r < checkpoint.cryoIf anyone else has something simpler or easier to hack on, I'm all ears.
Indeed. It looks simple enough.
do you have some kernel requirement ? I run Fedora 8
Here's my first try on a program calculating decimal of PI :
$ ./cr -p `pidof pi1` > pi1.cryo attaching to pid: 11082 [11087 cr.c:243 getfdinfo()] n : 0 WARNING (sci.c:242) unexpected signal for 11082: 11 [11087 sci.c:228 ptrace_waitsyscall()] WTERMSIG(status) : 11 ERROR (sci.c:383) ptrace_getregs(11082, 0xbfe4a3d0) errno=3: No such process ./cr[0x8051f10] ./cr[0x8049ce9] ./cr[0x804b7d2] ./cr[0x804f75b] ***STOP***other terminal :
Quoted 8 lines
$ pi1 20000 pi1 - 20000 digits, 78.1 kbytes Segmentation fault (core dumped)Thanks,
C.
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
Output attached.
Regards,
Nadia
[root@akt cryo-001]# ./cr -p pidof msg1 > msg1.cryo
attaching to pid: 4689
[4695 cr.c:243 getfdinfo()] n : 0
[4695 cr.c:243 getfdinfo()] n : 1
[4695 cr.c:243 getfdinfo()] n : 2
DEBUG (utils.c::25) write_item() writing item named: 'pid' datasize: 4 to positi
on: 0
DEBUG (utils.c::25) write_item() writing item named: 'ppid' datasize: 4 to posit
ion: 10
DEBUG (utils.c::25) write_item() writing item named: 'exitsig' datasize: 4 to po
sition: 21
DEBUG (utils.c::25) write_item() writing item named: 'fpregs' datasize: 108 to p
osition: 35
DEBUG (utils.c::25) write_item() writing item named: 'regs' datasize: 68 to posi
tion: 154
DEBUG (utils.c::25) write_item() writing item named: 'exe' datasize: 32 to posit
ion: 230
DEBUG (utils.c::25) write_item() writing item named: 'argv' datasize: 7 to posit
ion: 269
DEBUG (utils.c::25) write_item() writing item named: 'env' datasize: 1137 to pos
ition: 283
DEBUG (utils.c::25) write_item() writing item named: 'cwd' datasize: 27 to posit
ion: 1429
DEBUG (utils.c::25) write_item() writing item named: 'sigact' datasize: 9240 to
position: 1463
DEBUG (utils.c::25) write_item() writing item named: 'sigmask' datasize: 128 to
position: 10715
DEBUG (utils.c::25) write_item() writing item named: 'sigpend' datasize: 128 to
position: 10855
DEBUG (utils.c::25) write_item() writing item named: 'FD' datasize: 0 to positio
n: 10995
[4695 cr.c:512 checkpoint()] pi->nf : 3
DEBUG (utils.c::25) write_item() writing item named: 'fdinfo' datasize: 148 to p
osition: 11000
DEBUG (utils.c::25) write_item() writing item named: 'fdinfo' datasize: 148 to p
osition: 11159
DEBUG (utils.c::25) write_item() writing item named: 'fdinfo' datasize: 148 to p
osition: 11318
DEBUG (utils.c::25) write_item() writing item named: 'END FD' datasize: 0 to pos
ition: 11477
DEBUG (utils.c::25) write_item() writing item named: 'SOCK' datasize: 0 to posit
ion: 11486
DEBUG (utils.c::25) write_item() writing item named: 'END SOCK' datasize: 0 to p
osition: 11493
DEBUG (utils.c::25) write_item() writing item named: 'MEM' datasize: 0 to positi
on: 11504getmaps() '' is anonymous (old test)getmaps() '' is anonymous (new test)getmaps() '' is anonymous (old test)getmaps() '' is anonymous (new test)getmaps() '' is anonymous (old test)getmaps() '' is anonymous (new test)getmaps() '[stack]' is anonymous (new test)getmaps() '[vdso]' is anonymous (new test)
DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to p
osition: 11510
DEBUG (cr.c::528) mem i=0 0x850000 -> 0x869000 /lib/ld-2.5.so
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 0 to pos
ition: 11669
DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to p
osition: 11678
DEBUG (cr.c::528) mem i=1 0x869000 -> 0x86a000 /lib/ld-2.5.so
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 0 to pos
ition: 11837
DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to p
osition: 11846
DEBUG (cr.c::528) mem i=2 0x86a000 -> 0x86b000 /lib/ld-2.5.so
DEBUG (cr.c::530) mem i=2 saved size = 4 KB
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 4096 to
position: 12005
DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to p
osition: 16113
DEBUG (cr.c::528) mem i=3 0x86d000 -> 0x9a4000 /lib/libc-2.5.so
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 0 to pos
ition: 16272
DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to p
osition: 16281
DEBUG (cr.c::528) mem i=4 0x9a4000 -> 0x9a6000 /lib/libc-2.5.so
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 0 to pos
ition: 16440
DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to p
osition: 16449
DEBUG (cr.c::528) mem i=5 0x9a6000 -> 0x9a7000 /lib/libc-2.5.so
DEBUG (cr.c::530) mem i=5 saved size = 4 KB
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 4096 to position: 16608 DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to position: 20716 DEBUG (cr.c::528) mem i=6 0x9a7000 -> 0x9aa000
DEBUG (cr.c::530) mem i=6 saved size = 12 KB
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 12288 to position: 20875 DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to position: 33176 DEBUG (cr.c::528) mem i=7 0x8048000 -> 0x8049000 /home/lkernel/src_ref/tests/msg1 DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 0 to position: 33335 DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to position: 33344 DEBUG (cr.c::528) mem i=8 0x8049000 -> 0x804a000 /home/lkernel/src_ref/tests/msg1 DEBUG (cr.c::530) mem i=8 saved size = 4 KB
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 4096 to position: 33503 DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to position: 37611 DEBUG (cr.c::528) mem i=9 0xb7f98000 -> 0xb7f99000
DEBUG (cr.c::530) mem i=9 saved size = 4 KB
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 4096 to position: 37770 DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to position: 41878 DEBUG (cr.c::528) mem i=10 0xb7fa6000 -> 0xb7fa8000
DEBUG (cr.c::530) mem i=10 saved size = 8 KB
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 8192 to position: 42037 DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to position: 50241 DEBUG (cr.c::528) mem i=11 0xbfc93000 -> 0xbfca8000 [stack]
DEBUG (cr.c::530) mem i=11 saved size = 84 KB
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 86016 to position: 50400 DEBUG (utils.c::25) write_item() writing item named: 'memseg' datasize: 148 to position: 136429 DEBUG (cr.c::528) mem i=12 0xffffe000 -> 0xfffff000 [vdso]
DEBUG (utils.c::25) write_item() writing item named: 'membuf' datasize: 0 to position: 136588 DEBUG (utils.c::25) write_item() writing item named: 'END MEM' datasize: 0 to position: 136597
_______________________________________________
Containers mailing list Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
https://lists.linux-foundation.org/mailman/listinfo/containers
A message that is not in the archive (sent off-list or not yet received): 481735A6.8070800-6ktuUTfB/[email protected]
Quoted 3 lines
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
cool. which kernel are you using ?
C.
A message that is not in the archive (sent off-list or not yet received): 48173CE1.7050503-NmTC/[email protected]
Quoted 11 lines · Cedric Le Goater
Quoted 4 lines
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
cool. which kernel are you using ?
C.
2.6.25-mm1 (sorry for the late answer - plenty of days off in France in May).
Regards,
Nadia
A message that is not in the archive (sent off-list or not yet received): 481ECA42.5060603-6ktuUTfB/[email protected]
Quoted 13 lines · Nadia Derbey
Quoted 11 lines · Cedric Le Goater
Quoted 4 lines
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
cool. which kernel are you using ?
C.
Quoted 5 lines
2.6.25-mm1 (sorry for the late answer - plenty of days off in France in May).
Regards,
Nadia
I'm playing with features in cryo, and keeping a git tree at:
git://git.sr71.net/~hallyn/cryodev.git
It's meant to exploit the extras which are in the -lxc kernel at lxc.sf.net. Current latest kernel patch is at
http://lxc.sourceforge.net/patches/2.6.26/2.6.26-rc2-mm1-lxc4/ This -lxc tree contains, for instance, Nadia's next_id patches, exploitation for setting ids for sysvipc and for tasks at fork, and updated ipc_setall patches (also using next_id). The version of cryo in my git tree exploits these. If you're root when you restart a task, it will clone a new set of namespaces and recreate your sysvipc objects, and it will reset your pids (even if you're not root if the pids are available).
Cryo is still rather touchy - I'm trying to track this down. Older distros seem to actually have the most success (I'm told FC6 is somewhat useful, while my FC8 kvm image is practically useless with cryo).
So if you want to play with it, please clone and do so, and send me any patches you think should go in.
thanks,
-serge
A message that is not in the archive (sent off-list or not yet received): 20080609130429.GA16297-r/[email protected]
Quoted 28 lines · Serge E. Hallyn
Quoted 15 lines · Nadia Derbey
Quoted 12 lines · Cedric Le Goater
Quoted 5 lines
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
cool. which kernel are you using ?
C.
Quoted 5 lines
2.6.25-mm1 (sorry for the late answer - plenty of days off in France in May).
Regards,
NadiaI'm playing with features in cryo, and keeping a git tree at:
git://git.sr71.net/~hallyn/cryodev.git
Quoted 9 lines
It's meant to exploit the extras which are in the -lxc kernel at lxc.sf.net. Current latest kernel patch is at
http://lxc.sourceforge.net/patches/2.6.26/2.6.26-rc2-mm1-lxc4/ This -lxc tree contains, for instance, Nadia'snext_idpatches, exploitation for setting ids for sysvipc and for tasks at fork, and updatedipc_setallpatches (also usingnext_id). The version of cryo in my git tree exploits these. If you're root when you restart a task, it will clone a new set of namespaces and recreate your sysvipc objects, and it will reset your pids (even if you're not root if the pids are available).
Serge,
I noticed that the sys_hijack() has disappeared from the lxc dev tree:
would you mind putting it back. I think it might be useful if we want to start a task in a newly defined cgroup, checkpoint it and then try to restart it. We will need to 'join' the restarted container to check if everything has correctly be restarted. Or may be is there another way to do that?
Regards,
Nadia
Quoted 16 lines
Cryo is still rather touchy - I'm trying to track this down. Older distros seem to actually have the most success (I'm told FC6 is somewhat useful, while my FC8 kvm image is practically useless with cryo).
So if you want to play with it, please clone and do so, and send me any patches you think should go in.
thanks,
-serge
_______________________________________________
Containers mailing list Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
https://lists.linux-foundation.org/mailman/listinfo/containers
A message that is not in the archive (sent off-list or not yet received): 484D4612.9000901-6ktuUTfB/[email protected]
Quoted 39 lines · Nadia Derbey
Quoted 28 lines · Serge E. Hallyn
Quoted 15 lines · Nadia Derbey
Quoted 12 lines · Cedric Le Goater
Quoted 5 lines
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
cool. which kernel are you using ?
C.
Quoted 5 lines
2.6.25-mm1 (sorry for the late answer - plenty of days off in France in May).
Regards,
NadiaI'm playing with features in cryo, and keeping a git tree at:
git://git.sr71.net/~hallyn/cryodev.gitQuoted 9 lines
It's meant to exploit the extras which are in the -lxc kernel at lxc.sf.net. Current latest kernel patch is at
http://lxc.sourceforge.net/patches/2.6.26/2.6.26-rc2-mm1-lxc4/ This -lxc tree contains, for instance, Nadia'snext_idpatches, exploitation for setting ids for sysvipc and for tasks at fork, and updatedipc_setallpatches (also usingnext_id). The version of cryo in my git tree exploits these. If you're root when you restart a task, it will clone a new set of namespaces and recreate your sysvipc objects, and it will reset your pids (even if you're not root if the pids are available).
Quoted 8 lines
Serge,
I noticed that the
sys_hijack()has disappeared from the lxc dev tree:
would you mind putting it back. I think it might be useful if we want to start a task in a newly defined cgroup, checkpoint it and then try to restart it. We will need to 'join' the restarted container to check if everything has correctly be restarted. Or may be is there another way to do that?
Well it *could* be done similar to how cryo itself works, by ptracing the destination task and making it fork a task which execve()s a process to do the querying. But yuck.
Kathy, I'm sorry, I know I asked you to take sys_hijack() out. Could you please put it back in? Preferably at the end of the queue, as I don't want other patches having to be ported on top of it since its future is very suspect... Let me know if you have trouble porting it, but it should be pretty simple.
thanks,
-serge
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): 484E1BD3.40401-QcUrd9fbWu1x7SfHBjqd8AC/[email protected]
Quoted 77 lines · kathys
Quoted 55 lines · Serge E. Hallyn
Quoted 39 lines · Nadia Derbey
Quoted 27 lines · Serge E. Hallyn
Quoted 14 lines · Nadia Derbey
Quoted 11 lines · Cedric Le Goater
Quoted 5 lines
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
cool. which kernel are you using ?
C.
Quoted 6 lines
2.6.25-mm1 (sorry for the late answer - plenty of days off in France in May).
Regards,
NadiaI'm playing with features in cryo, and keeping a git tree at:
git://git.sr71.net/~hallyn/cryodev.gitQuoted 10 lines
It's meant to exploit the extras which are in the -lxc kernel at lxc.sf.net. Current latest kernel patch is at
http://lxc.sourceforge.net/patches/2.6.26/2.6.26-rc2-mm1-lxc4/ This -lxc tree contains, for instance, Nadia'snext_idpatches, exploitation for setting ids for sysvipc and for tasks at fork, and updatedipc_setallpatches (also usingnext_id). The version of cryo in my git tree exploits these. If you're root when you restart a task, it will clone a new set of namespaces and recreate your sysvipc objects, and it will reset your pids (even if you're not root if the pids are available).Quoted 9 lines
Serge,
I noticed that the
sys_hijack()has disappeared from the lxc dev
tree: would you mind putting it back. I think it might be useful if we want to start a task in a newly defined cgroup, checkpoint it and then try to restart it. We will need to 'join' the restarted container to check if everything has correctly be restarted. Or may be is there another way to do that?Well it *could* be done similar to how cryo itself works, by ptracing the destination task and making it fork a task which execve()s a process to do the querying. But yuck.
Quoted 6 lines
Kathy, I'm sorry, I know I asked you to take
sys_hijack()out. Could you please put it back in? Preferably at the end of the queue, as I don't want other patches having to be ported on top of it since its future is very suspect... Let me know if you have trouble porting it, but it should be pretty simple.I added
sys_hijack()(namespaces-introduce-sys_hijack.patch) back, with a little bit of massaging to get it to port properly (as Cedrics clone64-change-clone_flag-type-to-u64.patch changes unsigned long to u64) but was unable to compile. I received the following errors:/scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c: In function '
do_fork_task':
/scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c:1342:
warning: format '%1lx' expects type 'long unsigned int', but argument 3 has type 'u64' /scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c: At top level:
/scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c:1416:
error: conflicting types for 'do_fork'
Quoted 2 lines
/scratch/kathys/containers/kernel_trees/upstream/include/linux/sched.h:1868:
error: previous declaration of 'do_fork' was here
Did you change the do_fork definition in sched.h?
-serge
Quoted 51 lines
I changed the patch as follows so it would apply properly, but I can't work out why it breaks now, but not previously:
Original patch from 2.6.26-rc2-mm1-lxc3:
(quoted diff) +2
-7@@ -1307,13 +1313,8 @@ static int fork_traceflag(unsigned clone return 0; } -/* - * Ok, this is the main fork-routine. - * - * It copies the process, and if successful kick-starts - * it and waits for it to finish using the VM if required. - */ -long do_fork(unsigned long clone_flags, +long do_fork_task(struct cgroup *cgroup, + unsigned long clone_flags, unsigned long stack_start, struct pt_regs *regs, unsigned long stack_size,Changed to:
(quoted diff) +2
-7@@ -1308,13 +1314,8 @@ static int fork_traceflag(u64 clone_flag return 0; } -/* - * Ok, this is the main fork-routine. - * - * It copies the process, and if successful kick-starts - * it and waits for it to finish using the VM if required. - */ -long do_fork(u64 clone_flags, +long do_fork_task(struct cgroup *cgroup, + u64 clone_flags, unsigned long stack_start, struct pt_regs *regs, unsigned long stack_size,Quoted 11 lines
thanks,
-serge
_______________________________________________
Containers mailing list Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
https://lists.linux-foundation.org/mailman/listinfo/containers
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): 484F0DC7.5080209-QcUrd9fbWu1x7SfHBjqd8AC/[email protected]
PATCH 1/1 actually check va randomization
Rather than just documenting this in the readme, actually spit out a warning on it.
You can pull from: git://git.sr71.net/~dave/cryo-forhallyn.git/
-- Dave
Re: [GIT PATCH] actually check va randomization
Quoted 6 lines · Dave Hansen
Rather than just documenting this in the readme, actually spit out a warning on it.
You can pull from:
git://git.sr71.net/~dave/cryo-forhallyn.git/-- Dave
Thanks, merged.
-serge
Re: [GIT PATCH] actually check va randomization
In reply to Dave HansenDave Hansen [[email protected]] wrote:
| Rather than just documenting this in the readme, actually spit | out a warning on it.
Why not just bail out ? Its mostly unreliable at that point anyway. Besides, the warning can get buried in lot of other output.
---
From 84d005031a8a17bdca62dc541c296a3bea74658c Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <[email protected]>
Date: Wed, 11 Jun 2008 11:22:17 -0700
Subject: [PATCH] cryo currently requires randomize_va_space to be 0. Fail if it is not.
--- cr.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
cr.c +1 -0
@@ -1464,6 +1464,7 @@ void check_for_va_randomize(void)return ;fprintf (stderr,"WARNING: %s is set to: %d\n" ,VA_RANDOM_FILE , enabled);fprintf (stderr," Please set to 0 to make cryo more reliable\n" ); +exit (1 ); }void usage (void )
Signature · 1 line
1.5.2.5
A message that is not in the archive (sent off-list or not yet received): 20080611183551.GA32012-r/[email protected]
Re: [GIT PATCH] actually check va randomization
Quoted 21 lines · Quoting sukadev-r/[email protected]…
Dave Hansen [[email protected]] wrote:
| Rather than just documenting this in the readme, actually spit | out a warning on it.Why not just bail out ? Its mostly unreliable at that point anyway. Besides, the warning can get buried in lot of other output.
---Quoted 1 line
From
84d005031a8a17bdca62dc541c296a3bea74658cMon Sep 17 00:00:00 2001From: Sukadev Bhattiprolu <[email protected]>
Date: Wed, 11 Jun 2008 11:22:17 -0700
Subject: [PATCH] cryo currently requiresrandomize_va_spaceto be 0. Fail if it is not.--- cr.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)cr.c +0
-0
cr.c void check_for_va_randomize(void) · line 1470
Quoted 7 lines
cr.c +1
-0@@ -1464,6 +1464,7 @@ void check_for_va_randomize(void)return ;fprintf (stderr,"WARNING: %s is set to: %d\n" ,VA_RANDOM_FILE , enabled);fprintf (stderr," Please set to 0 to make cryo more reliable\n" ); +exit (1 ); }void usage (void )
Oh... Thanks, Suka, I'd just done the same thing using an ERROR().
thanks,
-serge
A message that is not in the archive (sent off-list or not yet received): 20080610181756.GB13817-r/[email protected]
Quoted 91 lines · Serge E. Hallyn
Quoted 87 lines · kathys
Quoted 63 lines · Serge E. Hallyn
Quoted 46 lines · Nadia Derbey
Quoted 32 lines · Serge E. Hallyn
Quoted 17 lines · Nadia Derbey
Quoted 13 lines · Cedric Le Goater
Quoted 6 lines
Looks like it has worked for me (msg1 creates 1000 msg queues, sleeps for a while and then removes the msg queues).
cool. which kernel are you using ?
C.
Quoted 7 lines
2.6.25-mm1 (sorry for the late answer - plenty of days off in France in May).
Regards,
NadiaI'm playing with features in cryo, and keeping a git tree at:
git://git.sr71.net/~hallyn/cryodev.gitQuoted 11 lines
It's meant to exploit the extras which are in the -lxc kernel at lxc.sf.net. Current latest kernel patch is at
http://lxc.sourceforge.net/patches/2.6.26/2.6.26-rc2-mm1-lxc4/ This -lxc tree contains, for instance, Nadia'snext_idpatches, exploitation for setting ids for sysvipc and for tasks at fork, and updatedipc_setallpatches (also usingnext_id). The version of cryo in my git tree exploits these. If you're root when you restart a task, it will clone a new set of namespaces and recreate your sysvipc objects, and it will reset your pids (even if you're not root if the pids are available).Quoted 10 lines
Serge,
I noticed that the
sys_hijack()has disappeared from the lxc dev
tree: would you mind putting it back. I think it might be useful if we want to start a task in a newly defined cgroup, checkpoint it and then try to restart it. We will need to 'join' the restarted container to check if everything has correctly be restarted. Or may be is there another way to do that?Well it *could* be done similar to how cryo itself works, by ptracing the destination task and making it fork a task which execve()s a process to do the querying. But yuck.
Quoted 7 lines
Kathy, I'm sorry, I know I asked you to take
sys_hijack()out. Could you please put it back in? Preferably at the end of the queue, as I don't want other patches having to be ported on top of it since its future is very suspect... Let me know if you have trouble porting it, but it should be pretty simple.I added
sys_hijack()(namespaces-introduce-sys_hijack.patch) back, with a little bit of massaging to get it to port properly (as Cedrics clone64-change-clone_flag-type-to-u64.patch changes unsigned long to u64) but was unable to compile. I received the following errors:/scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c: In function '
do_fork_task':
/scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c:1342:
warning: format '%1lx' expects type 'long unsigned int', but argument 3 has type 'u64' /scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c: At top level:
/scratch/kathys/containers/kernel_trees/upstream/kernel/fork.c:1416:
error: conflicting types for 'do_fork'
Quoted 9 lines
Quoted 3 lines
/scratch/kathys/containers/kernel_trees/upstream/include/linux/sched.h:1868:
error: previous declaration of 'do_fork' was hereDid you change the
do_forkdefinition insched.h?-serge
I changed definition in sched.h to match do_fork in fork.c
Quoted 55 lines
Quoted 53 lines
I changed the patch as follows so it would apply properly, but I can't work out why it breaks now, but not previously:
Original patch from 2.6.26-rc2-mm1-lxc3:
(quoted diff) +2
-7@@ -1307,13 +1313,8 @@ static int fork_traceflag(unsigned clone return 0; } -/* - * Ok, this is the main fork-routine. - * - * It copies the process, and if successful kick-starts - * it and waits for it to finish using the VM if required. - */ -long do_fork(unsigned long clone_flags, +long do_fork_task(struct cgroup *cgroup, + unsigned long clone_flags, unsigned long stack_start, struct pt_regs *regs, unsigned long stack_size,Changed to:
(quoted diff) +2
-7@@ -1308,13 +1314,8 @@ static int fork_traceflag(u64 clone_flag return 0; } -/* - * Ok, this is the main fork-routine. - * - * It copies the process, and if successful kick-starts - * it and waits for it to finish using the VM if required. - */ -long do_fork(u64 clone_flags, +long do_fork_task(struct cgroup *cgroup, + u64 clone_flags, unsigned long stack_start, struct pt_regs *regs, unsigned long stack_size,Quoted 13 lines
thanks,
-serge
_______________________________________________
Containers mailing list Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
https://lists.linux-foundation.org/mailman/listinfo/containers