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 3/9] compat: enable compat_get/put_timespec64 always
Date: Fri, 10 Nov 2017 14:42:53 -0800 [thread overview]
Message-ID: <20171110224259.15930-4-deepa.kernel@gmail.com> (raw)
In-Reply-To: <20171110224259.15930-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/Makefile | 2 +-
kernel/compat.c | 92 +++++++++++++++++++++++----------------------
4 files changed, 53 insertions(+), 47 deletions(-)
diff --git a/include/linux/compat.h b/include/linux/compat.h
index f59f1f2d03de..d7f566c14e84 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -170,8 +170,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/Makefile b/kernel/Makefile
index 172d151d429c..2e3df3deee18 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -66,7 +66,7 @@ obj-$(CONFIG_KEXEC_CORE) += kexec_core.o
obj-$(CONFIG_KEXEC) += kexec.o
obj-$(CONFIG_KEXEC_FILE) += kexec_file.o
obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o
-obj-$(CONFIG_COMPAT) += compat.o
+obj-y += compat.o
obj-$(CONFIG_CGROUPS) += cgroup/
obj-$(CONFIG_UTS_NS) += utsname.o
obj-$(CONFIG_USER_NS) += user_namespace.o
diff --git a/kernel/compat.c b/kernel/compat.c
index d1cee656a7ed..42653ac977c0 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -30,6 +30,52 @@
#include <linux/uaccess.h>
+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);
+
+#ifdef CONFIG_COMPAT
+
int compat_get_timex(struct timex *txc, const struct compat_timex __user *utp)
{
struct compat_timex tx32;
@@ -120,50 +166,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)
@@ -582,3 +584,5 @@ void __user *compat_alloc_user_space(unsigned long len)
return ptr;
}
EXPORT_SYMBOL_GPL(compat_alloc_user_space);
+
+#endif
--
2.11.0
next prev parent reply other threads:[~2017-11-10 22:43 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-10 22:42 [PATCH 0/9] posix_clocks: Prepare syscalls for 64 bit time_t conversion Deepa Dinamani
2017-11-10 22:42 ` [PATCH 1/9] include: Move compat_timespec/ timeval to compat_time.h Deepa Dinamani
2017-11-11 2:38 ` Steven Rostedt
2017-11-10 22:42 ` [PATCH 2/9] compat: Make compat helpers independent of CONFIG_COMPAT Deepa Dinamani
2017-11-14 16:47 ` Arnd Bergmann
2017-11-15 23:01 ` Deepa Dinamani
2017-11-10 22:42 ` Deepa Dinamani [this message]
2017-11-10 22:42 ` [PATCH 4/9] posix-clocks: Enable compat syscalls always Deepa Dinamani
2017-11-13 21:03 ` Thomas Gleixner
2017-11-13 23:26 ` Deepa Dinamani
2017-11-14 13:03 ` Arnd Bergmann
2017-11-10 22:42 ` [PATCH 5/9] y2038: introduce CONFIG_64BIT_TIME Deepa Dinamani
2017-12-08 16:53 ` [Y2038] " Ben Hutchings
2017-12-08 17:01 ` Deepa Dinamani
2017-12-08 18:23 ` Ben Hutchings
2017-11-10 22:42 ` [PATCH 6/9] include: Add new y2038 safe __kernel_timespec Deepa Dinamani
2017-11-10 22:42 ` [PATCH 7/9] fix get_timespec64() for y2038 safe compat interfaces Deepa Dinamani
2017-11-14 14:17 ` Arnd Bergmann
2017-11-10 22:42 ` [PATCH 8/9] change time types to new y2038 safe __kernel_* types Deepa Dinamani
2017-11-10 22:42 ` [PATCH 9/9] nanosleep: change time types to " Deepa Dinamani
2017-11-14 14:24 ` [PATCH 0/9] posix_clocks: Prepare syscalls for 64 bit time_t conversion Arnd Bergmann
2017-11-15 23:11 ` Deepa Dinamani
2017-11-16 9:04 ` Thomas Gleixner
2017-11-16 23:42 ` Arnd Bergmann
2017-11-17 8:58 ` Thomas Gleixner
2017-11-17 9:31 ` Arnd Bergmann
2017-11-17 9:54 ` Thomas Gleixner
2017-11-17 10:30 ` Arnd Bergmann
2017-11-17 10:40 ` Thomas Gleixner
2017-11-17 10:46 ` 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=20171110224259.15930-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome