2025-01-13, 10:31:24 +0100, Antonio Quartulli wrote: > +static void ovpn_peer_release(struct ovpn_peer *peer) > +{ > + ovpn_bind_reset(peer, NULL); > + netdev_put(peer->ovpn->dev, &peer->dev_tracker); I think this needs to move after the call_rcu. Otherwise, module unload could proceed (no more ref on the last ovpn netdevice), not see any pending work in the final rcu_barrier of ovpn_cleanup, and finish unloading. Then when ovpn_peer_release_rcu gets called, it's not there anymore. > + call_rcu(&peer->rcu, ovpn_peer_release_rcu); > +} -- Sabrina