aboutsummaryrefslogtreecommitdiffstats
path: root/net/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/socket.c')
-rw-r--r--net/socket.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/net/socket.c b/net/socket.c
index 1de96abd78d3..d51930689b98 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -706,7 +706,8 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
706{ 706{
707 int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP); 707 int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP);
708 int new_tstamp = sock_flag(sk, SOCK_TSTAMP_NEW); 708 int new_tstamp = sock_flag(sk, SOCK_TSTAMP_NEW);
709 struct scm_timestamping tss; 709 struct scm_timestamping_internal tss;
710
710 int empty = 1, false_tstamp = 0; 711 int empty = 1, false_tstamp = 0;
711 struct skb_shared_hwtstamps *shhwtstamps = 712 struct skb_shared_hwtstamps *shhwtstamps =
712 skb_hwtstamps(skb); 713 skb_hwtstamps(skb);
@@ -752,20 +753,22 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
752 753
753 memset(&tss, 0, sizeof(tss)); 754 memset(&tss, 0, sizeof(tss));
754 if ((sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) && 755 if ((sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) &&
755 ktime_to_timespec_cond(skb->tstamp, tss.ts + 0)) 756 ktime_to_timespec64_cond(skb->tstamp, tss.ts + 0))
756 empty = 0; 757 empty = 0;
757 if (shhwtstamps && 758 if (shhwtstamps &&
758 (sk->sk_tsflags & SOF_TIMESTAMPING_RAW_HARDWARE) && 759 (sk->sk_tsflags & SOF_TIMESTAMPING_RAW_HARDWARE) &&
759 !skb_is_swtx_tstamp(skb, false_tstamp) && 760 !skb_is_swtx_tstamp(skb, false_tstamp) &&
760 ktime_to_timespec_cond(shhwtstamps->hwtstamp, tss.ts + 2)) { 761 ktime_to_timespec64_cond(shhwtstamps->hwtstamp, tss.ts + 2)) {
761 empty = 0; 762 empty = 0;
762 if ((sk->sk_tsflags & SOF_TIMESTAMPING_OPT_PKTINFO) && 763 if ((sk->sk_tsflags & SOF_TIMESTAMPING_OPT_PKTINFO) &&
763 !skb_is_err_queue(skb)) 764 !skb_is_err_queue(skb))
764 put_ts_pktinfo(msg, skb); 765 put_ts_pktinfo(msg, skb);
765 } 766 }
766 if (!empty) { 767 if (!empty) {
767 put_cmsg(msg, SOL_SOCKET, 768 if (sock_flag(sk, SOCK_TSTAMP_NEW))
768 SO_TIMESTAMPING_OLD, sizeof(tss), &tss); 769 put_cmsg_scm_timestamping64(msg, &tss);
770 else
771 put_cmsg_scm_timestamping(msg, &tss);
769 772
770 if (skb_is_err_queue(skb) && skb->len && 773 if (skb_is_err_queue(skb) && skb->len &&
771 SKB_EXT_ERR(skb)->opt_stats) 774 SKB_EXT_ERR(skb)->opt_stats)