summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/netlink.c4
-rw-r--r--src/noise.c6
-rw-r--r--src/peer.h2
-rw-r--r--src/timers.c2
-rw-r--r--src/uapi/wireguard.h2
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)
diff --git a/src/peer.h b/src/peer.h
index 49784d1..1e3c1ae 100644
--- a/src/peer.h
+++ b/src/peer.h
@@ -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