diff options
-rw-r--r-- | src/netlink.c | 4 | ||||
-rw-r--r-- | src/noise.c | 6 | ||||
-rw-r--r-- | src/peer.h | 2 | ||||
-rw-r--r-- | src/timers.c | 2 | ||||
-rw-r--r-- | src/uapi/wireguard.h | 2 |
5 files changed, 8 insertions, 8 deletions
diff --git a/src/netlink.c b/src/netlink.c index 9297e60..7fa243e 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -30,7 +30,7 @@ static const struct nla_policy peer_policy[WGPEER_A_MAX + 1] = { [WGPEER_A_FLAGS] = { .type = NLA_U32 }, [WGPEER_A_ENDPOINT] = { .len = sizeof(struct sockaddr) }, [WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL]= { .type = NLA_U16 }, - [WGPEER_A_LAST_HANDSHAKE_TIME] = { .len = sizeof(struct timeval) }, + [WGPEER_A_LAST_HANDSHAKE_TIME] = { .len = sizeof(struct timespec) }, [WGPEER_A_RX_BYTES] = { .type = NLA_U64 }, [WGPEER_A_TX_BYTES] = { .type = NLA_U64 }, [WGPEER_A_ALLOWEDIPS] = { .type = NLA_NESTED } @@ -107,7 +107,7 @@ static int get_peer(struct wireguard_peer *peer, unsigned int index, struct allo if (fail) goto err; - if (nla_put(skb, WGPEER_A_LAST_HANDSHAKE_TIME, sizeof(struct timeval), &peer->walltime_last_handshake) || nla_put_u16(skb, WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL, peer->persistent_keepalive_interval / HZ) || + if (nla_put(skb, WGPEER_A_LAST_HANDSHAKE_TIME, sizeof(struct timespec), &peer->walltime_last_handshake) || nla_put_u16(skb, WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL, peer->persistent_keepalive_interval / HZ) || nla_put_u64_64bit(skb, WGPEER_A_TX_BYTES, peer->tx_bytes, WGPEER_A_UNSPEC) || nla_put_u64_64bit(skb, WGPEER_A_RX_BYTES, peer->rx_bytes, WGPEER_A_UNSPEC)) goto err; diff --git a/src/noise.c b/src/noise.c index 6ce9b78..9d99bfa 100644 --- a/src/noise.c +++ b/src/noise.c @@ -349,12 +349,12 @@ static void message_ephemeral(u8 ephemeral_dst[NOISE_PUBLIC_KEY_LEN], const u8 e static void tai64n_now(u8 output[NOISE_TIMESTAMP_LEN]) { - struct timeval now; + struct timespec64 now; - do_gettimeofday(&now); + getnstimeofday64(&now); /* https://cr.yp.to/libtai/tai64.html */ *(__be64 *)output = cpu_to_be64(4611686018427387914ULL + now.tv_sec); - *(__be32 *)(output + sizeof(__be64)) = cpu_to_be32(1000 * now.tv_usec + 500); + *(__be32 *)(output + sizeof(__be64)) = cpu_to_be32(now.tv_nsec); } bool noise_handshake_create_initiation(struct message_handshake_initiation *dst, struct noise_handshake *handshake) @@ -49,7 +49,7 @@ struct wireguard_peer { unsigned int timer_handshake_attempts; unsigned long persistent_keepalive_interval; bool timers_enabled, timer_need_another_keepalive, sent_lastminute_handshake; - struct timeval walltime_last_handshake; + struct timespec walltime_last_handshake; struct kref refcount; struct rcu_head rcu; struct list_head peer_list; diff --git a/src/timers.c b/src/timers.c index 52fff28..5f2570f 100644 --- a/src/timers.c +++ b/src/timers.c @@ -158,7 +158,7 @@ void timers_handshake_complete(struct wireguard_peer *peer) del_timer(&peer->timer_retransmit_handshake); peer->timer_handshake_attempts = 0; peer->sent_lastminute_handshake = false; - do_gettimeofday(&peer->walltime_last_handshake); + getnstimeofday(&peer->walltime_last_handshake); } /* Should be called after an ephemeral key is created, which is before sending a handshake response or after receiving a handshake response. */ diff --git a/src/uapi/wireguard.h b/src/uapi/wireguard.h index e776f7c..411d5a4 100644 --- a/src/uapi/wireguard.h +++ b/src/uapi/wireguard.h @@ -51,7 +51,7 @@ * WGPEER_A_PRESHARED_KEY: len WG_KEY_LEN * WGPEER_A_ENDPOINT: struct sockaddr_in or struct sockaddr_in6 * WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL: NLA_U16 - * WGPEER_A_LAST_HANDSHAKE_TIME: struct timeval + * WGPEER_A_LAST_HANDSHAKE_TIME: struct timespec * WGPEER_A_RX_BYTES: NLA_U64 * WGPEER_A_TX_BYTES: NLA_U64 * WGPEER_A_ALLOWEDIPS: NLA_NESTED |