]> git.baikalelectronics.ru Git - kernel.git/commit
netfilter: nfnetlink_osf: add missing fmatch check
authorFernando Fernandez Mancera <ffmancera@riseup.net>
Mon, 21 Jan 2019 11:53:21 +0000 (12:53 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 28 Jan 2019 10:09:11 +0000 (11:09 +0100)
commit58b5b919c7ec4ebf6a777239d7e9b905d35b3f04
treed48e9ca85e9b8ace9d319bfe68c1a2c2dfef9f60
parenta5a9a58467b72436221d2dd0237128d4d1e087a7
netfilter: nfnetlink_osf: add missing fmatch check

When we check the tcp options of a packet and it doesn't match the current
fingerprint, the tcp packet option pointer must be restored to its initial
value in order to do the proper tcp options check for the next fingerprint.

Here we can see an example.
Assumming the following fingerprint base with two lines:

S10:64:1:60:M*,S,T,N,W6:      Linux:3.0::Linux 3.0
S20:64:1:60:M*,S,T,N,W7:      Linux:4.19:arch:Linux 4.1

Where TCP options are the last field in the OS signature, all of them overlap
except by the last one, ie. 'W6' versus 'W7'.

In case a packet for Linux 4.19 kicks in, the osf finds no matching because the
TCP options pointer is updated after checking for the TCP options in the first
line.

Therefore, reset pointer back to where it should be.

Fixes: 82f337bd3ffb ("netfilter: passive OS fingerprint xtables match")
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nfnetlink_osf.c