On Thu, Jan 8, 2015 at 1:16 AM, Fam Zheng [off-list ref] wrote:
+ if (!timeout || (timeout->tv_nsec == 0 && timeout->tv_sec == 0)) {
..
+ } else if (timeout->tv_nsec >= 0 && timeout->tv_sec >= 0) {
the check for tv_nsec is not enough, which points
to the fragility of passing user timespec around.
I think it would be safer and cleaner to do it futex style:
if (copy_from_user(&ts, utime, sizeof(ts)) != 0)
return -EFAULT;
if (!timespec_valid(&ts))
return -EINVAL;
t = timespec_to_ktime(ts);
and then only pass ktime_t around.
+ struct timespec end_time = ep_set_mstimeout(timeout);
the name is now wrong, since it's no longer MStimeout.
I think handling of compat is missing as well.