diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-06-23 04:20:14 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-06-23 06:08:37 +0200 |
commit | f8b3991e881a64f47412082ae15c08285eb6880b (patch) | |
tree | c5308716de6dc4765ed466e73f5bf70829f9ecfd /src/send.c | |
parent | 66518b5ce61f74375c120a872a168585dc392ba7 (diff) |
global: use ktime boottime instead of jiffies
Since this is a network protocol, expirations need to be accounted for,
even across system suspend. On real systems, this isn't a problem, since
we're clearing all keys before suspend. But on Android, where we don't
do that, this is something of a problem. So, we switch to using boottime
instead of jiffies.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src/send.c')
-rw-r--r-- | src/send.c | 13 |
1 files changed, 6 insertions, 7 deletions
@@ -15,7 +15,6 @@ #include <linux/uio.h> #include <linux/inetdevice.h> #include <linux/socket.h> -#include <linux/jiffies.h> #include <net/ip_tunnels.h> #include <net/udp.h> #include <net/sock.h> @@ -25,11 +24,11 @@ static void packet_send_handshake_initiation(struct wireguard_peer *peer) struct message_handshake_initiation packet; down_write(&peer->handshake.lock); - if (!time_is_before_jiffies64(peer->last_sent_handshake + REKEY_TIMEOUT)) { + if (!has_expired(peer->last_sent_handshake, REKEY_TIMEOUT)) { up_write(&peer->handshake.lock); return; /* This function is rate limited. */ } - peer->last_sent_handshake = get_jiffies_64(); + peer->last_sent_handshake = ktime_get_boottime(); up_write(&peer->handshake.lock); net_dbg_ratelimited("%s: Sending handshake initiation to peer %llu (%pISpfsc)\n", peer->device->dev->name, peer->internal_id, &peer->endpoint.addr); @@ -59,7 +58,7 @@ void packet_send_queued_handshake_initiation(struct wireguard_peer *peer, bool i /* First checking the timestamp here is just an optimization; it will * be caught while properly locked inside the actual work queue. */ - if (!time_is_before_jiffies64(peer->last_sent_handshake + REKEY_TIMEOUT)) + if (!has_expired(peer->last_sent_handshake, REKEY_TIMEOUT)) return; peer = peer_rcu_get(peer); @@ -73,7 +72,7 @@ void packet_send_handshake_response(struct wireguard_peer *peer) struct message_handshake_response packet; net_dbg_ratelimited("%s: Sending handshake response to peer %llu (%pISpfsc)\n", peer->device->dev->name, peer->internal_id, &peer->endpoint.addr); - peer->last_sent_handshake = get_jiffies_64(); + peer->last_sent_handshake = ktime_get_boottime(); if (noise_handshake_create_response(&packet, &peer->handshake)) { cookie_add_mac_to_packet(&packet, sizeof(packet), peer); @@ -104,7 +103,7 @@ static inline void keep_key_fresh(struct wireguard_peer *peer) keypair = rcu_dereference_bh(peer->keypairs.current_keypair); if (likely(keypair && keypair->sending.is_valid) && (unlikely(atomic64_read(&keypair->sending.counter.counter) > REKEY_AFTER_MESSAGES) || - (keypair->i_am_the_initiator && unlikely(time_is_before_eq_jiffies64(keypair->sending.birthdate + REKEY_AFTER_TIME))))) + (keypair->i_am_the_initiator && unlikely(has_expired(keypair->sending.birthdate, REKEY_AFTER_TIME))))) send = true; rcu_read_unlock_bh(); @@ -306,7 +305,7 @@ void packet_send_staged_packets(struct wireguard_peer *peer) key = &keypair->sending; if (unlikely(!key || !key->is_valid)) goto out_nokey; - if (unlikely(time_is_before_eq_jiffies64(key->birthdate + REJECT_AFTER_TIME))) + if (unlikely(has_expired(key->birthdate, REJECT_AFTER_TIME))) goto out_invalid; /* After we know we have a somewhat valid key, we now try to assign nonces to |