From my test program, which is trying to recreate the issue we see when running 
valgrind against our application.
Our application, running on Ubuntu 12.04 LTS, is a complicated control program 
that is having a memory leak or corruption.
The program manages multiple containers which are running a mature program that 
doesn't need any valgrinding.  The
program does a fork() and in the child process the lxc library is called to 
start the mature program in a container 
using lxc_start().  My test program is a very simple thing that just does an 
lxc_start() or __lxc_start() against an 
existing container.  (The __lxc_start() and some supporting code were copied 
into my test program and compiled there.
It was simpler.  But, it's still __lxc_start(). )


Regards.
Mark K Vallevand

"If there are no dogs in Heaven, then when I die I want to go where they went." 
-Will Rogers

THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
MATERIAL and is thus for use only by the intended recipient. If you received 
this in error, please contact the sender and delete the e-mail and its 
attachments from all computers.


-----Original Message-----
From: lxc-users [mailto:lxc-users-boun...@lists.linuxcontainers.org] On Behalf 
Of Serge Hallyn
Sent: Wednesday, October 01, 2014 04:59 PM
To: LXC users mailing-list
Cc: valgrind-us...@lists.sourceforge.net
Subject: Re: [lxc-users] Using valgrind with lxc

You called __lxc_start() from where, how?

Quoting Vallevand, Mark K (mark.vallev...@unisys.com):
> I did this by calling __lxc_start().  So, lxc_check_inherited() didn't get 
> called.  That was this:
> > If I call __lxc_start() rather than lxc_start(), I see this:
> > vdr1: sync wake failure : Broken pipe
> > vdr1: failed to spawn 'vdr1'
> > And, just before that there is some complaining from valgrind:
> > ==25086== Syscall param clone(child_tidptr) contains uninitialised byte(s)

lxc uses the libc clone wrappers and does not pass in a tidptr...

> > ==25086==    at 0x56622E1: clone (clone.S:84)
> > ==25086==    by 0x4E3BD38: __lxc_start (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==25086==    by 0x4014C9: vgVdrStartClone (vgVdrTest.c:88)
> > ==25086==    by 0x400F0A: main (vgVdrTest.c:337)
> > ==25086==
> > ==1== Syscall param wait4(status) points to unaddressable byte(s)
> > ==1==    at 0x53607C4: wait (wait.c:32)
> > ==1==    by 0x4E3A400: ??? (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==1==    by 0x566231C: clone (clone.S:112)
> > ==1==  Address 0xffffffffffffffd4 is not stack'd, malloc'd or (recently) 
> > free'd

Would help to see file:line in the lxc code (as would using
a newer lxc :)

> > ==1== Invalid write of size 4
> > ==1==    at 0x4E3A4FF: ??? (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==1==    by 0x566231C: clone (clone.S:112)
> > ==1==  Address 0xffffffffffffffc0 is not stack'd, malloc'd or (recently) 
> > free'd
> > ==1==
> > ==1==
> > ==1== Process terminating with default action of signal 11 (SIGSEGV)
> > ==1==  Access not within mapped region at address 0xFFFFFFFFFFFFFFC0
> > ==1==    at 0x4E3A4FF: ??? (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==1==    by 0x566231C: clone (clone.S:112)
> 
> 
> Regards.
> Mark K Vallevand
> 
> "If there are no dogs in Heaven, then when I die I want to go where they 
> went." 
> -Will Rogers
> 
> THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
> MATERIAL and is thus for use only by the intended recipient. If you received 
> this in error, please contact the sender and delete the e-mail and its 
> attachments from all computers.
> 
> 
> -----Original Message-----
> From: lxc-users [mailto:lxc-users-boun...@lists.linuxcontainers.org] On 
> Behalf Of Serge Hallyn
> Sent: Wednesday, October 01, 2014 04:18 PM
> To: LXC users mailing-list
> Cc: valgrind-us...@lists.sourceforge.net
> Subject: Re: [lxc-users] Using valgrind with lxc
> 
> Hi,
> 
> For the sake of testing I'd go ahead and just 'return 0' at the
> top of lxc_check_inherited.
> 
> We can talk about adding an option to do this, i.e.
> lxc.close_all_fds = -1 maybe.  It's a very rare case where
> that should be done, though.
> 
> -serge
> 
> Quoting Vallevand, Mark K (mark.vallev...@unisys.com):
> > Valgrind meet containers.
> > Containers meet valgrind.
> > 
> > I've found what lxc doesn't like when running valgrind.
> > 
> > The lxc_start() checks to see if there are extra file descriptors open and 
> > won't call __lxc_start().
> > vdr1: inherited fd 1024 on 
> > /home/vallevand/trunk_s4m/s4m-appliance/src/vdrd/vgVdrTest
> > vdr1: inherited fd 1025 on /tmp/valgrind_proc_24989_cmdline_4fbfb9a5 
> > (deleted)VdrTest
> > vdr1: inherited fd 1026 on /dev/pts/1ind_proc_24989_cmdline_4fbfb9a5 
> > (deleted)VdrTest
> > vdr1: inherited fd 1027 on pipe:[768863]_proc_24989_cmdline_4fbfb9a5 
> > (deleted)VdrTest
> > vdr1: inherited fd 1028 on pipe:[768863]_proc_24989_cmdline_4fbfb9a5 
> > (deleted)VdrTest
> > 
> > Vdr1 is the name of my container.  All those open files in the child 
> > process are related to valgrind.
> > 
> > If I call __lxc_start() rather than lxc_start(), I see this:
> > vdr1: sync wake failure : Broken pipe
> > vdr1: failed to spawn 'vdr1'
> > And, just before that there is some complaining from valgrind:
> > ==25086== Syscall param clone(child_tidptr) contains uninitialised byte(s)
> > ==25086==    at 0x56622E1: clone (clone.S:84)
> > ==25086==    by 0x4E3BD38: __lxc_start (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==25086==    by 0x4014C9: vgVdrStartClone (vgVdrTest.c:88)
> > ==25086==    by 0x400F0A: main (vgVdrTest.c:337)
> > ==25086==
> > ==1== Syscall param wait4(status) points to unaddressable byte(s)
> > ==1==    at 0x53607C4: wait (wait.c:32)
> > ==1==    by 0x4E3A400: ??? (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==1==    by 0x566231C: clone (clone.S:112)
> > ==1==  Address 0xffffffffffffffd4 is not stack'd, malloc'd or (recently) 
> > free'd
> > ==1==
> > ==1== Invalid write of size 4
> > ==1==    at 0x4E3A4FF: ??? (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==1==    by 0x566231C: clone (clone.S:112)
> > ==1==  Address 0xffffffffffffffc0 is not stack'd, malloc'd or (recently) 
> > free'd
> > ==1==
> > ==1==
> > ==1== Process terminating with default action of signal 11 (SIGSEGV)
> > ==1==  Access not within mapped region at address 0xFFFFFFFFFFFFFFC0
> > ==1==    at 0x4E3A4FF: ??? (in /usr/lib/lxc/liblxc.so.0.7.5)
> > ==1==    by 0x566231C: clone (clone.S:112)
> > 
> > Our program is designed to close all open file descriptors in the child 
> > process before calling lxc_start().  That code can try to close all file 
> > descriptors to make sure something doesn't sneak through.  However, closing 
> > the file descriptors associated with valgrind does not work.  I get errno=0 
> > Bad File Descriptor.  Valgrind really has them held open.  I am running as 
> > root in all these tests.
> > 
> > I've also reproduced the problem using the 'lxc-' programs.  If you do 
> > something like 'lxc-create -n XXX' and then something like 'valgrind 
> > lxc-start -n XXX -- ls' you'll see it.  Well, the flavor of the error with 
> > open file descriptors.
> > 
> > My hopes aren't high, but any ideas are very welcome.
> > 
> > Regards.
> > Mark K Vallevand
> > "If there are no dogs in Heaven, then when I die I want to go where they 
> > went."
> > -Will Rogers
> > 
> > THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
> > MATERIAL and is thus for use only by the intended recipient. If you 
> > received this in error, please contact the sender and delete the e-mail and 
> > its attachments from all computers.
> > From: lxc-users [mailto:lxc-users-boun...@lists.linuxcontainers.org] On 
> > Behalf Of Vallevand, Mark K
> > Sent: Thursday, September 25, 2014 09:19 AM
> > To: lxc-users@lists.linuxcontainers.org
> > Subject: [lxc-users] Using valgrind with lxc
> > 
> > In our program, we do a fork() and in the child process the lxc library is 
> > called to start a program in a container using lxc_start().
> > 
> > We don't care about valgrind in the child process.  You can disable 
> > valgrind messages from child processes, but you cannot detach valgrind 
> > unless you exec() a new binary on top.  However, valgrind and lxc do not 
> > play nicely, at least with the versions in Ubuntu 12.04 LTS.   I'm getting 
> > an error back from lxc_start().  I'm having trouble getting logs to see why 
> > its failing, so I don't know exactly what's failing, yet.
> > 
> > But, I'm looking for any ideas for getting valgrind to work with programs 
> > that use lxc_start().
> > Any suggestions will be welcome.  And, thanks!
> > 
> > 
> > Regards.
> > Mark K Vallevand
> > "If there are no dogs in Heaven, then when I die I want to go where they 
> > went."
> > -Will Rogers
> > 
> > THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
> > MATERIAL and is thus for use only by the intended recipient. If you 
> > received this in error, please contact the sender and delete the e-mail and 
> > its attachments from all computers.
> 
> > _______________________________________________
> > lxc-users mailing list
> > lxc-users@lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/lxc-users
> 
> _______________________________________________
> lxc-users mailing list
> lxc-users@lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-users
> _______________________________________________
> lxc-users mailing list
> lxc-users@lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-users
_______________________________________________
lxc-users mailing list
lxc-users@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-users
_______________________________________________
lxc-users mailing list
lxc-users@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-users

Reply via email to