Message ID | 20240419061425.132723-1-jun.gu@easystack.cn (mailing list archive) |
---|---|
State | Accepted |
Commit | 2540088b836f9e208f7f722a67f9b168737036e8 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,v4] net: openvswitch: Check vport netdev name | expand |
On Fri, 19 Apr 2024 14:14:25 +0800 Jun Gu wrote: > vport->dev = dev_get_by_name(ovs_dp_get_net(vport->dp), name); > - if (!vport->dev) { > + /* Ensure that the device exists and that the provided > + * name is not one of its aliases. > + */ > + if (!vport->dev || strcmp(name, ovs_vport_name(vport))) { > err = -ENODEV; > goto error_free_vport; > } Sorry I applied this before I realised that it's buggy. dev_get_by_name() will give you a reference on the device. You must free it, so the error handling is different. Please follow up ASAP to fix that.
Hello: This patch was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Fri, 19 Apr 2024 14:14:25 +0800 you wrote: > Ensure that the provided netdev name is not one of its aliases to > prevent unnecessary creation and destruction of the vport by > ovs-vswitchd. > > Signed-off-by: Jun Gu <jun.gu@easystack.cn> > Acked-by: Eelco Chaudron <echaudro@redhat.com> > > [...] Here is the summary with links: - [net-next,v4] net: openvswitch: Check vport netdev name https://git.kernel.org/netdev/net-next/c/2540088b836f You are awesome, thank you!
My mistake, I'm wondering that I need to submit a new patch or a v5 version based on this patch? 在 4/23/24 08:38, Jakub Kicinski 写道: > On Fri, 19 Apr 2024 14:14:25 +0800 Jun Gu wrote: >> vport->dev = dev_get_by_name(ovs_dp_get_net(vport->dp), name); >> - if (!vport->dev) { >> + /* Ensure that the device exists and that the provided >> + * name is not one of its aliases. >> + */ >> + if (!vport->dev || strcmp(name, ovs_vport_name(vport))) { >> err = -ENODEV; >> goto error_free_vport; >> } > > Sorry I applied this before I realised that it's buggy. > dev_get_by_name() will give you a reference on the device. > You must free it, so the error handling is different. > Please follow up ASAP to fix that. >
diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c index 903537a5da22..618edc346c0f 100644 --- a/net/openvswitch/vport-netdev.c +++ b/net/openvswitch/vport-netdev.c @@ -78,7 +78,10 @@ struct vport *ovs_netdev_link(struct vport *vport, const char *name) int err; vport->dev = dev_get_by_name(ovs_dp_get_net(vport->dp), name); - if (!vport->dev) { + /* Ensure that the device exists and that the provided + * name is not one of its aliases. + */ + if (!vport->dev || strcmp(name, ovs_vport_name(vport))) { err = -ENODEV; goto error_free_vport; }