lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 6 Oct 2020 14:13:15 +0000
From:   Nikolay Aleksandrov <nikolay@...dia.com>
To:     "bridge@...ts.linux-foundation.org" 
        <bridge@...ts.linux-foundation.org>,
        "henrik.bjoernlund@...rochip.com" <henrik.bjoernlund@...rochip.com>,
        "davem@...emloft.net" <davem@...emloft.net>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "jiri@...lanox.com" <jiri@...lanox.com>,
        "netdev@...r.kernel.org" <netdev@...r.kernel.org>,
        Roopa Prabhu <roopa@...dia.com>,
        "idosch@...lanox.com" <idosch@...lanox.com>,
        "kuba@...nel.org" <kuba@...nel.org>,
        "UNGLinuxDriver@...rochip.com" <UNGLinuxDriver@...rochip.com>
CC:     "horatiu.vultur@...rochip.com" <horatiu.vultur@...rochip.com>
Subject: Re: [net-next v2 01/11] net: bridge: extend the process of special
 frames

On Thu, 2020-10-01 at 10:30 +0000, Henrik Bjoernlund wrote:
> This patch extends the processing of frames in the bridge. Currently MRP
> frames needs special processing and the current implementation doesn't
> allow a nice way to process different frame types. Therefore try to
> improve this by adding a list that contains frame types that need
> special processing. This list is iterated for each input frame and if
> there is a match based on frame type then these functions will be called
> and decide what to do with the frame. It can process the frame then the
> bridge doesn't need to do anything or don't process so then the bridge
> will do normal forwarding.
> 
> Reviewed-by: Horatiu Vultur  <horatiu.vultur@...rochip.com>
> Signed-off-by: Henrik Bjoernlund  <henrik.bjoernlund@...rochip.com>
> ---
>  net/bridge/br_device.c  |  1 +
>  net/bridge/br_input.c   | 31 ++++++++++++++++++++++++++++++-
>  net/bridge/br_mrp.c     | 19 +++++++++++++++----
>  net/bridge/br_private.h | 18 ++++++++++++------
>  4 files changed, 58 insertions(+), 11 deletions(-)
> 

Hi,
Mostly looks good, one comment below.

> diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
> index 9a2fb4aa1a10..206c4ba51cd2 100644
> --- a/net/bridge/br_device.c
> +++ b/net/bridge/br_device.c
> [snip]
> @@ -380,3 +395,17 @@ rx_handler_func_t *br_get_rx_handler(const struct net_device *dev)
>  
>  	return br_handle_frame;
>  }
> +
> +void br_add_frame(struct net_bridge *br, struct br_frame_type *ft)
> +{
> +	hlist_add_head_rcu(&ft->list, &br->frame_type_list);
> +}
> +
> +void br_del_frame(struct net_bridge *br, struct br_frame_type *ft)
> +{
> +	struct br_frame_type *tmp;
> +
> +	hlist_for_each_entry(tmp, &br->frame_type_list, list)
> +		if (ft == tmp)
> +			hlist_del_rcu(&ft->list);

This hasn't crashed only because you're using hlist_del_rcu(), otherwise it's
wrong. You should use hlist_for_each_entry_safe() when deleting from the list
while walking it or you should end the walk after the delete since there can't
be two elements with the same address anyway.

Thanks,
 Nik



Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ