2021-06-07 03:12:17

by gushengxian

[permalink] [raw]
Subject: [PATCH] vlan: Avoid crashing the kernel

From: gushengxian <[email protected]>

Avoid crashing the kernel, try using WARN_ON & recovery code
rather than BUG() or BUG_ON().

Signed-off-by: gushengxian <[email protected]>
---
net/8021q/vlan.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 4cdf8416869d..6e784fd8795b 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -97,7 +97,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
ASSERT_RTNL();

vlan_info = rtnl_dereference(real_dev->vlan_info);
- BUG_ON(!vlan_info);
+ WARN_ON(!vlan_info);

grp = &vlan_info->grp;

@@ -163,7 +163,7 @@ int register_vlan_dev(struct net_device *dev, struct netlink_ext_ack *extack)

vlan_info = rtnl_dereference(real_dev->vlan_info);
/* vlan_info should be there now. vlan_vid_add took care of it */
- BUG_ON(!vlan_info);
+ WARN_ON(!vlan_info);

grp = &vlan_info->grp;
if (grp->nr_vlan_devs == 0) {
--
2.25.1



2021-06-07 15:35:33

by Stephen Hemminger

[permalink] [raw]
Subject: Re: [PATCH] vlan: Avoid crashing the kernel

On Sun, 6 Jun 2021 20:08:39 -0700
[email protected] wrote:

> From: gushengxian <[email protected]>
>
> Avoid crashing the kernel, try using WARN_ON & recovery code
> rather than BUG() or BUG_ON().
>
> Signed-off-by: gushengxian <[email protected]>
> ---
> net/8021q/vlan.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
> index 4cdf8416869d..6e784fd8795b 100644
> --- a/net/8021q/vlan.c
> +++ b/net/8021q/vlan.c
> @@ -97,7 +97,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
> ASSERT_RTNL();
>
> vlan_info = rtnl_dereference(real_dev->vlan_info);
> - BUG_ON(!vlan_info);
> + WARN_ON(!vlan_info);
>
> grp = &vlan_info->grp;

NACK

You change turns bug on into warning and crash from null pointer dereference.