netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister
@ 2024-05-09 13:18 Hangbin Liu
  2024-05-09 13:18 ` [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit Hangbin Liu
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Hangbin Liu @ 2024-05-09 13:18 UTC (permalink / raw)
  To: netdev
  Cc: David S. Miller, David Ahern, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault,
	Simon Horman, David Lebrun, Hangbin Liu

Fix some errors in seg6 unregister path, like missing unregister functions,
incorrect unregister order, etc.

v3:
1) fix unreachable code when CONFIG_IPV6_SEG6_LWTUNNEL=n and
   CONFIG_IPV6_SEG6_HMAC=n (Sabrina Dubroca)
2) separate the patch into 3 small patches since they fix different
   commits (Simon Horman)

v2: define CONFIG_IPV6_SEG6_LWTUNNEL for label out_unregister_genl (Sabrina Dubroca)

Hangbin Liu (3):
  ipv6: sr: add missing seg6_local_exit
  ipv6: sr: fix incorrect unregister order
  ipv6: sr: fix invalid unregister error path

 net/ipv6/seg6.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit
  2024-05-09 13:18 [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister Hangbin Liu
@ 2024-05-09 13:18 ` Hangbin Liu
  2024-05-10  8:05   ` Sabrina Dubroca
  2024-05-11  1:48   ` David Ahern
  2024-05-09 13:18 ` [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order Hangbin Liu
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 12+ messages in thread
From: Hangbin Liu @ 2024-05-09 13:18 UTC (permalink / raw)
  To: netdev
  Cc: David S. Miller, David Ahern, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault,
	Simon Horman, David Lebrun, Hangbin Liu

Currently, we only call seg6_local_exit() in seg6_init() if
seg6_local_init() failed. But forgot to call it in seg6_exit().

Fixes: d1df6fd8a1d2 ("ipv6: sr: define core operations for seg6local lightweight tunnel")
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
---
 net/ipv6/seg6.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
index 35508abd76f4..5423f1f2aa62 100644
--- a/net/ipv6/seg6.c
+++ b/net/ipv6/seg6.c
@@ -564,6 +564,7 @@ void seg6_exit(void)
 	seg6_hmac_exit();
 #endif
 #ifdef CONFIG_IPV6_SEG6_LWTUNNEL
+	seg6_local_exit();
 	seg6_iptunnel_exit();
 #endif
 	unregister_pernet_subsys(&ip6_segments_ops);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order
  2024-05-09 13:18 [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister Hangbin Liu
  2024-05-09 13:18 ` [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit Hangbin Liu
@ 2024-05-09 13:18 ` Hangbin Liu
  2024-05-10  8:08   ` Sabrina Dubroca
  2024-05-11  1:49   ` David Ahern
  2024-05-09 13:18 ` [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path Hangbin Liu
  2024-05-11  2:30 ` [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister patchwork-bot+netdevbpf
  3 siblings, 2 replies; 12+ messages in thread
From: Hangbin Liu @ 2024-05-09 13:18 UTC (permalink / raw)
  To: netdev
  Cc: David S. Miller, David Ahern, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault,
	Simon Horman, David Lebrun, Hangbin Liu

Commit 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and
null-ptr-deref") changed the register order in seg6_init(). But the
unregister order in seg6_exit() is not updated.

Fixes: 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and null-ptr-deref")
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
---
 net/ipv6/seg6.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
index 5423f1f2aa62..c4ef96c8fdac 100644
--- a/net/ipv6/seg6.c
+++ b/net/ipv6/seg6.c
@@ -567,6 +567,6 @@ void seg6_exit(void)
 	seg6_local_exit();
 	seg6_iptunnel_exit();
 #endif
-	unregister_pernet_subsys(&ip6_segments_ops);
 	genl_unregister_family(&seg6_genl_family);
+	unregister_pernet_subsys(&ip6_segments_ops);
 }
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path
  2024-05-09 13:18 [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister Hangbin Liu
  2024-05-09 13:18 ` [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit Hangbin Liu
  2024-05-09 13:18 ` [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order Hangbin Liu
@ 2024-05-09 13:18 ` Hangbin Liu
  2024-05-10  8:32   ` Sabrina Dubroca
  2024-05-11  1:52   ` David Ahern
  2024-05-11  2:30 ` [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister patchwork-bot+netdevbpf
  3 siblings, 2 replies; 12+ messages in thread
From: Hangbin Liu @ 2024-05-09 13:18 UTC (permalink / raw)
  To: netdev
  Cc: David S. Miller, David Ahern, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault,
	Simon Horman, David Lebrun, Hangbin Liu

The error path of seg6_init() is wrong in case CONFIG_IPV6_SEG6_LWTUNNEL
is not defined. In that case if seg6_hmac_init() fails, the
genl_unregister_family() isn't called.

This issue exist since commit 46738b1317e1 ("ipv6: sr: add option to control
lwtunnel support"), and commit 5559cea2d5aa ("ipv6: sr: fix possible
use-after-free and null-ptr-deref") replaced unregister_pernet_subsys()
with genl_unregister_family() in this error path.

Fixes: 46738b1317e1 ("ipv6: sr: add option to control lwtunnel support")
Reported-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
---
 net/ipv6/seg6.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
index c4ef96c8fdac..a31521e270f7 100644
--- a/net/ipv6/seg6.c
+++ b/net/ipv6/seg6.c
@@ -551,6 +551,8 @@ int __init seg6_init(void)
 #endif
 #ifdef CONFIG_IPV6_SEG6_LWTUNNEL
 out_unregister_genl:
+#endif
+#if IS_ENABLED(CONFIG_IPV6_SEG6_LWTUNNEL) || IS_ENABLED(CONFIG_IPV6_SEG6_HMAC)
 	genl_unregister_family(&seg6_genl_family);
 #endif
 out_unregister_pernet:
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit
  2024-05-09 13:18 ` [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit Hangbin Liu
@ 2024-05-10  8:05   ` Sabrina Dubroca
  2024-05-11  1:48   ` David Ahern
  1 sibling, 0 replies; 12+ messages in thread
From: Sabrina Dubroca @ 2024-05-10  8:05 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, David S. Miller, David Ahern, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Vasiliy Kovalev, Guillaume Nault,
	Simon Horman, David Lebrun

2024-05-09, 21:18:10 +0800, Hangbin Liu wrote:
> Currently, we only call seg6_local_exit() in seg6_init() if
> seg6_local_init() failed. But forgot to call it in seg6_exit().
> 
> Fixes: d1df6fd8a1d2 ("ipv6: sr: define core operations for seg6local lightweight tunnel")
> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>

Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>

-- 
Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order
  2024-05-09 13:18 ` [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order Hangbin Liu
@ 2024-05-10  8:08   ` Sabrina Dubroca
  2024-05-11  1:49   ` David Ahern
  1 sibling, 0 replies; 12+ messages in thread
From: Sabrina Dubroca @ 2024-05-10  8:08 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, David S. Miller, David Ahern, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Vasiliy Kovalev, Guillaume Nault,
	Simon Horman, David Lebrun

2024-05-09, 21:18:11 +0800, Hangbin Liu wrote:
> Commit 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and
> null-ptr-deref") changed the register order in seg6_init(). But the
> unregister order in seg6_exit() is not updated.
> 
> Fixes: 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and null-ptr-deref")
> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>

Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>

-- 
Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path
  2024-05-09 13:18 ` [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path Hangbin Liu
@ 2024-05-10  8:32   ` Sabrina Dubroca
  2024-05-11  1:52   ` David Ahern
  1 sibling, 0 replies; 12+ messages in thread
From: Sabrina Dubroca @ 2024-05-10  8:32 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, David S. Miller, David Ahern, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Vasiliy Kovalev, Guillaume Nault,
	Simon Horman, David Lebrun

2024-05-09, 21:18:12 +0800, Hangbin Liu wrote:
> The error path of seg6_init() is wrong in case CONFIG_IPV6_SEG6_LWTUNNEL
> is not defined. In that case if seg6_hmac_init() fails, the
> genl_unregister_family() isn't called.
> 
> This issue exist since commit 46738b1317e1 ("ipv6: sr: add option to control
> lwtunnel support"), and commit 5559cea2d5aa ("ipv6: sr: fix possible
> use-after-free and null-ptr-deref") replaced unregister_pernet_subsys()
> with genl_unregister_family() in this error path.
> 
> Fixes: 46738b1317e1 ("ipv6: sr: add option to control lwtunnel support")
> Reported-by: Guillaume Nault <gnault@redhat.com>
> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>

Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>

seg6_hmac_init_algo also returns without cleaning up the previous
allocations if one fails, so it's going to leak all that memory and
the crypto tfms.

-- 
Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit
  2024-05-09 13:18 ` [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit Hangbin Liu
  2024-05-10  8:05   ` Sabrina Dubroca
@ 2024-05-11  1:48   ` David Ahern
  1 sibling, 0 replies; 12+ messages in thread
From: David Ahern @ 2024-05-11  1:48 UTC (permalink / raw)
  To: Hangbin Liu, netdev
  Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault, Simon Horman,
	David Lebrun

On 5/9/24 7:18 AM, Hangbin Liu wrote:
> Currently, we only call seg6_local_exit() in seg6_init() if
> seg6_local_init() failed. But forgot to call it in seg6_exit().
> 
> Fixes: d1df6fd8a1d2 ("ipv6: sr: define core operations for seg6local lightweight tunnel")
> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
> ---
>  net/ipv6/seg6.c | 1 +
>  1 file changed, 1 insertion(+)
> 

Reviewed-by: David Ahern <dsahern@kernel.org>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order
  2024-05-09 13:18 ` [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order Hangbin Liu
  2024-05-10  8:08   ` Sabrina Dubroca
@ 2024-05-11  1:49   ` David Ahern
  1 sibling, 0 replies; 12+ messages in thread
From: David Ahern @ 2024-05-11  1:49 UTC (permalink / raw)
  To: Hangbin Liu, netdev
  Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault, Simon Horman,
	David Lebrun

On 5/9/24 7:18 AM, Hangbin Liu wrote:
> Commit 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and
> null-ptr-deref") changed the register order in seg6_init(). But the
> unregister order in seg6_exit() is not updated.
> 
> Fixes: 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and null-ptr-deref")
> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
> ---
>  net/ipv6/seg6.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 

Reviewed-by: David Ahern <dsahern@kernel.org>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path
  2024-05-09 13:18 ` [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path Hangbin Liu
  2024-05-10  8:32   ` Sabrina Dubroca
@ 2024-05-11  1:52   ` David Ahern
  2024-05-11  7:42     ` Hangbin Liu
  1 sibling, 1 reply; 12+ messages in thread
From: David Ahern @ 2024-05-11  1:52 UTC (permalink / raw)
  To: Hangbin Liu, netdev
  Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault, Simon Horman,
	David Lebrun

On 5/9/24 7:18 AM, Hangbin Liu wrote:
> The error path of seg6_init() is wrong in case CONFIG_IPV6_SEG6_LWTUNNEL
> is not defined. In that case if seg6_hmac_init() fails, the
> genl_unregister_family() isn't called.
> 
> This issue exist since commit 46738b1317e1 ("ipv6: sr: add option to control
> lwtunnel support"), and commit 5559cea2d5aa ("ipv6: sr: fix possible
> use-after-free and null-ptr-deref") replaced unregister_pernet_subsys()
> with genl_unregister_family() in this error path.
> 
> Fixes: 46738b1317e1 ("ipv6: sr: add option to control lwtunnel support")
> Reported-by: Guillaume Nault <gnault@redhat.com>
> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
> ---
>  net/ipv6/seg6.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
> index c4ef96c8fdac..a31521e270f7 100644
> --- a/net/ipv6/seg6.c
> +++ b/net/ipv6/seg6.c
> @@ -551,6 +551,8 @@ int __init seg6_init(void)
>  #endif
>  #ifdef CONFIG_IPV6_SEG6_LWTUNNEL
>  out_unregister_genl:
> +#endif
> +#if IS_ENABLED(CONFIG_IPV6_SEG6_LWTUNNEL) || IS_ENABLED(CONFIG_IPV6_SEG6_HMAC)
>  	genl_unregister_family(&seg6_genl_family);
>  #endif
>  out_unregister_pernet:

a good example of why ifdef's create problems. It would have been
simpler if all of those init functions were defined for both cases and
this function does not need the '#if' spaghetti.

Reviewed-by: David Ahern <dsahern@kernel.org>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister
  2024-05-09 13:18 [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister Hangbin Liu
                   ` (2 preceding siblings ...)
  2024-05-09 13:18 ` [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path Hangbin Liu
@ 2024-05-11  2:30 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 12+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-05-11  2:30 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, davem, dsahern, edumazet, kuba, pabeni, kovalev, sd,
	gnault, horms, david.lebrun

Hello:

This series was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Thu,  9 May 2024 21:18:09 +0800 you wrote:
> Fix some errors in seg6 unregister path, like missing unregister functions,
> incorrect unregister order, etc.
> 
> v3:
> 1) fix unreachable code when CONFIG_IPV6_SEG6_LWTUNNEL=n and
>    CONFIG_IPV6_SEG6_HMAC=n (Sabrina Dubroca)
> 2) separate the patch into 3 small patches since they fix different
>    commits (Simon Horman)
> 
> [...]

Here is the summary with links:
  - [PATCHv3,net,1/3] ipv6: sr: add missing seg6_local_exit
    https://git.kernel.org/netdev/net/c/3321687e3213
  - [PATCHv3,net,2/3] ipv6: sr: fix incorrect unregister order
    https://git.kernel.org/netdev/net/c/6e370a771d29
  - [PATCHv3,net,3/3] ipv6: sr: fix invalid unregister error path
    https://git.kernel.org/netdev/net/c/160e9d275218

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path
  2024-05-11  1:52   ` David Ahern
@ 2024-05-11  7:42     ` Hangbin Liu
  0 siblings, 0 replies; 12+ messages in thread
From: Hangbin Liu @ 2024-05-11  7:42 UTC (permalink / raw)
  To: David Ahern
  Cc: netdev, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Vasiliy Kovalev, Sabrina Dubroca, Guillaume Nault,
	Simon Horman, David Lebrun

On Fri, May 10, 2024 at 07:52:36PM -0600, David Ahern wrote:
> a good example of why ifdef's create problems. It would have been
> simpler if all of those init functions were defined for both cases and
> this function does not need the '#if' spaghetti.

Yes, I will post a restruct patch for net-next.

Thanks
Hangbin

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-05-11  7:42 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-09 13:18 [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister Hangbin Liu
2024-05-09 13:18 ` [PATCHv3 net 1/3] ipv6: sr: add missing seg6_local_exit Hangbin Liu
2024-05-10  8:05   ` Sabrina Dubroca
2024-05-11  1:48   ` David Ahern
2024-05-09 13:18 ` [PATCHv3 net 2/3] ipv6: sr: fix incorrect unregister order Hangbin Liu
2024-05-10  8:08   ` Sabrina Dubroca
2024-05-11  1:49   ` David Ahern
2024-05-09 13:18 ` [PATCHv3 net 3/3] ipv6: sr: fix invalid unregister error path Hangbin Liu
2024-05-10  8:32   ` Sabrina Dubroca
2024-05-11  1:52   ` David Ahern
2024-05-11  7:42     ` Hangbin Liu
2024-05-11  2:30 ` [PATCHv3 net 0/3] ipv6: sr: fix errors during unregister patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).