Hi Richard,

On 2016/3/10 4:44, Richard Weinberger wrote:
> Hmm, this needs rework. Having everything on the stack is not good.

Okay, I'll rework the functions whose stack size is greater than the
warning threshold by using kmalloc.

> Can you also create a selftest such that this bug cannot happen again?

It seems that instead of writing a self-test showing this problem cannot
happen again, I wrote a test that manifested another bug that is not
directly related to my patch.

Without applying my patch, the current UML should support XMM registers
because those are covered by _fpstate and PTRACE_GETFPREGS. But it
seemed that XMM registers are not restored after the signal handler returns.

In the following quick test, the main loop should run indefinitely
despite XMM registers are modified by the signal handler. But in UML,
the loop breaks randomly within a minute or two, showing that the
registers are corrupted. So far I haven't found the cause. Any hints?

Thanks,
Eli

---
/* test if signal handling preserves XMM registers */
#include <stdio.h>
#include <unistd.h>
#include <signal.h>

int count;

void sighandler(int signum)
{
        count++;

        /* alarm(1) without calling libc */
        asm("mov $0x1,%rdi");
        asm("mov $0x25,%rax");
        asm("syscall");

        asm("movq $0xdeadbeef,%r11");
        /* the following two instructions
         * modify xmm0 and xmm1 registers */
        asm("vmovq %r11,%xmm0");
        asm("vmovq %r11,%xmm1");
}

int main()
{
        struct sigaction act;
        double a = 3.14159, b = 2.71828;

        act.sa_handler = sighandler;
        act.sa_flags = 0;
        sigemptyset(&act.sa_mask);
        sigaction(SIGALRM, &act, NULL);

        alarm(1);

        /* this loop should run indefinitely */
        while (a + b == a + b) ;

        printf("count = %d\n", count);
        return 1;
}

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to