Looking at the kernel sources, it appears that the final version of this system call includes a timeout parameter. If you don't pass this parameter, chances are that it gets set to a random value pointing to invalid memory. That probably explains why you get an EFAULT no matter what you pass in the other parameters.
If you don't want to specify a timeout, just pass NULL as an additional parameter. That should fix your program.