On 2015-12-10 at 00:53 ron minnich <[email protected]> wrote:
> yeah I talked to barrett about this one and it seems D is not set.
> Would have been nice!

yep, tried that one.  =(  

i figure it's something crazy like that though.

i tried taking the code out of its current location and do something
similar, but couldn't trigger it:

e.g.

void xme(void)
{
    void *uaddr;
    uintptr_t frame[2];
    uintptr_t test[2];
    int err;

    assert(current);
    uaddr = mmap(current, 0, PGSIZE, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0);
    assert(uaddr);

    frame[0] = 0x0102030405060708;
    frame[1] = 0xa0b0c0d0e0f01122;

    memcpy(uaddr, frame, 2 * sizeof(uintptr_t));
    memcpy(test, uaddr, 2 * sizeof(uintptr_t));

    assert(memcmp(frame, test, 2 * sizeof(uintptr_t)) == 0);

    memset(test, 0, 2 * sizeof(uintptr_t));
    
    asm volatile("nop;nop;nop;");
    err = copy_from_user(test, uaddr, 2 * sizeof(uintptr_t));
    asm volatile("nop;nop;nop;");
    
    assert(!err);
    assert(memcmp(frame, test, 2 * sizeof(uintptr_t)) == 0);
    
}

and kfunc xme, or also run it from CTRL-Q (k/a/x/init.c).  but those
didn't trip.

then i figured i'd try forgetting the uaddr, and just clobber some user
memory with the same uaddr as in the failing case
(0x00007f7fffbfef50).  that didn't make a difference either.  the
alignment on both src and dst is 0x10, so that seems fine too.



-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to