All of lore.kernel.org
 help / color / mirror / Atom feed
From: Deepa Dinamani <deepa.kernel@gmail.com>
To: tglx@linutronix.de, john.stultz@linaro.org
Cc: linux-kernel@vger.kernel.org, arnd@arndb.de, y2038@lists.linaro.org
Subject: [PATCH v3 03/10] compat: enable compat_get/put_timespec64 always
Date: Mon, 15 Jan 2018 18:18:11 -0800	[thread overview]
Message-ID: <20180116021818.24791-4-deepa.kernel@gmail.com> (raw)
In-Reply-To: <20180116021818.24791-1-deepa.kernel@gmail.com>

These functions are used in the repurposed compat syscalls
to provide backward compatibility for using 32 bit time_t
on 32 bit systems.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
---
 include/linux/compat.h      |  2 --
 include/linux/compat_time.h |  4 ++++
 kernel/compat.c             | 52 +++++++--------------------------------------
 kernel/time/time.c          | 44 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 56 insertions(+), 46 deletions(-)

diff --git a/include/linux/compat.h b/include/linux/compat.h
index 2f79dac5ed65..e06f11886000 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -168,8 +168,6 @@ extern int compat_get_timespec(struct timespec *, const void __user *);
 extern int compat_put_timespec(const struct timespec *, void __user *);
 extern int compat_get_timeval(struct timeval *, const void __user *);
 extern int compat_put_timeval(const struct timeval *, void __user *);
-extern int compat_get_timespec64(struct timespec64 *, const void __user *);
-extern int compat_put_timespec64(const struct timespec64 *, void __user *);
 extern int get_compat_itimerspec64(struct itimerspec64 *its,
 			const struct compat_itimerspec __user *uits);
 extern int put_compat_itimerspec64(const struct itimerspec64 *its,
diff --git a/include/linux/compat_time.h b/include/linux/compat_time.h
index 56a54a1e4355..31f2774f1994 100644
--- a/include/linux/compat_time.h
+++ b/include/linux/compat_time.h
@@ -3,6 +3,7 @@
 #define _LINUX_COMPAT_TIME_H
 
 #include <linux/types.h>
+#include <linux/time64.h>
 
 typedef s32		compat_time_t;
 
@@ -16,4 +17,7 @@ struct compat_timeval {
 	s32		tv_usec;
 };
 
+extern int compat_get_timespec64(struct timespec64 *, const void __user *);
+extern int compat_put_timespec64(const struct timespec64 *, void __user *);
+
 #endif /* _LINUX_COMPAT_TIME_H */
diff --git a/kernel/compat.c b/kernel/compat.c
index 3247fe761f60..fc7404522c07 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -120,50 +120,6 @@ static int __compat_put_timespec(const struct timespec *ts, struct compat_timesp
 			__put_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0;
 }
 
-static int __compat_get_timespec64(struct timespec64 *ts64,
-				   const struct compat_timespec __user *cts)
-{
-	struct compat_timespec ts;
-	int ret;
-
-	ret = copy_from_user(&ts, cts, sizeof(ts));
-	if (ret)
-		return -EFAULT;
-
-	ts64->tv_sec = ts.tv_sec;
-	ts64->tv_nsec = ts.tv_nsec;
-
-	return 0;
-}
-
-static int __compat_put_timespec64(const struct timespec64 *ts64,
-				   struct compat_timespec __user *cts)
-{
-	struct compat_timespec ts = {
-		.tv_sec = ts64->tv_sec,
-		.tv_nsec = ts64->tv_nsec
-	};
-	return copy_to_user(cts, &ts, sizeof(ts)) ? -EFAULT : 0;
-}
-
-int compat_get_timespec64(struct timespec64 *ts, const void __user *uts)
-{
-	if (COMPAT_USE_64BIT_TIME)
-		return copy_from_user(ts, uts, sizeof(*ts)) ? -EFAULT : 0;
-	else
-		return __compat_get_timespec64(ts, uts);
-}
-EXPORT_SYMBOL_GPL(compat_get_timespec64);
-
-int compat_put_timespec64(const struct timespec64 *ts, void __user *uts)
-{
-	if (COMPAT_USE_64BIT_TIME)
-		return copy_to_user(uts, ts, sizeof(*ts)) ? -EFAULT : 0;
-	else
-		return __compat_put_timespec64(ts, uts);
-}
-EXPORT_SYMBOL_GPL(compat_put_timespec64);
-
 int compat_get_timeval(struct timeval *tv, const void __user *utv)
 {
 	if (COMPAT_USE_64BIT_TIME)
@@ -367,6 +323,14 @@ COMPAT_SYSCALL_DEFINE3(sched_getaffinity, compat_pid_t,  pid, unsigned int, len,
 	return ret;
 }
 
+/* Todo: Delete these extern declarations when get/put_compat_itimerspec64()
+ * are moved to kernel/time/time.c .
+ */
+extern int __compat_get_timespec64(struct timespec64 *ts64,
+				   const struct compat_timespec __user *cts);
+extern int __compat_put_timespec64(const struct timespec64 *ts64,
+				   struct compat_timespec __user *cts);
+
 int get_compat_itimerspec64(struct itimerspec64 *its,
 			const struct compat_itimerspec __user *uits)
 {
diff --git a/kernel/time/time.c b/kernel/time/time.c
index bd4e6c7dd689..02367a381f44 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -868,6 +868,50 @@ int put_timespec64(const struct timespec64 *ts,
 }
 EXPORT_SYMBOL_GPL(put_timespec64);
 
+int __compat_get_timespec64(struct timespec64 *ts64,
+				   const struct compat_timespec __user *cts)
+{
+	struct compat_timespec ts;
+	int ret;
+
+	ret = copy_from_user(&ts, cts, sizeof(ts));
+	if (ret)
+		return -EFAULT;
+
+	ts64->tv_sec = ts.tv_sec;
+	ts64->tv_nsec = ts.tv_nsec;
+
+	return 0;
+}
+
+int __compat_put_timespec64(const struct timespec64 *ts64,
+				   struct compat_timespec __user *cts)
+{
+	struct compat_timespec ts = {
+		.tv_sec = ts64->tv_sec,
+		.tv_nsec = ts64->tv_nsec
+	};
+	return copy_to_user(cts, &ts, sizeof(ts)) ? -EFAULT : 0;
+}
+
+int compat_get_timespec64(struct timespec64 *ts, const void __user *uts)
+{
+	if (COMPAT_USE_64BIT_TIME)
+		return copy_from_user(ts, uts, sizeof(*ts)) ? -EFAULT : 0;
+	else
+		return __compat_get_timespec64(ts, uts);
+}
+EXPORT_SYMBOL_GPL(compat_get_timespec64);
+
+int compat_put_timespec64(const struct timespec64 *ts, void __user *uts)
+{
+	if (COMPAT_USE_64BIT_TIME)
+		return copy_to_user(uts, ts, sizeof(*ts)) ? -EFAULT : 0;
+	else
+		return __compat_put_timespec64(ts, uts);
+}
+EXPORT_SYMBOL_GPL(compat_put_timespec64);
+
 int get_itimerspec64(struct itimerspec64 *it,
 			const struct itimerspec __user *uit)
 {
-- 
2.14.1

  parent reply	other threads:[~2018-01-16  2:19 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-16  2:18 [PATCH v3 00/10] posix_clocks: Prepare syscalls for 64 bit time_t conversion Deepa Dinamani
2018-01-16  2:18 ` Deepa Dinamani
2018-01-16  2:18 ` Deepa Dinamani
2018-01-16  2:18 ` Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 01/10] compat: Make compat helpers independent of CONFIG_COMPAT Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h Deepa Dinamani
2018-01-16  2:18   ` Deepa Dinamani
2018-01-16  2:18   ` Deepa Dinamani
2018-01-16  9:30   ` Catalin Marinas
2018-01-16  9:30     ` Catalin Marinas
2018-01-16 15:34   ` Steven Rostedt
2018-01-16 15:34     ` Steven Rostedt
2018-01-16 15:34     ` Steven Rostedt
2018-03-02 21:57   ` James Hogan
2018-03-02 21:57     ` James Hogan
2018-03-02 21:57     ` James Hogan
2018-03-02 21:57     ` James Hogan
2018-03-04 20:45   ` Helge Deller
2018-03-04 20:45     ` Helge Deller
2018-03-04 20:45     ` Helge Deller
2018-03-05  9:30   ` Christian Borntraeger
2018-03-05  9:30     ` Christian Borntraeger
2018-03-05  9:30     ` Christian Borntraeger
2018-03-06 12:46     ` Arnd Bergmann
2018-03-06 12:46       ` Arnd Bergmann
2018-03-06 12:46       ` Arnd Bergmann
2018-03-06 12:46       ` Arnd Bergmann
2018-03-06 12:48       ` Christian Borntraeger
2018-03-06 12:48         ` Christian Borntraeger
2018-03-06 12:48         ` Christian Borntraeger
2018-03-06 22:58         ` Deepa Dinamani
2018-03-06 22:58           ` Deepa Dinamani
2018-03-06 22:58           ` Deepa Dinamani
2018-03-06 22:58           ` Deepa Dinamani
2018-03-12 17:59           ` Deepa Dinamani
2018-03-12 17:59             ` Deepa Dinamani
2018-03-12 17:59             ` Deepa Dinamani
2018-01-16  2:18 ` Deepa Dinamani [this message]
2018-01-16  2:18 ` [PATCH v3 04/10] arch: introduce CONFIG_64BIT_TIME Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 05/10] arch: Introduce CONFIG_COMPAT_32BIT_TIME Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 06/10] posix-clocks: Make compat syscalls depend on CONFIG_COMPAT_32BIT_TIME Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 07/10] include: Add new y2038 safe __kernel_timespec Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 08/10] fix get_timespec64() for y2038 safe compat interfaces Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 09/10] change time types to new y2038 safe __kernel_* types Deepa Dinamani
2018-01-16  2:18 ` [PATCH v3 10/10] nanosleep: change time types to " Deepa Dinamani
     [not found] ` <20180116021818.24791-1-deepa.kernel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-01-16 15:18   ` [PATCH v3 00/10] posix_clocks: Prepare syscalls for 64 bit time_t conversion Arnd Bergmann
2018-01-16 15:18     ` Arnd Bergmann
2018-01-16 15:18     ` Arnd Bergmann
2018-01-16 15:18     ` Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180116021818.24791-4-deepa.kernel@gmail.com \
    --to=deepa.kernel@gmail.com \
    --cc=arnd@arndb.de \
    --cc=john.stultz@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=y2038@lists.linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.