[CRIU] Bug report: a process restored with criu crashes on SIGFPE

Andrei Vagin avagin at virtuozzo.com
Sun Jan 28 22:01:38 MSK 2018


On Sat, Jan 27, 2018 at 12:28:31PM -0800, Andrei Vagin wrote:
> On Fri, Jan 26, 2018 at 02:02:35PM +0200, Shlomi Matichin wrote:
> >    0x00007fc88f5c7788: jmpq   0x7fc88f5c7706
> >    0x00007fc88f5c778d: nopl   (%rax)
> >    0x00007fc88f5c7790: movl   $0x0,0x4(%r13)
> >    0x00007fc88f5c7798: jmpq   0x7fc88f5c76fc
> >    0x00007fc88f5c779d: nopl   (%rax)
> >    0x00007fc88f5c77a0: movl   $0x0,0x0(%r13)
> >    0x00007fc88f5c77a8: jmpq   0x7fc88f5c76ee
> >    0x00007fc88f5c77ad: pxor   %xmm3,%xmm3
> > => 0x00007fc88f5c77b1: cvtsd2ss %xmm0,%xmm3
> 
> Looks like we incorrectly save fpu state...
> 
> I tried to reproduce this issue on my laptop, in digital ocean with the same
> ubuntu version, and I even created an aws account. But in all my attempts,
> everything works as expected.
> 
> Could you write a detailed instruction how you reproduce this bug on a
> ec2 instance? What image do you use? Maybe you can create there an
> instance and give us access to it?
> 
> Could you show registers before and after dump/restore?
> 
> For that you need to attach to a target process by gdb and call " info
> all-registers", then you need to detach from a process, do dump/restore
> and attach again to get registers. Pls, don't forget to check that the
> issue is reproduced in this case.

We have an idea that mxcsr isn't dumped properlly in your case. And Dima
wrote a test to check this. Could you try to run it?

1. git clone https://github.com/avagin/criu -b fpu2
2. cd criu
3. apt-get update && apt-get install -y \
                build-essential \
                protobuf-c-compiler \
                libprotobuf-c0-dev \
                libprotobuf-dev \
                bsdmainutils \
                protobuf-compiler \
                python-minimal \
                libaio-dev \
                libcap-dev \
                iptables \
                libnl-3-dev \
		libnl-route-3-dev \
                libselinux-dev \
                pkg-config \
                git-core \
		libnet-dev \
		gcc \
		python-yaml protobuf-python
4. make
5. make -C test/zdtm/lib
6. python test/zdtm.py run -t zdtm/static/fpu02

In addition, you can try to run other fpu tests:
7. python test/zdtm.py run -t zdtm/static/sse00 -t zdtm/static/sse20  -t zdtm/static/mmx00 -t zdtm/static/fpu00

Thanks,
Andrei

> 
> Thanks,
> Andrei


More information about the CRIU mailing list