gtp: pass up link local traffic to userspace socket
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 6 May 2024 23:12:36 +0000 (01:12 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 6 May 2024 23:35:58 +0000 (01:35 +0200)
According to TS 29.061, it is possible to see IPv6 link-local traffic in
the GTP tunnel, see 11.2.1.3.2 IPv6 Stateless Address Autoconfiguration
(IPv6 SLAAC).

Pass up these packets to the userspace daemon to handle them as control
GTP traffic.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
drivers/net/gtp.c

index 8e861778c4e9cf7e726eaaf34d51a7077a1b9974..939699d6cf6f62688a2a45991fabc4abf8752976 100644 (file)
@@ -251,6 +251,10 @@ static bool gtp_check_ms_ipv6(struct sk_buff *skb, struct pdp_ctx *pctx,
 
        ip6h = (struct ipv6hdr *)(skb->data + hdrlen);
 
+       if ((ipv6_addr_type(&ip6h->saddr) & IPV6_ADDR_LINKLOCAL) ||
+           (ipv6_addr_type(&ip6h->daddr) & IPV6_ADDR_LINKLOCAL))
+               return false;
+
        if (role == GTP_ROLE_SGSN) {
                ret = ipv6_pdp_addr_equal(&ip6h->daddr, &pctx->ms.addr6);
        } else {