itimer: Schedule silent NULL pointer fixup in setitimer() for removal

setitimer() should return -EFAULT if called with an invalid pointer
for value. The current code excludes a NULL pointer from this rule and
silently uses it to stop the timer. This violates the spec.

Warn about user space apps which rely on that feature and schedule it
for removal.

[ tglx: Massaged changelog, warn message and Doc entry ]

Signed-off-by: Sasikantha babu <sasikanth.v19@gmail.com>
Link: http://lkml.kernel.org/r/1332340854-26053-1-git-send-email-sasikanth.v19@gmail.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
Sasikantha babu 2012-03-21 20:10:54 +05:30 committed by Thomas Gleixner
parent f52b69f86e
commit aa2bf9bc64
2 changed files with 12 additions and 1 deletions

View File

@ -529,3 +529,11 @@ When: 3.5
Why: The old kmap_atomic() with two arguments is deprecated, we only Why: The old kmap_atomic() with two arguments is deprecated, we only
keep it for backward compatibility for few cycles and then drop it. keep it for backward compatibility for few cycles and then drop it.
Who: Cong Wang <amwang@redhat.com> Who: Cong Wang <amwang@redhat.com>
----------------------------
What: setitimer accepts user NULL pointer (value)
When: 3.6
Why: setitimer is not returning -EFAULT if user pointer is NULL. This
violates the spec.
Who: Sasikantha Babu <sasikanth.v19@gmail.com>

View File

@ -284,8 +284,11 @@ SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value,
if (value) { if (value) {
if(copy_from_user(&set_buffer, value, sizeof(set_buffer))) if(copy_from_user(&set_buffer, value, sizeof(set_buffer)))
return -EFAULT; return -EFAULT;
} else } else {
memset((char *) &set_buffer, 0, sizeof(set_buffer)); memset((char *) &set_buffer, 0, sizeof(set_buffer));
WARN_ONCE(1, "setitimer: new_value pointer is NULL."
" Misfeature support will be removed\n");
}
error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : NULL); error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : NULL);
if (error || !ovalue) if (error || !ovalue)