From: Kuniyuki Iwashima Date: Tue, 2 Jun 2026 19:03:41 +0000 (+0000) Subject: geneve: Reuse ipv6_addr_type() result in geneve_nl2info(). X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1221c53985e8b0d8562bb13acd6351fd80333058;p=thirdparty%2Fkernel%2Flinux.git geneve: Reuse ipv6_addr_type() result in geneve_nl2info(). geneve_nl2info() calls ipv6_addr_type() to check if the remote IPv6 address is link-local. Then, it also calls ipv6_addr_is_multicast() for the same address. Let's not call ipv6_addr_is_multicast() and reuse ipv6_addr_type(). Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Link: https://patch.msgid.link/20260602190436.139591-2-kuniyu@google.com Signed-off-by: Jakub Kicinski --- diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index e8ff03ed87dc5..8413c21fee6fc 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -1924,6 +1924,8 @@ static int geneve_nl2info(struct nlattr *tb[], struct nlattr *data[], if (data[IFLA_GENEVE_REMOTE6]) { #if IS_ENABLED(CONFIG_IPV6) + int addr_type; + if (changelink && (ip_tunnel_info_af(info) == AF_INET)) { attrtype = IFLA_GENEVE_REMOTE6; goto change_notsup; @@ -1933,13 +1935,13 @@ static int geneve_nl2info(struct nlattr *tb[], struct nlattr *data[], info->key.u.ipv6.dst = nla_get_in6_addr(data[IFLA_GENEVE_REMOTE6]); - if (ipv6_addr_type(&info->key.u.ipv6.dst) & - IPV6_ADDR_LINKLOCAL) { + addr_type = ipv6_addr_type(&info->key.u.ipv6.dst); + if (addr_type & IPV6_ADDR_LINKLOCAL) { NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6], "Remote IPv6 address cannot be link-local"); return -EINVAL; } - if (ipv6_addr_is_multicast(&info->key.u.ipv6.dst)) { + if (addr_type & IPV6_ADDR_MULTICAST) { NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6], "Remote IPv6 address cannot be Multicast"); return -EINVAL;