Re: [Y2038] [PATCH 05/11] time/posix-timers:Convert to the 64bit methods for k_clock callback functions

2015-04-21 Thread Arnd Bergmann
On Tuesday 21 April 2015 16:36:13 Baolin Wang wrote:
> On 21 April 2015 at 04:48, Thomas Gleixner  wrote:
> 
> > On Mon, 20 Apr 2015, Baolin Wang wrote:
> > >  /* Set clock_realtime */
> > >  static int posix_clock_realtime_set(const clockid_t which_clock,
> > > - const struct timespec *tp)
> > > + const struct timespec64 *tp)
> > >  {
> > > - return do_sys_settimeofday(tp, NULL);
> > > + struct timespec ts = timespec64_to_timespec(*tp);
> > > +
> > > + return do_sys_settimeofday(, NULL);
> >
> > Sigh. No. We first provide a proper function for this, which takes a
> > timespec64, i.e. do_sys_settimeofday64() instead of having this
> > wrapper mess all over the place.
> >
> 
> Thanks for your comments,but if use do_sys_settimeofday64() here that
> will  introduce
> a security bug: do_sys_settimeofday contains a capability
> check that normally prevents non-root users from setting the time.
> 
> With your change, any user can set the system time.

He was asking for a new do_sys_settimeofday64 function to be added,
not using the low-level do_settimeofday64.

Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Y2038] [PATCH 05/11] time/posix-timers:Convert to the 64bit methods for k_clock callback functions

2015-04-21 Thread Arnd Bergmann
On Tuesday 21 April 2015 16:36:13 Baolin Wang wrote:
 On 21 April 2015 at 04:48, Thomas Gleixner t...@linutronix.de wrote:
 
  On Mon, 20 Apr 2015, Baolin Wang wrote:
/* Set clock_realtime */
static int posix_clock_realtime_set(const clockid_t which_clock,
   - const struct timespec *tp)
   + const struct timespec64 *tp)
{
   - return do_sys_settimeofday(tp, NULL);
   + struct timespec ts = timespec64_to_timespec(*tp);
   +
   + return do_sys_settimeofday(ts, NULL);
 
  Sigh. No. We first provide a proper function for this, which takes a
  timespec64, i.e. do_sys_settimeofday64() instead of having this
  wrapper mess all over the place.
 
 
 Thanks for your comments,but if use do_sys_settimeofday64() here that
 will  introduce
 a security bug: do_sys_settimeofday contains a capability
 check that normally prevents non-root users from setting the time.
 
 With your change, any user can set the system time.

He was asking for a new do_sys_settimeofday64 function to be added,
not using the low-level do_settimeofday64.

Arnd
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 05/11] time/posix-timers:Convert to the 64bit methods for k_clock callback functions

2015-04-20 Thread Thomas Gleixner
On Mon, 20 Apr 2015, Baolin Wang wrote:
>  /* Set clock_realtime */
>  static int posix_clock_realtime_set(const clockid_t which_clock,
> - const struct timespec *tp)
> + const struct timespec64 *tp)
>  {
> - return do_sys_settimeofday(tp, NULL);
> + struct timespec ts = timespec64_to_timespec(*tp);
> +
> + return do_sys_settimeofday(, NULL);

Sigh. No. We first provide a proper function for this, which takes a
timespec64, i.e. do_sys_settimeofday64() instead of having this
wrapper mess all over the place.

>   /* SIGEV_NONE timers are not queued ! See common_timer_get */
>   if (((timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE)) {
> diff --git a/kernel/time/timekeeping.h b/kernel/time/timekeeping.h
> index 1d91416..144af14 100644
> --- a/kernel/time/timekeeping.h
> +++ b/kernel/time/timekeeping.h
> @@ -15,7 +15,7 @@ extern u64 timekeeping_max_deferment(void);
>  extern int timekeeping_inject_offset(struct timespec *ts);
>  extern s32 timekeeping_get_tai_offset(void);
>  extern void timekeeping_set_tai_offset(s32 tai_offset);
> -extern void timekeeping_clocktai(struct timespec *ts);
> +extern void timekeeping_clocktai(struct timespec64 *ts);

# git grep timekeeping_clocktai() is your friend.

Thanks,

tglx
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 05/11] time/posix-timers:Convert to the 64bit methods for k_clock callback functions

2015-04-20 Thread Baolin Wang
This patch converts the timepsec type to timespec64 type, and converts the
itimerspec type to itimerspec64 type for the k_clock callback functions.

This patch also converts the timespec type to timespec64 type for 
timekeeping_clocktai()
function which is used only in the posix-timers.c file.

Signed-off-by: Baolin Wang 
---
 include/linux/timekeeping.h |4 +-
 kernel/time/posix-timers.c  |  102 +++
 kernel/time/timekeeping.h   |2 +-
 3 files changed, 57 insertions(+), 51 deletions(-)

diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index c6d5ae9..bd3df93 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -242,9 +242,9 @@ static inline void get_monotonic_boottime64(struct 
timespec64 *ts)
*ts = ktime_to_timespec64(ktime_get_boottime());
 }
 
-static inline void timekeeping_clocktai(struct timespec *ts)
+static inline void timekeeping_clocktai(struct timespec64 *ts)
 {
-   *ts = ktime_to_timespec(ktime_get_clocktai());
+   *ts = ktime_to_timespec64(ktime_get_clocktai());
 }
 
 /*
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index 9070387..47d1abf 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -132,9 +132,9 @@ static struct k_clock posix_clocks[MAX_CLOCKS];
 static int common_nsleep(const clockid_t, int flags, struct timespec *t,
 struct timespec __user *rmtp);
 static int common_timer_create(struct k_itimer *new_timer);
-static void common_timer_get(struct k_itimer *, struct itimerspec *);
+static void common_timer_get(struct k_itimer *, struct itimerspec64 *);
 static int common_timer_set(struct k_itimer *, int,
-   struct itimerspec *, struct itimerspec *);
+   struct itimerspec64 *, struct itimerspec64 *);
 static int common_timer_del(struct k_itimer *timer);
 
 static enum hrtimer_restart posix_timer_fn(struct hrtimer *data);
@@ -203,17 +203,20 @@ static inline void unlock_timer(struct k_itimer *timr, 
unsigned long flags)
 }
 
 /* Get clock_realtime */
-static int posix_clock_realtime_get(clockid_t which_clock, struct timespec *tp)
+static int posix_clock_realtime_get(clockid_t which_clock,
+   struct timespec64 *tp)
 {
-   ktime_get_real_ts(tp);
+   ktime_get_real_ts64(tp);
return 0;
 }
 
 /* Set clock_realtime */
 static int posix_clock_realtime_set(const clockid_t which_clock,
-   const struct timespec *tp)
+   const struct timespec64 *tp)
 {
-   return do_sys_settimeofday(tp, NULL);
+   struct timespec ts = timespec64_to_timespec(*tp);
+
+   return do_sys_settimeofday(, NULL);
 }
 
 static int posix_clock_realtime_adj(const clockid_t which_clock,
@@ -225,48 +228,51 @@ static int posix_clock_realtime_adj(const clockid_t 
which_clock,
 /*
  * Get monotonic time for posix timers
  */
-static int posix_ktime_get_ts(clockid_t which_clock, struct timespec *tp)
+static int posix_ktime_get_ts(clockid_t which_clock, struct timespec64 *tp)
 {
-   ktime_get_ts(tp);
+   ktime_get_ts64(tp);
return 0;
 }
 
 /*
  * Get monotonic-raw time for posix timers
  */
-static int posix_get_monotonic_raw(clockid_t which_clock, struct timespec *tp)
+static int posix_get_monotonic_raw(clockid_t which_clock, struct timespec64 
*tp)
 {
-   getrawmonotonic(tp);
+   getrawmonotonic64(tp);
return 0;
 }
 
 
-static int posix_get_realtime_coarse(clockid_t which_clock, struct timespec 
*tp)
+static int posix_get_realtime_coarse(clockid_t which_clock,
+struct timespec64 *tp)
 {
-   *tp = current_kernel_time();
+   *tp = current_kernel_time64();
return 0;
 }
 
 static int posix_get_monotonic_coarse(clockid_t which_clock,
-   struct timespec *tp)
+   struct timespec64 *tp)
 {
-   *tp = get_monotonic_coarse();
+   *tp = get_monotonic_coarse64();
return 0;
 }
 
-static int posix_get_coarse_res(const clockid_t which_clock, struct timespec 
*tp)
+static int posix_get_coarse_res(const clockid_t which_clock,
+   struct timespec64 *tp)
 {
-   *tp = ktime_to_timespec(KTIME_LOW_RES);
+   *tp = ktime_to_timespec64(KTIME_LOW_RES);
return 0;
 }
 
-static int posix_get_boottime(const clockid_t which_clock, struct timespec *tp)
+static int posix_get_boottime(const clockid_t which_clock,
+ struct timespec64 *tp)
 {
-   get_monotonic_boottime(tp);
+   get_monotonic_boottime64(tp);
return 0;
 }
 
-static int posix_get_tai(clockid_t which_clock, struct timespec *tp)
+static int posix_get_tai(clockid_t which_clock, struct timespec64 *tp)
 {
timekeeping_clocktai(tp);
return 0;
@@ -278,57 +284,57 @@ static int 

Re: [PATCH 05/11] time/posix-timers:Convert to the 64bit methods for k_clock callback functions

2015-04-20 Thread Thomas Gleixner
On Mon, 20 Apr 2015, Baolin Wang wrote:
  /* Set clock_realtime */
  static int posix_clock_realtime_set(const clockid_t which_clock,
 - const struct timespec *tp)
 + const struct timespec64 *tp)
  {
 - return do_sys_settimeofday(tp, NULL);
 + struct timespec ts = timespec64_to_timespec(*tp);
 +
 + return do_sys_settimeofday(ts, NULL);

Sigh. No. We first provide a proper function for this, which takes a
timespec64, i.e. do_sys_settimeofday64() instead of having this
wrapper mess all over the place.

   /* SIGEV_NONE timers are not queued ! See common_timer_get */
   if (((timr-it_sigev_notify  ~SIGEV_THREAD_ID) == SIGEV_NONE)) {
 diff --git a/kernel/time/timekeeping.h b/kernel/time/timekeeping.h
 index 1d91416..144af14 100644
 --- a/kernel/time/timekeeping.h
 +++ b/kernel/time/timekeeping.h
 @@ -15,7 +15,7 @@ extern u64 timekeeping_max_deferment(void);
  extern int timekeeping_inject_offset(struct timespec *ts);
  extern s32 timekeeping_get_tai_offset(void);
  extern void timekeeping_set_tai_offset(s32 tai_offset);
 -extern void timekeeping_clocktai(struct timespec *ts);
 +extern void timekeeping_clocktai(struct timespec64 *ts);

# git grep timekeeping_clocktai() is your friend.

Thanks,

tglx
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 05/11] time/posix-timers:Convert to the 64bit methods for k_clock callback functions

2015-04-20 Thread Baolin Wang
This patch converts the timepsec type to timespec64 type, and converts the
itimerspec type to itimerspec64 type for the k_clock callback functions.

This patch also converts the timespec type to timespec64 type for 
timekeeping_clocktai()
function which is used only in the posix-timers.c file.

Signed-off-by: Baolin Wang baolin.w...@linaro.org
---
 include/linux/timekeeping.h |4 +-
 kernel/time/posix-timers.c  |  102 +++
 kernel/time/timekeeping.h   |2 +-
 3 files changed, 57 insertions(+), 51 deletions(-)

diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index c6d5ae9..bd3df93 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -242,9 +242,9 @@ static inline void get_monotonic_boottime64(struct 
timespec64 *ts)
*ts = ktime_to_timespec64(ktime_get_boottime());
 }
 
-static inline void timekeeping_clocktai(struct timespec *ts)
+static inline void timekeeping_clocktai(struct timespec64 *ts)
 {
-   *ts = ktime_to_timespec(ktime_get_clocktai());
+   *ts = ktime_to_timespec64(ktime_get_clocktai());
 }
 
 /*
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index 9070387..47d1abf 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -132,9 +132,9 @@ static struct k_clock posix_clocks[MAX_CLOCKS];
 static int common_nsleep(const clockid_t, int flags, struct timespec *t,
 struct timespec __user *rmtp);
 static int common_timer_create(struct k_itimer *new_timer);
-static void common_timer_get(struct k_itimer *, struct itimerspec *);
+static void common_timer_get(struct k_itimer *, struct itimerspec64 *);
 static int common_timer_set(struct k_itimer *, int,
-   struct itimerspec *, struct itimerspec *);
+   struct itimerspec64 *, struct itimerspec64 *);
 static int common_timer_del(struct k_itimer *timer);
 
 static enum hrtimer_restart posix_timer_fn(struct hrtimer *data);
@@ -203,17 +203,20 @@ static inline void unlock_timer(struct k_itimer *timr, 
unsigned long flags)
 }
 
 /* Get clock_realtime */
-static int posix_clock_realtime_get(clockid_t which_clock, struct timespec *tp)
+static int posix_clock_realtime_get(clockid_t which_clock,
+   struct timespec64 *tp)
 {
-   ktime_get_real_ts(tp);
+   ktime_get_real_ts64(tp);
return 0;
 }
 
 /* Set clock_realtime */
 static int posix_clock_realtime_set(const clockid_t which_clock,
-   const struct timespec *tp)
+   const struct timespec64 *tp)
 {
-   return do_sys_settimeofday(tp, NULL);
+   struct timespec ts = timespec64_to_timespec(*tp);
+
+   return do_sys_settimeofday(ts, NULL);
 }
 
 static int posix_clock_realtime_adj(const clockid_t which_clock,
@@ -225,48 +228,51 @@ static int posix_clock_realtime_adj(const clockid_t 
which_clock,
 /*
  * Get monotonic time for posix timers
  */
-static int posix_ktime_get_ts(clockid_t which_clock, struct timespec *tp)
+static int posix_ktime_get_ts(clockid_t which_clock, struct timespec64 *tp)
 {
-   ktime_get_ts(tp);
+   ktime_get_ts64(tp);
return 0;
 }
 
 /*
  * Get monotonic-raw time for posix timers
  */
-static int posix_get_monotonic_raw(clockid_t which_clock, struct timespec *tp)
+static int posix_get_monotonic_raw(clockid_t which_clock, struct timespec64 
*tp)
 {
-   getrawmonotonic(tp);
+   getrawmonotonic64(tp);
return 0;
 }
 
 
-static int posix_get_realtime_coarse(clockid_t which_clock, struct timespec 
*tp)
+static int posix_get_realtime_coarse(clockid_t which_clock,
+struct timespec64 *tp)
 {
-   *tp = current_kernel_time();
+   *tp = current_kernel_time64();
return 0;
 }
 
 static int posix_get_monotonic_coarse(clockid_t which_clock,
-   struct timespec *tp)
+   struct timespec64 *tp)
 {
-   *tp = get_monotonic_coarse();
+   *tp = get_monotonic_coarse64();
return 0;
 }
 
-static int posix_get_coarse_res(const clockid_t which_clock, struct timespec 
*tp)
+static int posix_get_coarse_res(const clockid_t which_clock,
+   struct timespec64 *tp)
 {
-   *tp = ktime_to_timespec(KTIME_LOW_RES);
+   *tp = ktime_to_timespec64(KTIME_LOW_RES);
return 0;
 }
 
-static int posix_get_boottime(const clockid_t which_clock, struct timespec *tp)
+static int posix_get_boottime(const clockid_t which_clock,
+ struct timespec64 *tp)
 {
-   get_monotonic_boottime(tp);
+   get_monotonic_boottime64(tp);
return 0;
 }
 
-static int posix_get_tai(clockid_t which_clock, struct timespec *tp)
+static int posix_get_tai(clockid_t which_clock, struct timespec64 *tp)
 {
timekeeping_clocktai(tp);
return 0;
@@ -278,57