On Fri, 2008-11-21 at 20:03 +1100, Paul Mackerras wrote: > Gabriel Paubert writes: > > > On Fri, Nov 21, 2008 at 10:52:14AM +1100, Paul Mackerras wrote: > > > Joakim Tjernlund writes: > > > > > > > This little hack changes the kernel sys call handling in an crude > > > > way and then it works. Apperently the kernel thinks is an error if the > > > > syscall returns a value between -_LAST_ERRNO and -1. > > > > > > Try this patch and let me if it fixes it. If it does I'll push it > > > upstream. > > > > With your patch, you won't get EFAULT if you pass a bad > > address, but a constant, time independent value, unless > > I miss something. > > I think you are missing something, namely that I put the call to > force_successful_syscall_return() AFTER the return -EFAULT. > > You should get an EFAULT error if the address is bad, i.e. on return > to userspace with cr0.SO = 1 and r3 = EFAULT (note, not -EFAULT). On > a non-error return you should get cr0.SO = 0 and r3 containing the > return value (even if it's -EFAULT). It's possible that glibc will > stuff it up again after that but I hope not.
With your patch: t1 = times((void*) 1); if (t1 == -1) { my_err = errno; printf("Errno:%d, %s\n", my_err, strerror(my_err)); } prints: Errno:14, Bad address _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev