diff options
author | Paolo Abeni <pabeni@redhat.com> | 2015-11-30 12:31:43 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-12-02 17:50:59 +0100 |
commit | 83e4bf7a7486532df2dc3db27e0e07a250990ed2 (patch) | |
tree | 0f299bcb43b700b7bfdab63a998ba4070613a649 /net/openvswitch/vport.h | |
parent | bpf, array: fix heap out-of-bounds access when updating elements (diff) | |
download | linux-83e4bf7a7486532df2dc3db27e0e07a250990ed2.tar.xz linux-83e4bf7a7486532df2dc3db27e0e07a250990ed2.zip |
openvswitch: properly refcount vport-vxlan module
After 614732eaa12d, no refcount is maintained for the vport-vxlan module.
This allows the userspace to remove such module while vport-vxlan
devices still exist, which leads to later oops.
v1 -> v2:
- move vport 'owner' initialization in ovs_vport_ops_register()
and make such function a macro
Fixes: 614732eaa12d ("openvswitch: Use regular VXLAN net_device device")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch/vport.h')
-rw-r--r-- | net/openvswitch/vport.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/openvswitch/vport.h b/net/openvswitch/vport.h index bdfd82a7c064..8ea3a96980ac 100644 --- a/net/openvswitch/vport.h +++ b/net/openvswitch/vport.h @@ -196,7 +196,13 @@ static inline const char *ovs_vport_name(struct vport *vport) return vport->dev->name; } -int ovs_vport_ops_register(struct vport_ops *ops); +int __ovs_vport_ops_register(struct vport_ops *ops); +#define ovs_vport_ops_register(ops) \ + ({ \ + (ops)->owner = THIS_MODULE; \ + __ovs_vport_ops_register(ops); \ + }) + void ovs_vport_ops_unregister(struct vport_ops *ops); static inline struct rtable *ovs_tunnel_route_lookup(struct net *net, |