netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Convert network timestamps to be y2038 safe
@ 2016-02-27  8:32 Deepa Dinamani
  2016-02-27  8:32 ` [PATCH v2 1/3] net: ipv4: Convert IP " Deepa Dinamani
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Deepa Dinamani @ 2016-02-27  8:32 UTC (permalink / raw)
  To: netdev, y2038
  Cc: arnd, Vlad Yasevich, Neil Horman, David S. Miller,
	Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
	Patrick McHardy, linux-sctp

Introduction:

The series is aimed at transitioning network timestamps to being
y2038 safe.
All patches can be reviewed and merged independently.

Socket timestamps and ioctl calls will be handled separately.

Thanks to Arnd Bergmann for discussing solution options with me.

Solution:

Data type struct timespec is not y2038 safe.
Replace timespec with struct timespec64 which is y2038 safe.

Changes v1 -> v2: 
  Move and rename inet_current_time() as discussed
  Squash patches 1 and 2
  Reword commit text for patch 2/3
  Carry over review tags

Deepa Dinamani (3):
  net: ipv4: Convert IP network timestamps to be y2038 safe
  net: ipv4: tcp_probe: Replace timespec with timespec64
  net: sctp: Convert log timestamps to be y2038 safe

 include/net/ip.h      |  2 ++
 net/ipv4/af_inet.c    | 26 ++++++++++++++++++++++++++
 net/ipv4/icmp.c       |  5 +----
 net/ipv4/ip_options.c | 14 ++++++--------
 net/ipv4/tcp_probe.c  |  8 ++++----
 net/sctp/probe.c      | 10 +++++-----
 6 files changed, 44 insertions(+), 21 deletions(-)

-- 
1.9.1

Cc: Vlad Yasevich <vyasevich@gmail.com>
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: James Morris <jmorris@namei.org>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: Patrick McHardy <kaber@trash.net>
Cc: linux-sctp@vger.kernel.org

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

* [PATCH v2 1/3] net: ipv4: Convert IP network timestamps to be y2038 safe
  2016-02-27  8:32 [PATCH v2 0/3] Convert network timestamps to be y2038 safe Deepa Dinamani
@ 2016-02-27  8:32 ` Deepa Dinamani
  2016-02-29  4:26   ` YOSHIFUJI Hideaki
  2016-02-29 16:31   ` Arnd Bergmann
  2016-02-27  8:32 ` [PATCH v2 2/3] net: ipv4: tcp_probe: Replace timespec with timespec64 Deepa Dinamani
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 8+ messages in thread
From: Deepa Dinamani @ 2016-02-27  8:32 UTC (permalink / raw)
  To: netdev, y2038
  Cc: arnd, David S. Miller, Alexey Kuznetsov, Hideaki YOSHIFUJI,
	James Morris, Patrick McHardy

ICMP timestamp messages and IP source route options require
timestamps to be in milliseconds modulo 24 hours from
midnight UT format.

Add inet_current_timestamp() function to support this. The function
returns the required timestamp in network byte order.

Timestamp calculation is also changed to call ktime_get_real_ts64()
which uses struct timespec64. struct timespec64 is y2038 safe.
Previously it called getnstimeofday() which uses struct timespec.
struct timespec is not y2038 safe.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: James Morris <jmorris@namei.org>
Cc: Patrick McHardy <kaber@trash.net>
---
 include/net/ip.h      |  2 ++
 net/ipv4/af_inet.c    | 26 ++++++++++++++++++++++++++
 net/ipv4/icmp.c       |  5 +----
 net/ipv4/ip_options.c | 14 ++++++--------
 4 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/include/net/ip.h b/include/net/ip.h
index 1a98f1c..5d3a9eb 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -240,6 +240,8 @@ static inline int inet_is_local_reserved_port(struct net *net, int port)
 }
 #endif
 
+__be32 inet_current_timestamp(void);
+
 /* From inetpeer.c */
 extern int inet_peer_threshold;
 extern int inet_peer_minttl;
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index eade66d..408e2b3 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -1386,6 +1386,32 @@ out:
 	return pp;
 }
 
+#define SECONDS_PER_DAY	86400
+
+/* inet_current_timestamp - Return IP network timestamp
+ *
+ * Return milliseconds since midnight in network byte order.
+ */
+__be32 inet_current_timestamp(void)
+{
+	u32 secs;
+	u32 msecs;
+	struct timespec64 ts;
+
+	ktime_get_real_ts64(&ts);
+
+	/* Get secs since midnight. */
+	(void)div_u64_rem(ts.tv_sec, SECONDS_PER_DAY, &secs);
+	/* Convert to msecs. */
+	msecs = secs * MSEC_PER_SEC;
+	/* Convert nsec to msec. */
+	msecs += (u32)ts.tv_nsec / NSEC_PER_MSEC;
+
+	/* Convert to network byte order. */
+	return htons(msecs);
+}
+EXPORT_SYMBOL(inet_current_timestamp);
+
 int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
 {
 	if (sk->sk_family == AF_INET)
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index 36e2697..6333489 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -931,7 +931,6 @@ static bool icmp_echo(struct sk_buff *skb)
  */
 static bool icmp_timestamp(struct sk_buff *skb)
 {
-	struct timespec tv;
 	struct icmp_bxm icmp_param;
 	/*
 	 *	Too short.
@@ -942,9 +941,7 @@ static bool icmp_timestamp(struct sk_buff *skb)
 	/*
 	 *	Fill in the current time as ms since midnight UT:
 	 */
-	getnstimeofday(&tv);
-	icmp_param.data.times[1] = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC +
-					 tv.tv_nsec / NSEC_PER_MSEC);
+	icmp_param.data.times[1] = inet_current_timestamp();
 	icmp_param.data.times[2] = icmp_param.data.times[1];
 	if (skb_copy_bits(skb, 0, &icmp_param.data.times[0], 4))
 		BUG();
diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c
index bd24679..4d158ff 100644
--- a/net/ipv4/ip_options.c
+++ b/net/ipv4/ip_options.c
@@ -58,10 +58,9 @@ void ip_options_build(struct sk_buff *skb, struct ip_options *opt,
 		if (opt->ts_needaddr)
 			ip_rt_get_source(iph+opt->ts+iph[opt->ts+2]-9, skb, rt);
 		if (opt->ts_needtime) {
-			struct timespec tv;
 			__be32 midtime;
-			getnstimeofday(&tv);
-			midtime = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC);
+
+			midtime = inet_current_timestamp();
 			memcpy(iph+opt->ts+iph[opt->ts+2]-5, &midtime, 4);
 		}
 		return;
@@ -415,11 +414,10 @@ int ip_options_compile(struct net *net,
 					break;
 				}
 				if (timeptr) {
-					struct timespec tv;
-					u32  midtime;
-					getnstimeofday(&tv);
-					midtime = (tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC;
-					put_unaligned_be32(midtime, timeptr);
+					__be32 midtime;
+
+					midtime = inet_current_timestamp();
+					memcpy(timeptr, &midtime, 4);
 					opt->is_changed = 1;
 				}
 			} else if ((optptr[3]&0xF) != IPOPT_TS_PRESPEC) {
-- 
1.9.1

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

* [PATCH v2 2/3] net: ipv4: tcp_probe: Replace timespec with timespec64
  2016-02-27  8:32 [PATCH v2 0/3] Convert network timestamps to be y2038 safe Deepa Dinamani
  2016-02-27  8:32 ` [PATCH v2 1/3] net: ipv4: Convert IP " Deepa Dinamani
@ 2016-02-27  8:32 ` Deepa Dinamani
  2016-02-29  4:27   ` YOSHIFUJI Hideaki
  2016-02-27  8:32 ` [PATCH v2 3/3] net: sctp: Convert log timestamps to be y2038 safe Deepa Dinamani
  2016-03-01 22:19 ` [PATCH v2 0/3] Convert network " David Miller
  3 siblings, 1 reply; 8+ messages in thread
From: Deepa Dinamani @ 2016-02-27  8:32 UTC (permalink / raw)
  To: netdev, y2038
  Cc: arnd, David S. Miller, Alexey Kuznetsov, James Morris,
	Hideaki YOSHIFUJI, Patrick McHardy

TCP probe log timestamps use struct timespec which is
not y2038 safe. Even though timespec might be good enough here
as it is used to represent delta time, the plan is to get rid
of all uses of timespec in the kernel.
Replace with struct timespec64 which is y2038 safe.

Prints still use unsigned long format and type.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: James Morris <jmorris@namei.org>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: Patrick McHardy <kaber@trash.net>
---
 net/ipv4/tcp_probe.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c
index ebf5ff5..f6c50af 100644
--- a/net/ipv4/tcp_probe.c
+++ b/net/ipv4/tcp_probe.c
@@ -187,13 +187,13 @@ static int tcpprobe_sprint(char *tbuf, int n)
 {
 	const struct tcp_log *p
 		= tcp_probe.log + tcp_probe.tail;
-	struct timespec tv
-		= ktime_to_timespec(ktime_sub(p->tstamp, tcp_probe.start));
+	struct timespec64 ts
+		= ktime_to_timespec64(ktime_sub(p->tstamp, tcp_probe.start));
 
 	return scnprintf(tbuf, n,
 			"%lu.%09lu %pISpc %pISpc %d %#x %#x %u %u %u %u %u\n",
-			(unsigned long)tv.tv_sec,
-			(unsigned long)tv.tv_nsec,
+			(unsigned long)ts.tv_sec,
+			(unsigned long)ts.tv_nsec,
 			&p->src, &p->dst, p->length, p->snd_nxt, p->snd_una,
 			p->snd_cwnd, p->ssthresh, p->snd_wnd, p->srtt, p->rcv_wnd);
 }
-- 
1.9.1

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

* [PATCH v2 3/3] net: sctp: Convert log timestamps to be y2038 safe
  2016-02-27  8:32 [PATCH v2 0/3] Convert network timestamps to be y2038 safe Deepa Dinamani
  2016-02-27  8:32 ` [PATCH v2 1/3] net: ipv4: Convert IP " Deepa Dinamani
  2016-02-27  8:32 ` [PATCH v2 2/3] net: ipv4: tcp_probe: Replace timespec with timespec64 Deepa Dinamani
@ 2016-02-27  8:32 ` Deepa Dinamani
  2016-03-01 22:19 ` [PATCH v2 0/3] Convert network " David Miller
  3 siblings, 0 replies; 8+ messages in thread
From: Deepa Dinamani @ 2016-02-27  8:32 UTC (permalink / raw)
  To: netdev, y2038
  Cc: arnd, Vlad Yasevich, Neil Horman, David S. Miller, linux-sctp

SCTP probe log timestamps use struct timespec which is
not y2038 safe.
Use struct timespec64 which is 2038 safe instead.

Use monotonic time instead of real time as only time
differences are logged.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Cc: Vlad Yasevich <vyasevich@gmail.com>
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: linux-sctp@vger.kernel.org
---
 net/sctp/probe.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/net/sctp/probe.c b/net/sctp/probe.c
index 5e68b94..6cc2152 100644
--- a/net/sctp/probe.c
+++ b/net/sctp/probe.c
@@ -65,7 +65,7 @@ static struct {
 	struct kfifo	  fifo;
 	spinlock_t	  lock;
 	wait_queue_head_t wait;
-	struct timespec	  tstart;
+	struct timespec64 tstart;
 } sctpw;
 
 static __printf(1, 2) void printl(const char *fmt, ...)
@@ -85,7 +85,7 @@ static __printf(1, 2) void printl(const char *fmt, ...)
 static int sctpprobe_open(struct inode *inode, struct file *file)
 {
 	kfifo_reset(&sctpw.fifo);
-	getnstimeofday(&sctpw.tstart);
+	ktime_get_ts64(&sctpw.tstart);
 
 	return 0;
 }
@@ -138,7 +138,7 @@ static sctp_disposition_t jsctp_sf_eat_sack(struct net *net,
 	struct sk_buff *skb = chunk->skb;
 	struct sctp_transport *sp;
 	static __u32 lcwnd = 0;
-	struct timespec now;
+	struct timespec64 now;
 
 	sp = asoc->peer.primary_path;
 
@@ -149,8 +149,8 @@ static sctp_disposition_t jsctp_sf_eat_sack(struct net *net,
 	    (full || sp->cwnd != lcwnd)) {
 		lcwnd = sp->cwnd;
 
-		getnstimeofday(&now);
-		now = timespec_sub(now, sctpw.tstart);
+		ktime_get_ts64(&now);
+		now = timespec64_sub(now, sctpw.tstart);
 
 		printl("%lu.%06lu ", (unsigned long) now.tv_sec,
 		       (unsigned long) now.tv_nsec / NSEC_PER_USEC);
-- 
1.9.1

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

* Re: [PATCH v2 1/3] net: ipv4: Convert IP network timestamps to be y2038 safe
  2016-02-27  8:32 ` [PATCH v2 1/3] net: ipv4: Convert IP " Deepa Dinamani
@ 2016-02-29  4:26   ` YOSHIFUJI Hideaki
  2016-02-29 16:31   ` Arnd Bergmann
  1 sibling, 0 replies; 8+ messages in thread
From: YOSHIFUJI Hideaki @ 2016-02-29  4:26 UTC (permalink / raw)
  To: Deepa Dinamani, netdev, y2038
  Cc: hideaki.yoshifuji, arnd, David S. Miller, Alexey Kuznetsov,
	Hideaki YOSHIFUJI, James Morris, Patrick McHardy



Deepa Dinamani wrote:
> ICMP timestamp messages and IP source route options require
> timestamps to be in milliseconds modulo 24 hours from
> midnight UT format.
> 
> Add inet_current_timestamp() function to support this. The function
> returns the required timestamp in network byte order.
> 
> Timestamp calculation is also changed to call ktime_get_real_ts64()
> which uses struct timespec64. struct timespec64 is y2038 safe.
> Previously it called getnstimeofday() which uses struct timespec.
> struct timespec is not y2038 safe.
> 
> Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>

Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>

--yoshfuji

> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
> Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
> Cc: James Morris <jmorris@namei.org>
> Cc: Patrick McHardy <kaber@trash.net>
> ---
>  include/net/ip.h      |  2 ++
>  net/ipv4/af_inet.c    | 26 ++++++++++++++++++++++++++
>  net/ipv4/icmp.c       |  5 +----
>  net/ipv4/ip_options.c | 14 ++++++--------
>  4 files changed, 35 insertions(+), 12 deletions(-)
> 
> diff --git a/include/net/ip.h b/include/net/ip.h
> index 1a98f1c..5d3a9eb 100644
> --- a/include/net/ip.h
> +++ b/include/net/ip.h
> @@ -240,6 +240,8 @@ static inline int inet_is_local_reserved_port(struct net *net, int port)
>  }
>  #endif
>  
> +__be32 inet_current_timestamp(void);
> +
>  /* From inetpeer.c */
>  extern int inet_peer_threshold;
>  extern int inet_peer_minttl;
> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
> index eade66d..408e2b3 100644
> --- a/net/ipv4/af_inet.c
> +++ b/net/ipv4/af_inet.c
> @@ -1386,6 +1386,32 @@ out:
>  	return pp;
>  }
>  
> +#define SECONDS_PER_DAY	86400
> +
> +/* inet_current_timestamp - Return IP network timestamp
> + *
> + * Return milliseconds since midnight in network byte order.
> + */
> +__be32 inet_current_timestamp(void)
> +{
> +	u32 secs;
> +	u32 msecs;
> +	struct timespec64 ts;
> +
> +	ktime_get_real_ts64(&ts);
> +
> +	/* Get secs since midnight. */
> +	(void)div_u64_rem(ts.tv_sec, SECONDS_PER_DAY, &secs);
> +	/* Convert to msecs. */
> +	msecs = secs * MSEC_PER_SEC;
> +	/* Convert nsec to msec. */
> +	msecs += (u32)ts.tv_nsec / NSEC_PER_MSEC;
> +
> +	/* Convert to network byte order. */
> +	return htons(msecs);
> +}
> +EXPORT_SYMBOL(inet_current_timestamp);
> +
>  int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
>  {
>  	if (sk->sk_family == AF_INET)
> diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
> index 36e2697..6333489 100644
> --- a/net/ipv4/icmp.c
> +++ b/net/ipv4/icmp.c
> @@ -931,7 +931,6 @@ static bool icmp_echo(struct sk_buff *skb)
>   */
>  static bool icmp_timestamp(struct sk_buff *skb)
>  {
> -	struct timespec tv;
>  	struct icmp_bxm icmp_param;
>  	/*
>  	 *	Too short.
> @@ -942,9 +941,7 @@ static bool icmp_timestamp(struct sk_buff *skb)
>  	/*
>  	 *	Fill in the current time as ms since midnight UT:
>  	 */
> -	getnstimeofday(&tv);
> -	icmp_param.data.times[1] = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC +
> -					 tv.tv_nsec / NSEC_PER_MSEC);
> +	icmp_param.data.times[1] = inet_current_timestamp();
>  	icmp_param.data.times[2] = icmp_param.data.times[1];
>  	if (skb_copy_bits(skb, 0, &icmp_param.data.times[0], 4))
>  		BUG();
> diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c
> index bd24679..4d158ff 100644
> --- a/net/ipv4/ip_options.c
> +++ b/net/ipv4/ip_options.c
> @@ -58,10 +58,9 @@ void ip_options_build(struct sk_buff *skb, struct ip_options *opt,
>  		if (opt->ts_needaddr)
>  			ip_rt_get_source(iph+opt->ts+iph[opt->ts+2]-9, skb, rt);
>  		if (opt->ts_needtime) {
> -			struct timespec tv;
>  			__be32 midtime;
> -			getnstimeofday(&tv);
> -			midtime = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC);
> +
> +			midtime = inet_current_timestamp();
>  			memcpy(iph+opt->ts+iph[opt->ts+2]-5, &midtime, 4);
>  		}
>  		return;
> @@ -415,11 +414,10 @@ int ip_options_compile(struct net *net,
>  					break;
>  				}
>  				if (timeptr) {
> -					struct timespec tv;
> -					u32  midtime;
> -					getnstimeofday(&tv);
> -					midtime = (tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC;
> -					put_unaligned_be32(midtime, timeptr);
> +					__be32 midtime;
> +
> +					midtime = inet_current_timestamp();
> +					memcpy(timeptr, &midtime, 4);
>  					opt->is_changed = 1;
>  				}
>  			} else if ((optptr[3]&0xF) != IPOPT_TS_PRESPEC) {
> 

-- 
Hideaki Yoshifuji <hideaki.yoshifuji@miraclelinux.com>
Technical Division, MIRACLE LINUX CORPORATION

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

* Re: [PATCH v2 2/3] net: ipv4: tcp_probe: Replace timespec with timespec64
  2016-02-27  8:32 ` [PATCH v2 2/3] net: ipv4: tcp_probe: Replace timespec with timespec64 Deepa Dinamani
@ 2016-02-29  4:27   ` YOSHIFUJI Hideaki
  0 siblings, 0 replies; 8+ messages in thread
From: YOSHIFUJI Hideaki @ 2016-02-29  4:27 UTC (permalink / raw)
  To: Deepa Dinamani, netdev, y2038
  Cc: hideaki.yoshifuji, arnd, David S. Miller, Alexey Kuznetsov,
	James Morris, Hideaki YOSHIFUJI, Patrick McHardy



Deepa Dinamani wrote:
> TCP probe log timestamps use struct timespec which is
> not y2038 safe. Even though timespec might be good enough here
> as it is used to represent delta time, the plan is to get rid
> of all uses of timespec in the kernel.
> Replace with struct timespec64 which is y2038 safe.
> 
> Prints still use unsigned long format and type.
> 
> Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>

Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>

> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
> Cc: James Morris <jmorris@namei.org>
> Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
> Cc: Patrick McHardy <kaber@trash.net>
> ---
>  net/ipv4/tcp_probe.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c
> index ebf5ff5..f6c50af 100644
> --- a/net/ipv4/tcp_probe.c
> +++ b/net/ipv4/tcp_probe.c
> @@ -187,13 +187,13 @@ static int tcpprobe_sprint(char *tbuf, int n)
>  {
>  	const struct tcp_log *p
>  		= tcp_probe.log + tcp_probe.tail;
> -	struct timespec tv
> -		= ktime_to_timespec(ktime_sub(p->tstamp, tcp_probe.start));
> +	struct timespec64 ts
> +		= ktime_to_timespec64(ktime_sub(p->tstamp, tcp_probe.start));
>  
>  	return scnprintf(tbuf, n,
>  			"%lu.%09lu %pISpc %pISpc %d %#x %#x %u %u %u %u %u\n",
> -			(unsigned long)tv.tv_sec,
> -			(unsigned long)tv.tv_nsec,
> +			(unsigned long)ts.tv_sec,
> +			(unsigned long)ts.tv_nsec,
>  			&p->src, &p->dst, p->length, p->snd_nxt, p->snd_una,
>  			p->snd_cwnd, p->ssthresh, p->snd_wnd, p->srtt, p->rcv_wnd);
>  }
> 

-- 
Hideaki Yoshifuji <hideaki.yoshifuji@miraclelinux.com>
Technical Division, MIRACLE LINUX CORPORATION

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

* Re: [PATCH v2 1/3] net: ipv4: Convert IP network timestamps to be y2038 safe
  2016-02-27  8:32 ` [PATCH v2 1/3] net: ipv4: Convert IP " Deepa Dinamani
  2016-02-29  4:26   ` YOSHIFUJI Hideaki
@ 2016-02-29 16:31   ` Arnd Bergmann
  1 sibling, 0 replies; 8+ messages in thread
From: Arnd Bergmann @ 2016-02-29 16:31 UTC (permalink / raw)
  To: Deepa Dinamani
  Cc: y2038, netdev, James Morris, Patrick McHardy, Hideaki YOSHIFUJI,
	Alexey Kuznetsov, David S. Miller

On Saturday 27 February 2016 00:32:15 Deepa Dinamani wrote:
> ICMP timestamp messages and IP source route options require
> timestamps to be in milliseconds modulo 24 hours from
> midnight UT format.
> 
> Add inet_current_timestamp() function to support this. The function
> returns the required timestamp in network byte order.
> 
> Timestamp calculation is also changed to call ktime_get_real_ts64()
> which uses struct timespec64. struct timespec64 is y2038 safe.
> Previously it called getnstimeofday() which uses struct timespec.
> struct timespec is not y2038 safe.
> 
> Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
> Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
> Cc: James Morris <jmorris@namei.org>
> Cc: Patrick McHardy <kaber@trash.net>
> 

Acked-by: Arnd Bergmann <arnd@arndb.de>
_______________________________________________
Y2038 mailing list
Y2038@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/y2038

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

* Re: [PATCH v2 0/3] Convert network timestamps to be y2038 safe
  2016-02-27  8:32 [PATCH v2 0/3] Convert network timestamps to be y2038 safe Deepa Dinamani
                   ` (2 preceding siblings ...)
  2016-02-27  8:32 ` [PATCH v2 3/3] net: sctp: Convert log timestamps to be y2038 safe Deepa Dinamani
@ 2016-03-01 22:19 ` David Miller
  3 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2016-03-01 22:19 UTC (permalink / raw)
  To: deepa.kernel
  Cc: netdev, y2038, arnd, vyasevich, nhorman, kuznet, jmorris,
	yoshfuji, kaber, linux-sctp

From: Deepa Dinamani <deepa.kernel@gmail.com>
Date: Sat, 27 Feb 2016 00:32:14 -0800

> Introduction:
> 
> The series is aimed at transitioning network timestamps to being
> y2038 safe.
> All patches can be reviewed and merged independently.
> 
> Socket timestamps and ioctl calls will be handled separately.
> 
> Thanks to Arnd Bergmann for discussing solution options with me.
> 
> Solution:
> 
> Data type struct timespec is not y2038 safe.
> Replace timespec with struct timespec64 which is y2038 safe.
> 
> Changes v1 -> v2: 
>   Move and rename inet_current_time() as discussed
>   Squash patches 1 and 2
>   Reword commit text for patch 2/3
>   Carry over review tags

Series applied to net-next, thanks.

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

end of thread, other threads:[~2016-03-01 22:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-27  8:32 [PATCH v2 0/3] Convert network timestamps to be y2038 safe Deepa Dinamani
2016-02-27  8:32 ` [PATCH v2 1/3] net: ipv4: Convert IP " Deepa Dinamani
2016-02-29  4:26   ` YOSHIFUJI Hideaki
2016-02-29 16:31   ` Arnd Bergmann
2016-02-27  8:32 ` [PATCH v2 2/3] net: ipv4: tcp_probe: Replace timespec with timespec64 Deepa Dinamani
2016-02-29  4:27   ` YOSHIFUJI Hideaki
2016-02-27  8:32 ` [PATCH v2 3/3] net: sctp: Convert log timestamps to be y2038 safe Deepa Dinamani
2016-03-01 22:19 ` [PATCH v2 0/3] Convert network " David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).