All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Allow times and time system calls to return small negative values
@ 2008-12-04  5:06 Paul Mackerras
  2008-12-04  5:23 ` David Miller
  2008-12-04  7:57 ` Ingo Molnar
  0 siblings, 2 replies; 7+ messages in thread
From: Paul Mackerras @ 2008-12-04  5:06 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, Joakim.Tjernlund

At the moment, the times() system call will appear to fail for a
period shortly after boot, while the value it want to return is
between -4095 and -1.  The same thing will also happen for the time()
system call on 32-bit platforms some time in 2106 or so.

On some platforms, such as x86, this is unavoidable because of the
system call ABI, but other platforms such as powerpc have a separate
error indication from the return value, so system calls can in fact
return small negative values without indicating an error.  On those
platforms, force_successful_syscall_return() provides a way to
indicate that the system call return value should not be treated as an
error even if it is in the range which would normally be taken as a
negative error number.

This adds a force_successful_syscall_return() call to the time() and
times() system calls plus their 32-bit compat versions, so that they
don't erroneously indicate an error on those platforms whose system
call ABI has a separate error indication.  This will not affect
anything on other platforms.

Joakim Tjernlund added the fix for time() and the compat versions of
time() and times(), after I did the fix for times().

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Signed-off-by: Paul Mackerras <paulus@samba.org>
---
Andrew - since this only touches generic code, will you queue this up
for 2.6.29?

diff --git a/kernel/compat.c b/kernel/compat.c
index 8eafe3e..21a93ce 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -24,6 +24,7 @@
 #include <linux/migrate.h>
 #include <linux/posix-timers.h>
 #include <linux/times.h>
+#include <linux/ptrace.h>
 
 #include <asm/uaccess.h>
 
@@ -229,6 +230,7 @@ asmlinkage long compat_sys_times(struct compat_tms __user *tbuf)
 		if (copy_to_user(tbuf, &tmp, sizeof(tmp)))
 			return -EFAULT;
 	}
+	force_successful_syscall_return();
 	return compat_jiffies_to_clock_t(jiffies);
 }
 
@@ -883,8 +885,9 @@ asmlinkage long compat_sys_time(compat_time_t __user * tloc)
 
 	if (tloc) {
 		if (put_user(i,tloc))
-			i = -EFAULT;
+			return -EFAULT;
 	}
+	force_successful_syscall_return();
 	return i;
 }
 
diff --git a/kernel/sys.c b/kernel/sys.c
index 31deba8..1bf8c5c 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -33,6 +33,7 @@
 #include <linux/task_io_accounting_ops.h>
 #include <linux/seccomp.h>
 #include <linux/cpu.h>
+#include <linux/ptrace.h>
 
 #include <linux/compat.h>
 #include <linux/syscalls.h>
@@ -878,6 +879,7 @@ asmlinkage long sys_times(struct tms __user * tbuf)
 		if (copy_to_user(tbuf, &tmp, sizeof(struct tms)))
 			return -EFAULT;
 	}
+	force_successful_syscall_return();
 	return (long) jiffies_64_to_clock_t(get_jiffies_64());
 }
 
diff --git a/kernel/time.c b/kernel/time.c
index d63a433..4886e3c 100644
--- a/kernel/time.c
+++ b/kernel/time.c
@@ -37,6 +37,7 @@
 #include <linux/fs.h>
 #include <linux/slab.h>
 #include <linux/math64.h>
+#include <linux/ptrace.h>
 
 #include <asm/uaccess.h>
 #include <asm/unistd.h>
@@ -65,8 +66,9 @@ asmlinkage long sys_time(time_t __user * tloc)
 
 	if (tloc) {
 		if (put_user(i,tloc))
-			i = -EFAULT;
+			return -EFAULT;
 	}
+	force_successful_syscall_return();
 	return i;
 }
 

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-12-04 17:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-04  5:06 [PATCH] Allow times and time system calls to return small negative values Paul Mackerras
2008-12-04  5:23 ` David Miller
2008-12-04  7:57 ` Ingo Molnar
2008-12-04 10:49   ` Paul Mackerras
2008-12-04 15:40     ` Ingo Molnar
2008-12-04 16:01       ` [PATCH] Allow times and time system calls to return smallnegative values Joakim Tjernlund
2008-12-04 17:03       ` [PATCH] Allow times and time system calls to return small negative values David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.