]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ovpn: limit keepalive values to one day
authorMarco Baffo <marco@mandelbit.com>
Wed, 22 Jul 2026 04:47:56 +0000 (06:47 +0200)
committerAntonio Quartulli <antonio@openvpn.net>
Thu, 30 Jul 2026 09:28:30 +0000 (11:28 +0200)
Large keepalive values can overflow the delayed-work delay on 32-bit
systems, causing the keepalive worker to be repeatedly scheduled.

A correct configuration should not require such large keepalive values,
and an upper limit of one day is already generous and unnecessary in
practice. Limit both the keepalive interval and timeout to 86400 seconds.

Signed-off-by: Marco Baffo <marco@mandelbit.com>
Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
Documentation/netlink/specs/ovpn.yaml
drivers/net/ovpn/netlink-gen.c

index b0c782e59a32baa96b31bb5f7631d5f98c5d83f5..ac50d1d7c00a63b9f2fbb3e93b8c8430e49cd001 100644 (file)
@@ -118,12 +118,16 @@ attribute-sets:
         doc: >-
           The number of seconds after which a keep alive message is sent to the
           peer
+        checks:
+          max: 86400
       -
         name: keepalive-timeout
         type: u32
         doc: >-
           The number of seconds from the last activity after which the peer is
           assumed dead
+        checks:
+          max: 86400
       -
         name: del-reason
         type: u32
index 2147cec7c2c524086473cca4f385ef61ebef94b9..92d2fdc17c2e8be933b63b128489ac8df08aba4c 100644 (file)
@@ -16,6 +16,14 @@ static const struct netlink_range_validation ovpn_a_peer_id_range = {
        .max    = 16777215ULL,
 };
 
+static const struct netlink_range_validation ovpn_a_peer_keepalive_interval_range = {
+       .max    = 86400ULL,
+};
+
+static const struct netlink_range_validation ovpn_a_peer_keepalive_timeout_range = {
+       .max    = 86400ULL,
+};
+
 static const struct netlink_range_validation ovpn_a_peer_tx_id_range = {
        .max    = 16777215ULL,
 };
@@ -68,8 +76,8 @@ const struct nla_policy ovpn_peer_nl_policy[OVPN_A_PEER_TX_ID + 1] = {
        [OVPN_A_PEER_LOCAL_IPV4] = { .type = NLA_BE32, },
        [OVPN_A_PEER_LOCAL_IPV6] = NLA_POLICY_EXACT_LEN(16),
        [OVPN_A_PEER_LOCAL_PORT] = NLA_POLICY_MIN(NLA_BE16, 1),
-       [OVPN_A_PEER_KEEPALIVE_INTERVAL] = { .type = NLA_U32, },
-       [OVPN_A_PEER_KEEPALIVE_TIMEOUT] = { .type = NLA_U32, },
+       [OVPN_A_PEER_KEEPALIVE_INTERVAL] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_interval_range),
+       [OVPN_A_PEER_KEEPALIVE_TIMEOUT] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_timeout_range),
        [OVPN_A_PEER_DEL_REASON] = NLA_POLICY_MAX(NLA_U32, 4),
        [OVPN_A_PEER_VPN_RX_BYTES] = { .type = NLA_UINT, },
        [OVPN_A_PEER_VPN_TX_BYTES] = { .type = NLA_UINT, },
@@ -97,8 +105,8 @@ const struct nla_policy ovpn_peer_new_input_nl_policy[OVPN_A_PEER_TX_ID + 1] = {
        [OVPN_A_PEER_VPN_IPV6] = NLA_POLICY_EXACT_LEN(16),
        [OVPN_A_PEER_LOCAL_IPV4] = { .type = NLA_BE32, },
        [OVPN_A_PEER_LOCAL_IPV6] = NLA_POLICY_EXACT_LEN(16),
-       [OVPN_A_PEER_KEEPALIVE_INTERVAL] = { .type = NLA_U32, },
-       [OVPN_A_PEER_KEEPALIVE_TIMEOUT] = { .type = NLA_U32, },
+       [OVPN_A_PEER_KEEPALIVE_INTERVAL] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_interval_range),
+       [OVPN_A_PEER_KEEPALIVE_TIMEOUT] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_timeout_range),
        [OVPN_A_PEER_TX_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_tx_id_range),
 };
 
@@ -112,8 +120,8 @@ const struct nla_policy ovpn_peer_set_input_nl_policy[OVPN_A_PEER_TX_ID + 1] = {
        [OVPN_A_PEER_VPN_IPV6] = NLA_POLICY_EXACT_LEN(16),
        [OVPN_A_PEER_LOCAL_IPV4] = { .type = NLA_BE32, },
        [OVPN_A_PEER_LOCAL_IPV6] = NLA_POLICY_EXACT_LEN(16),
-       [OVPN_A_PEER_KEEPALIVE_INTERVAL] = { .type = NLA_U32, },
-       [OVPN_A_PEER_KEEPALIVE_TIMEOUT] = { .type = NLA_U32, },
+       [OVPN_A_PEER_KEEPALIVE_INTERVAL] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_interval_range),
+       [OVPN_A_PEER_KEEPALIVE_TIMEOUT] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_keepalive_timeout_range),
        [OVPN_A_PEER_TX_ID] = NLA_POLICY_FULL_RANGE(NLA_U32, &ovpn_a_peer_tx_id_range),
 };