]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
netfilter: xt_tcpmss: check remaining length before reading optlen
authorFlorian Westphal <fw@strlen.de>
Mon, 19 Jan 2026 11:30:42 +0000 (12:30 +0100)
committerFlorian Westphal <fw@strlen.de>
Tue, 20 Jan 2026 15:23:38 +0000 (16:23 +0100)
Quoting reporter:
  In net/netfilter/xt_tcpmss.c (lines 53-68), the TCP option parser reads
 op[i+1] directly without validating the remaining option length.

  If the last byte of the option field is not EOL/NOP (0/1), the code attempts
  to index op[i+1]. In the case where i + 1 == optlen, this causes an
  out-of-bounds read, accessing memory past the optlen boundary
  (either reading beyond the stack buffer _opt or the
  following payload).

Reported-by: sungzii <sungzii@pm.me>
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/xt_tcpmss.c

index 37704ab0179923549a82ba7ced714769f204449f..0d32d4841cb325efd09ed5d0bf1772e6c9bd1eeb 100644 (file)
@@ -61,7 +61,7 @@ tcpmss_mt(const struct sk_buff *skb, struct xt_action_param *par)
                        return (mssval >= info->mss_min &&
                                mssval <= info->mss_max) ^ info->invert;
                }
-               if (op[i] < 2)
+               if (op[i] < 2 || i == optlen - 1)
                        i++;
                else
                        i += op[i+1] ? : 1;