All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hangbin Liu <liuhangbin@gmail.com>
To: Steffen Klassert <steffen.klassert@secunet.com>
Cc: netdev@vger.kernel.org, Guy Shapiro <guysh@mellanox.com>,
	David Miller <davem@davemloft.net>
Subject: Re: [PATCH v2] xfrm: fix xfrm_dev_event() missing when compile without CONFIG_XFRM_OFFLOAD
Date: Tue, 6 Jun 2017 17:26:01 +0800	[thread overview]
Message-ID: <20170606092600.GC12974@leo.usersys.redhat.com> (raw)
In-Reply-To: <20170606080658.GO2631@secunet.com>

On Tue, Jun 06, 2017 at 10:06:58AM +0200, Steffen Klassert wrote:
> On Thu, Jun 01, 2017 at 02:57:56PM +0800, Hangbin Liu wrote:
> > In commit d77e38e612a0 ("xfrm: Add an IPsec hardware offloading API") we
> > make xfrm_device.o only compiled when enable option CONFIG_XFRM_OFFLOAD.
> > But this will make xfrm_dev_event() missing if we only enable default XFRM
> > options.
> > 
> > Then if we set down and unregister an interface with IPsec on it.
> 
> You should not be able to register an interface with IPsec offload
> without CONFIG_XFRM_OFFLOAD.

Yes, I mean when compile with default CONFIG_XFRM, the xfrm_dev_event() ->
xfrm_dev_down() -> xfrm_garbage_collect() will missing.

> 
> > there
> > will no xfrm_garbage_collect(), which will cause dev usage count hold and
> > get error like:
> > 
> > unregister_netdevice: waiting for <dev> to become free. Usage count = 4
> 
> Can you explain how to reproduce this?
> 

Sure, I didn't try physical drivers, just test latest net-next with
bridge/bonding and could reproduce it everytime.

```
# cat rep.sh
#!/bin/bash
iface=$1
src=$2
dst=$3
run=$4

brctl addbr br0
brctl addif br0 ${iface}
ip link set ${iface} up
ip link set br0 up
ip addr add ${src}/24 dev br0
ip xfrm state flush && ip xfrm policy flush
ip xfrm state add src ${src} dst ${dst} spi 1000 proto esp enc des3_ede _I_want_to_have_chicken_ auth sha1 beef_fish_pork_salad mode transport
ip xfrm state add src ${dst} dst ${src} spi 1000 proto esp enc des3_ede _I_want_to_have_chicken_ auth sha1 beef_fish_pork_salad mode transport
ip xfrm policy add src ${src} dst ${dst} dir out tmpl proto esp spi 1000 mode transport
ip xfrm policy add src ${dst} dst ${src} dir in tmpl proto esp spi 1000 mode transport

if [ "$run" ]; then
        sleep 1
        ping ${dst} -c 4
        ip link set br0 down
        ip link del br0
fi
```

On host A run : # ./rep.sh eth1 192.168.1.1 192.168.1.2
On host B run : # ./rep.sh eth1 192.168.1.2 192.168.1.1 run

Then we will see error like
kernel:unregister_netdevice: waiting for br0 to become free. Usage count = 3

Thanks
Hangbin

  reply	other threads:[~2017-06-06  9:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-01  0:38 [PATCH] xfrm: fix xfrm_dev_event() missing when compile without CONFIG_XFRM_OFFLOAD Hangbin Liu
2017-06-01  5:20 ` kbuild test robot
2017-06-01  6:57 ` [PATCH v2] " Hangbin Liu
2017-06-06  8:06   ` Steffen Klassert
2017-06-06  9:26     ` Hangbin Liu [this message]
2017-06-07 10:59       ` Steffen Klassert
2017-06-07 10:59   ` Steffen Klassert

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=20170606092600.GC12974@leo.usersys.redhat.com \
    --to=liuhangbin@gmail.com \
    --cc=davem@davemloft.net \
    --cc=guysh@mellanox.com \
    --cc=netdev@vger.kernel.org \
    --cc=steffen.klassert@secunet.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.