From: Ido Schimmel <idosch@idosch.org>
To: heminhong <heminhong@kylinos.cn>
Cc: netdev@vger.kernel.org, kuba@kernel.org, kuniyu@google.com,
edumazet@google.com, pabeni@redhat.com, dsahern@kernel.org
Subject: Re: [PATCH] ipv6: sr: add validity check for algorithm ID
Date: Tue, 12 Aug 2025 16:52:58 +0300 [thread overview]
Message-ID: <aJtHOuAc3BM3Aa9l@shredder> (raw)
In-Reply-To: <20250812061944.76781-1-heminhong@kylinos.cn>
On Tue, Aug 12, 2025 at 02:19:44PM +0800, heminhong wrote:
> From: Minhong He <heminhong@kylinos.cn>
>
> The seg6_genl_sethmac() directly uses the algid passed in by the user
> without checking whether it is an HMAC algorithm supported by the
> system. If the algid is invalid, unknown errors may occur during
> subsequent use of the HMAC information.
You should explain the user visible effects from this bug/fix rather
than saying "unknown errors". AFAICT, an invalid HMAC algorithm will
result in packet drops during encap / decap, but I might have missed a
more serious problem.
Fixes tag seems appropriate:
Fixes: 4f4853dc1c9c ("ipv6: sr: implement API to control SR HMAC structure")
And please read:
https://docs.kernel.org/process/maintainer-netdev.html
>
> Signed-off-by: Minhong He <heminhong@kylinos.cn>
> ---
> include/net/seg6_hmac.h | 1 +
> net/ipv6/seg6.c | 5 +++++
> net/ipv6/seg6_hmac.c | 2 +-
> 3 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/include/net/seg6_hmac.h b/include/net/seg6_hmac.h
> index 24f733b3e3fe..c34e86c99de3 100644
> --- a/include/net/seg6_hmac.h
> +++ b/include/net/seg6_hmac.h
> @@ -49,6 +49,7 @@ extern int seg6_hmac_info_del(struct net *net, u32 key);
> extern int seg6_push_hmac(struct net *net, struct in6_addr *saddr,
> struct ipv6_sr_hdr *srh);
> extern bool seg6_hmac_validate_skb(struct sk_buff *skb);
> +extern struct seg6_hmac_algo *__hmac_get_algo(u8 alg_id);
> #ifdef CONFIG_IPV6_SEG6_HMAC
> extern int seg6_hmac_init(void);
> extern void seg6_hmac_exit(void);
> diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
> index 180da19c148c..33c1481ca50a 100644
> --- a/net/ipv6/seg6.c
> +++ b/net/ipv6/seg6.c
> @@ -152,6 +152,7 @@ static int seg6_genl_sethmac(struct sk_buff *skb, struct genl_info *info)
> struct net *net = genl_info_net(info);
> struct seg6_pernet_data *sdata;
> struct seg6_hmac_info *hinfo;
> + struct seg6_hmac_algo *algo;
> u32 hmackeyid;
> char *secret;
> int err = 0;
> @@ -175,6 +176,10 @@ static int seg6_genl_sethmac(struct sk_buff *skb, struct genl_info *info)
> if (slen > SEG6_HMAC_SECRET_LEN)
> return -EINVAL;
>
> + algo = __hmac_get_algo(algid);
> + if (!algo)
> + return -EINVAL;
Another possibility is to keep the HMAC algorithm logic in seg6_hmac.c
and perform the check there. Something like:
diff --git a/net/ipv6/seg6_hmac.c b/net/ipv6/seg6_hmac.c
index f78ecb6ad838..d77b52523b6a 100644
--- a/net/ipv6/seg6_hmac.c
+++ b/net/ipv6/seg6_hmac.c
@@ -304,6 +304,9 @@ int seg6_hmac_info_add(struct net *net, u32 key, struct seg6_hmac_info *hinfo)
struct seg6_pernet_data *sdata = seg6_pernet(net);
int err;
+ if (!__hmac_get_algo(hinfo->alg_id))
+ return -EINVAL;
+
err = rhashtable_lookup_insert_fast(&sdata->hmac_infos, &hinfo->node,
rht_params);
> +
> mutex_lock(&sdata->lock);
> hinfo = seg6_hmac_info_lookup(net, hmackeyid);
>
> diff --git a/net/ipv6/seg6_hmac.c b/net/ipv6/seg6_hmac.c
> index f78ecb6ad838..1c4858195613 100644
> --- a/net/ipv6/seg6_hmac.c
> +++ b/net/ipv6/seg6_hmac.c
> @@ -107,7 +107,7 @@ static struct sr6_tlv_hmac *seg6_get_tlv_hmac(struct ipv6_sr_hdr *srh)
> return tlv;
> }
>
> -static struct seg6_hmac_algo *__hmac_get_algo(u8 alg_id)
> +struct seg6_hmac_algo *__hmac_get_algo(u8 alg_id)
> {
> struct seg6_hmac_algo *algo;
> int i, alg_count;
> --
> 2.25.1
>
>
next prev parent reply other threads:[~2025-08-12 13:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-12 6:19 [PATCH] ipv6: sr: add validity check for algorithm ID heminhong
2025-08-12 13:52 ` Ido Schimmel [this message]
2025-08-13 6:57 ` [PATCH net-next v2] ipv6: sr: validate HMAC algorithm ID in seg6_genl_sethmac heminhong
2025-08-13 7:17 ` Kuniyuki Iwashima
2025-08-13 11:54 ` Ido Schimmel
2025-08-14 6:33 ` [PATCH net v3] ipv6: sr: validate HMAC algorithm ID in seg6_hmac_info_add heminhong
2025-08-14 15:48 ` Ido Schimmel
2025-08-15 6:38 ` [PATCH net v4] " Minhong He
2025-08-16 6:54 ` Kuniyuki Iwashima
2025-08-19 0:40 ` patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aJtHOuAc3BM3Aa9l@shredder \
--to=idosch@idosch.org \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=heminhong@kylinos.cn \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox