From: Pablo Neira Ayuso Date: Mon, 6 May 2024 23:12:36 +0000 (+0200) Subject: gtp: pass up link local traffic to userspace socket X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=e4f88f7381fa551ff4ad059930a729a0ef2b405f;p=linux.git gtp: pass up link local traffic to userspace socket 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 --- diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c index 8e861778c4e9c..939699d6cf6f6 100644 --- a/drivers/net/gtp.c +++ b/drivers/net/gtp.c @@ -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 {