]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
wg-quick: linux: use smallest mtu, not largest
authorJason A. Donenfeld <Jason@zx2c4.com>
Wed, 21 May 2025 21:03:08 +0000 (23:03 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Wed, 21 May 2025 21:07:59 +0000 (23:07 +0200)
By accident, this function was looking at the endpoint with the largest
MTU rather than the smallest one.

Reported-by: Ismael Bouya <ismael@bouya.org>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/wg-quick/linux.bash

index 93df80db0f40ce343c319acce0fb66a54a3f691c..acb015d567a02dccc36fd735465010b24482f90a 100755 (executable)
@@ -123,7 +123,7 @@ add_addr() {
 }
 
 set_mtu_up() {
-       local mtu=0 endpoint output
+       local mtu=2147483647 endpoint output
        if [[ -n $MTU ]]; then
                cmd ip link set mtu "$MTU" up dev "$INTERFACE"
                return
@@ -131,13 +131,13 @@ set_mtu_up() {
        while read -r _ endpoint; do
                [[ $endpoint =~ ^\[?([a-z0-9:.]+)\]?:[0-9]+$ ]] || continue
                output="$(ip route get "${BASH_REMATCH[1]}" || true)"
-               [[ ( $output =~ mtu\ ([0-9]+) || ( $output =~ dev\ ([^ ]+) && $(ip link show dev "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) ) ) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
+               [[ ( $output =~ mtu\ ([0-9]+) || ( $output =~ dev\ ([^ ]+) && $(ip link show dev "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) ) ) && ${BASH_REMATCH[1]} -lt $mtu ]] && mtu="${BASH_REMATCH[1]}"
        done < <(wg show "$INTERFACE" endpoints)
-       if [[ $mtu -eq 0 ]]; then
+       if [[ $mtu -eq 2147483647 ]]; then
                read -r output < <(ip route show default || true) || true
-               [[ ( $output =~ mtu\ ([0-9]+) || ( $output =~ dev\ ([^ ]+) && $(ip link show dev "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) ) ) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
+               [[ ( $output =~ mtu\ ([0-9]+) || ( $output =~ dev\ ([^ ]+) && $(ip link show dev "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) ) ) && ${BASH_REMATCH[1]} -lt $mtu ]] && mtu="${BASH_REMATCH[1]}"
        fi
-       [[ $mtu -gt 0 ]] || mtu=1500
+       [[ $mtu -gt 0 && $mtu -lt 2147483647 ]] || mtu=1500
        cmd ip link set mtu $(( mtu - 80 )) up dev "$INTERFACE"
 }