Skip to content

Commit f4eac70

Browse files
committed
Merge tag 'ovpn-net-20260504' of https://github.com/OpenVPN/ovpn-net-next
Antonio Quartulli says: ==================== Includes changes: * ensure MAC header offset is reset before delivering packet * ensure gro_cells_receive() and dstats_dev_add() are called with BH disabled * reduce ping count in selftest to ensure it completes within timeout * tag 'ovpn-net-20260504' of https://github.com/OpenVPN/ovpn-net-next: selftests: ovpn: reduce ping count in test.sh ovpn: ensure packet delivery happens with BH disabled ovpn: reset MAC header before passing skb up ==================== Link: https://patch.msgid.link/20260504230305.2681646-1-antonio@openvpn.net Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents bd75e10 + 201ba70 commit f4eac70

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

  • drivers/net/ovpn
  • tools/testing/selftests/net/ovpn

drivers/net/ovpn/io.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,24 @@ static void ovpn_netdev_write(struct ovpn_peer *peer, struct sk_buff *skb)
8585
skb_scrub_packet(skb, true);
8686

8787
/* network header reset in ovpn_decrypt_post() */
88+
skb_reset_mac_header(skb);
8889
skb_reset_transport_header(skb);
8990
skb_reset_inner_headers(skb);
9091

9192
/* cause packet to be "received" by the interface */
9293
pkt_len = skb->len;
94+
/* we may get here in process context in case of TCP connections,
95+
* therefore we have to disable BHs to ensure gro_cells_receive()
96+
* and dev_dstats_rx_add() do not get corrupted or enter deadlock
97+
*/
98+
local_bh_disable();
9399
ret = gro_cells_receive(&peer->ovpn->gro_cells, skb);
94100
if (likely(ret == NET_RX_SUCCESS)) {
95101
/* update RX stats with the size of decrypted packet */
96102
ovpn_peer_stats_increment_rx(&peer->vpn_stats, pkt_len);
97103
dev_dstats_rx_add(peer->ovpn->dev, pkt_len);
98104
}
105+
local_bh_enable();
99106
}
100107

101108
void ovpn_decrypt_post(void *data, int ret)

tools/testing/selftests/net/ovpn/test.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ ovpn_run_basic_traffic() {
9898
sleep 0.3
9999
ovpn_cmd_ok "send baseline traffic to peer ${p}" \
100100
ip netns exec ovpn_peer0 \
101-
ping -qfc 500 -w 3 5.5.5.$((p + 1))
101+
ping -qfc 100 -w 3 5.5.5.$((p + 1))
102102
ovpn_cmd_ok "send large-payload traffic to peer ${p}" \
103103
ip netns exec ovpn_peer0 \
104-
ping -qfc 500 -s 3000 -w 3 5.5.5.$((p + 1))
104+
ping -qfc 100 -s 3000 -w 3 5.5.5.$((p + 1))
105105

106106
wait "${tcpdump_pid1}" || return 1
107107
wait "${tcpdump_pid2}" || return 1

0 commit comments

Comments
 (0)