• C
    xfrm: clean up xfrm protocol checks · d410ef75
    Cong Wang 提交于
    [ Upstream commit dbb2483b2a46fbaf833cfb5deb5ed9cace9c7399 ]
    
    In commit 6a53b759 ("xfrm: check id proto in validate_tmpl()")
    I introduced a check for xfrm protocol, but according to Herbert
    IPSEC_PROTO_ANY should only be used as a wildcard for lookup, so
    it should be removed from validate_tmpl().
    
    And, IPSEC_PROTO_ANY is expected to only match 3 IPSec-specific
    protocols, this is why xfrm_state_flush() could still miss
    IPPROTO_ROUTING, which leads that those entries are left in
    net->xfrm.state_all before exit net. Fix this by replacing
    IPSEC_PROTO_ANY with zero.
    
    This patch also extracts the check from validate_tmpl() to
    xfrm_id_proto_valid() and uses it in parse_ipsecrequest().
    With this, no other protocols should be added into xfrm.
    
    Fixes: 6a53b759 ("xfrm: check id proto in validate_tmpl()")
    Reported-by: syzbot+0bf0519d6e0de15914fe@syzkaller.appspotmail.com
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: NCong Wang <xiyou.wangcong@gmail.com>
    Acked-by: NHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: NSteffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    d410ef75
af_key.c 100.9 KB