OK for me.
On Tue, Dec 15, 2015 at 9:31 AM, Barret Rhoden <[email protected]> wrote: > It needed a switch_to(tmp). I also reorganized it so that we can clean up > after a failure. For instance, we need to switch_back and decref tmp. > > Signed-off-by: Barret Rhoden <[email protected]> > --- > kern/src/ktest/pb_ktests.c | 55 > +++++++++++++++++++++++++++++----------------- > 1 file changed, 35 insertions(+), 20 deletions(-) > > diff --git a/kern/src/ktest/pb_ktests.c b/kern/src/ktest/pb_ktests.c > index 087816262967..b7fd96fd2474 100644 > --- a/kern/src/ktest/pb_ktests.c > +++ b/kern/src/ktest/pb_ktests.c > @@ -2168,24 +2168,8 @@ bool test_u16pool(void) > return FALSE; > } > > -bool test_uaccess(void) > +static bool uaccess_mapped(void *addr, char *buf, char *buf2) > { > - char buf[128] = { 0 }; > - char buf2[128] = { 0 }; > - struct proc *tmp; > - int err; > - static const size_t mmap_size = 4096; > - void *addr; > - > - err = proc_alloc(&tmp, 0, 0); > - KT_ASSERT_M("Failed to alloc a temp proc", err == 0); > - /* Tell everyone we're ready in case some ops don't work on > PROC_CREATED */ > - __proc_set_state(tmp, PROC_RUNNABLE_S); > - > - addr = mmap(tmp, 0, mmap_size, PROT_READ | PROT_WRITE, > MAP_PRIVATE, -1, 0); > - > - KT_ASSERT_M("Mmap failed", addr != MAP_FAILED); > - > KT_ASSERT_M( > "Copy to user (u8) to mapped address should not fail", > copy_to_user(addr, buf, 1) == 0); > @@ -2227,9 +2211,11 @@ bool test_uaccess(void) > KT_ASSERT_M("The copied string content should be matching", > memcmp(buf, "Akaros", 7) == 0); > > - munmap(tmp, (uintptr_t) addr, mmap_size); > - > + return TRUE; > +} > > +static bool uaccess_unmapped(void *addr, char *buf, char *buf2) > +{ > KT_ASSERT_M("Copy to user (u8) to not mapped address should fail", > copy_to_user(addr, buf, 1) == -EFAULT); > KT_ASSERT_M("Copy to user (u16) to not mapped address should fail", > @@ -2264,10 +2250,39 @@ bool test_uaccess(void) > KT_ASSERT_M("Copy to user with kernel side source pointer should > fail", > copy_to_user(buf, buf2, sizeof(buf)) == > -EFAULT); > > - proc_decref(tmp); > return TRUE; > } > > +bool test_uaccess(void) > +{ > + char buf[128] = { 0 }; > + char buf2[128] = { 0 }; > + struct proc *tmp; > + uintptr_t switch_tmp; > + int err; > + static const size_t mmap_size = 4096; > + void *addr; > + bool passed = FALSE; > + > + err = proc_alloc(&tmp, 0, 0); > + KT_ASSERT_M("Failed to alloc a temp proc", err == 0); > + /* Tell everyone we're ready in case some ops don't work on > PROC_CREATED */ > + __proc_set_state(tmp, PROC_RUNNABLE_S); > + switch_tmp = switch_to(tmp); > + addr = mmap(tmp, 0, mmap_size, PROT_READ | PROT_WRITE, > MAP_PRIVATE, -1, 0); > + if (addr == MAP_FAILED) > + goto out; > + passed = uaccess_mapped(addr, buf, buf2); > + munmap(tmp, (uintptr_t) addr, mmap_size); > + if (!passed) > + goto out; > + passed = uaccess_unmapped(addr, buf, buf2); > +out: > + switch_back(tmp, switch_tmp); > + proc_decref(tmp); > + return passed; > +} > + > bool test_sort(void) > { > int cmp_longs_asc(const void *p1, const void *p2) > -- > 2.6.0.rc2.230.g3dd15c0 > > -- > 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. > -- 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.
