fix: do not append random trailers to I1-I5 and dummy junk packets

This commit is contained in:
v1l3nk4 authored and Yaroslav Gurov committed 2026-09-06 12:16:03 +02:00
1 parent 3c38e168be
commit 4569c4c67f
3 files changed
+9 -7

No files matched your search

+4 -4
View File
@@ -53,7 +53,7 @@ static void wg_packet_send_handshake_initiation(struct wg_peer *peer)
if (spec->pkt_size > 0) {
mutex_lock(&spec->lock);
jp_spec_applymods(spec, peer);
wg_socket_send_buffer_to_peer(peer, spec->pkt, spec->pkt_size, 0, 0);
wg_socket_send_buffer_to_peer(peer, spec->pkt, spec->pkt_size, 0, 0, false);
atomic_inc(&peer->jp_packet_counter);
mutex_unlock(&spec->lock);
}
@@ -72,7 +72,7 @@ static void wg_packet_send_handshake_initiation(struct wg_peer *peer)
get_random_bytes(buffer, junk_packet_size);
get_random_bytes(&ds, 1);
wg_socket_send_buffer_to_peer(peer, buffer, junk_packet_size, ds, 0);
wg_socket_send_buffer_to_peer(peer, buffer, junk_packet_size, ds, 0, false);
}
kfree(buffer);
@@ -86,7 +86,7 @@ static void wg_packet_send_handshake_initiation(struct wg_peer *peer)
atomic64_set(&peer->last_sent_handshake,
ktime_get_coarse_boottime_ns());
wg_socket_send_buffer_to_peer(peer, &packet, sizeof(packet),
HANDSHAKE_DSCP, wg->init_padding);
HANDSHAKE_DSCP, wg->init_padding, true);
wg_timers_handshake_initiated(peer);
}
}
@@ -158,7 +158,7 @@ void wg_packet_send_handshake_response(struct wg_peer *peer)
wg_socket_send_buffer_to_peer(peer, &packet,
sizeof(packet),
HANDSHAKE_DSCP,
wg->resp_padding);
wg->resp_padding, true);
}
}
}
+4 -2
View File
@@ -187,14 +187,16 @@ int wg_socket_send_skb_to_peer(struct wg_peer *peer, struct sk_buff *skb, u8 ds)
}
int wg_socket_send_buffer_to_peer(struct wg_peer *peer, void *buffer,
size_t len, u8 ds, size_t padding)
size_t len, u8 ds, size_t padding, bool trailer)
{
struct sk_buff *skb;
void *crypto = NULL;
size_t trailer_len;
struct chacha_state state;
trailer_len = wg_peer_skb_random_trailer(peer, peer->device, padding + len);
trailer_len = trailer
? wg_peer_skb_random_trailer(peer, peer->device, padding + len)
: 0;
skb = alloc_skb(len + padding + trailer_len + SKB_HEADER_LEN, GFP_ATOMIC);
if (unlikely(!skb))
+1 -1
View File
@@ -15,7 +15,7 @@ int wg_socket_init(struct wg_device *wg, u16 port);
void wg_socket_reinit(struct wg_device *wg, struct sock *new4,
struct sock *new6);
int wg_socket_send_buffer_to_peer(struct wg_peer *peer, void *data,
size_t len, u8 ds, size_t padding);
size_t len, u8 ds, size_t padding, bool trailer);
int wg_socket_send_skb_to_peer(struct wg_peer *peer, struct sk_buff *skb,
u8 ds);
int wg_socket_send_buffer_as_reply_to_skb(struct wg_device *wg,