Skip to content
  • Fernando Fernandez Mancera's avatar
    netfilter: nfnetlink_osf: add missing fmatch check · 1a6a0951
    Fernando Fernandez Mancera authored
    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: 11eeef41
    
     ("netfilter: passive OS fingerprint xtables match")
    Signed-off-by: default avatarFernando Fernandez Mancera <ffmancera@riseup.net>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    1a6a0951