Subject: CVE-2021-47245: netfilter: synproxy: Fix out of bounds when parsing TCP options

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

netfilter: synproxy: Fix out of bounds when parsing TCP options

The TCP option parser in synproxy (synproxy_parse_options) could read
one byte out of bounds. When the length is 1, the execution flow gets
into the loop, reads one byte of the opcode, and if the opcode is
neither TCPOPT_EOL nor TCPOPT_NOP, it reads one more byte, which exceeds
the length of 1.

This fix is inspired by commit 9609dad263f8 ("ipv4: tcp_input: fix stack
out of bounds when parsing TCP options.").

v2 changes:

Added an early return when length < 0 to avoid calling
skb_header_pointer with negative length.

The Linux kernel CVE team has assigned CVE-2021-47245 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 4.4.274 with commit e1eb98cfeafd
	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 4.9.274 with commit 576c1526b4d8
	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 4.14.238 with commit 674b5f0c6a4f
	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 4.19.196 with commit 7d9a9a1a88a3
	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 5.4.128 with commit 6defc77d48ef
	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 5.10.46 with commit 9cdf299ba4e1
	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 5.12.13 with commit f648089337cb
	Issue introduced in 3.12 with commit 48b1de4c110a and fixed in 5.13 with commit 5fc177ab7594

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2021-47245
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	net/netfilter/nf_synproxy_core.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/e1eb98cfeafdd85537e7e3cefe93ca9bfbcc3ea8
	https://git.kernel.org/stable/c/576c1526b4d83c44ad7b673cb841f36cbc6cb6c4
	https://git.kernel.org/stable/c/674b5f0c6a4fc5d3abce877048290cea6091fcb1
	https://git.kernel.org/stable/c/7d9a9a1a88a3da574e019b4de756bc73337b3b0b
	https://git.kernel.org/stable/c/6defc77d48eff74075b80ad5925061b2fc010d98
	https://git.kernel.org/stable/c/9cdf299ba4e153b5e56187648420de22c6216f02
	https://git.kernel.org/stable/c/f648089337cb8ed40b2bb96e244f72b9d97dc96b
	https://git.kernel.org/stable/c/5fc177ab759418c9537433e63301096e733fb915