From: "Michael S. Tsirkin" <mst@redhat.com> Date: 2013-08-01 16:08:07
commit df8ef8f3aaa6692970a436204c4429210addb23a
macvlan: add FDB bridge ops and macvlan flags
added a flags field to macvlan, which can be
controlled from userspace.
The idea is to make the interface future-proof
so we can add flags and not new fields.
However, flags value isn't validated, as a result,
userspace can't detect which flags are supported.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: John Fastabend <redacted>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
Changes from v1:
tweaked commit message
no code changes
Please consider this patch for -stable.
The idea is by the time we add more flags,
everyone has updated to a kernel that
detects errors, so userspace will be able
to detect supported flags cleanly.
drivers/net/macvlan.c | 7 +++++++
1 file changed, 7 insertions(+)
From: John Fastabend <hidden> Date: 2013-08-01 17:24:23
On 8/1/2013 9:09 AM, Michael S. Tsirkin wrote:
commit df8ef8f3aaa6692970a436204c4429210addb23a
macvlan: add FDB bridge ops and macvlan flags
added a flags field to macvlan, which can be
controlled from userspace.
The idea is to make the interface future-proof
so we can add flags and not new fields.
However, flags value isn't validated, as a result,
userspace can't detect which flags are supported.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: John Fastabend <redacted>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
Changes from v1:
tweaked commit message
no code changes
Please consider this patch for -stable.
The idea is by the time we add more flags,
everyone has updated to a kernel that
detects errors, so userspace will be able
to detect supported flags cleanly.
Agreed and because we haven't added more flags yet this shouldn't
break uapi. Thanks for catching this.
@@ -809,6 +813,9 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,if(data&&data[IFLA_MACVLAN_FLAGS])vlan->flags=nla_get_u16(data[IFLA_MACVLAN_FLAGS]);+if(vlan->flags&~MACVLAN_FLAG_NOPROMISC)+return-EINVAL;+
Is there really a case where newlink is called without first calling
validate? I don't think there is so the snippet here in newlink could
be dropped.
Thanks,
John
From: "Michael S. Tsirkin" <mst@redhat.com> Date: 2013-08-01 19:18:28
On Thu, Aug 01, 2013 at 10:24:19AM -0700, John Fastabend wrote:
On 8/1/2013 9:09 AM, Michael S. Tsirkin wrote:
quoted
commit df8ef8f3aaa6692970a436204c4429210addb23a
macvlan: add FDB bridge ops and macvlan flags
added a flags field to macvlan, which can be
controlled from userspace.
The idea is to make the interface future-proof
so we can add flags and not new fields.
However, flags value isn't validated, as a result,
userspace can't detect which flags are supported.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: John Fastabend <redacted>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
Changes from v1:
tweaked commit message
no code changes
Please consider this patch for -stable.
The idea is by the time we add more flags,
everyone has updated to a kernel that
detects errors, so userspace will be able
to detect supported flags cleanly.
Agreed and because we haven't added more flags yet this shouldn't
break uapi. Thanks for catching this.
By the same logic should we also add the check to macvlan_changelink()?
I'm not sure what do you mean "By the same logic" -
macvlan_changelink is static unlike macvlan_common_newlink
which is exported to modules.
So why isn't macvlan_validate sufficient for macvlan_changelink?
@@ -809,6 +813,9 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,if(data&&data[IFLA_MACVLAN_FLAGS])vlan->flags=nla_get_u16(data[IFLA_MACVLAN_FLAGS]);+if(vlan->flags&~MACVLAN_FLAG_NOPROMISC)+return-EINVAL;+
Is there really a case where newlink is called without first calling
validate? I don't think there is so the snippet here in newlink could
be dropped.
Thanks,
John
It seems so - macvtap_newlink calls macvlan_common_newlink.
macvtap does not seem to have .validate.
From: John Fastabend <hidden> Date: 2013-08-01 19:34:27
On 8/1/2013 12:19 PM, Michael S. Tsirkin wrote:
On Thu, Aug 01, 2013 at 10:24:19AM -0700, John Fastabend wrote:
quoted
On 8/1/2013 9:09 AM, Michael S. Tsirkin wrote:
quoted
commit df8ef8f3aaa6692970a436204c4429210addb23a
macvlan: add FDB bridge ops and macvlan flags
added a flags field to macvlan, which can be
controlled from userspace.
The idea is to make the interface future-proof
so we can add flags and not new fields.
However, flags value isn't validated, as a result,
userspace can't detect which flags are supported.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: John Fastabend <redacted>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
Changes from v1:
tweaked commit message
no code changes
Please consider this patch for -stable.
The idea is by the time we add more flags,
everyone has updated to a kernel that
detects errors, so userspace will be able
to detect supported flags cleanly.
Agreed and because we haven't added more flags yet this shouldn't
break uapi. Thanks for catching this.
@@ -809,6 +813,9 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,if(data&&data[IFLA_MACVLAN_FLAGS])vlan->flags=nla_get_u16(data[IFLA_MACVLAN_FLAGS]);+if(vlan->flags&~MACVLAN_FLAG_NOPROMISC)+return-EINVAL;+
Is there really a case where newlink is called without first calling
validate? I don't think there is so the snippet here in newlink could
be dropped.
Thanks,
John
It seems so - macvtap_newlink calls macvlan_common_newlink.
macvtap does not seem to have .validate.
but it calls macvlan_link_register() from macvtap_init which sets
up the validate ops,
int macvlan_link_register(struct rtnl_link_ops *ops)
{
/* common fields */
ops->priv_size = sizeof(struct macvlan_dev);
ops->validate = macvlan_validate
From: John Fastabend <hidden> Date: 2013-08-01 19:34:32
On 8/1/2013 12:19 PM, Michael S. Tsirkin wrote:
On Thu, Aug 01, 2013 at 10:24:19AM -0700, John Fastabend wrote:
quoted
On 8/1/2013 9:09 AM, Michael S. Tsirkin wrote:
quoted
commit df8ef8f3aaa6692970a436204c4429210addb23a
macvlan: add FDB bridge ops and macvlan flags
added a flags field to macvlan, which can be
controlled from userspace.
The idea is to make the interface future-proof
so we can add flags and not new fields.
However, flags value isn't validated, as a result,
userspace can't detect which flags are supported.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: John Fastabend <redacted>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
Changes from v1:
tweaked commit message
no code changes
Please consider this patch for -stable.
The idea is by the time we add more flags,
everyone has updated to a kernel that
detects errors, so userspace will be able
to detect supported flags cleanly.
Agreed and because we haven't added more flags yet this shouldn't
break uapi. Thanks for catching this.
@@ -809,6 +813,9 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,if(data&&data[IFLA_MACVLAN_FLAGS])vlan->flags=nla_get_u16(data[IFLA_MACVLAN_FLAGS]);+if(vlan->flags&~MACVLAN_FLAG_NOPROMISC)+return-EINVAL;+
Is there really a case where newlink is called without first calling
validate? I don't think there is so the snippet here in newlink could
be dropped.
Thanks,
John
It seems so - macvtap_newlink calls macvlan_common_newlink.
macvtap does not seem to have .validate.
but it calls macvlan_link_register() from macvtap_init which sets
up the validate ops,
int macvlan_link_register(struct rtnl_link_ops *ops)
{
/* common fields */
ops->priv_size = sizeof(struct macvlan_dev);
ops->validate = macvlan_validate
From: "Michael S. Tsirkin" <mst@redhat.com> Date: 2013-08-01 19:42:16
On Thu, Aug 01, 2013 at 12:34:24PM -0700, John Fastabend wrote:
On 8/1/2013 12:19 PM, Michael S. Tsirkin wrote:
quoted
On Thu, Aug 01, 2013 at 10:24:19AM -0700, John Fastabend wrote:
quoted
On 8/1/2013 9:09 AM, Michael S. Tsirkin wrote:
quoted
commit df8ef8f3aaa6692970a436204c4429210addb23a
macvlan: add FDB bridge ops and macvlan flags
added a flags field to macvlan, which can be
controlled from userspace.
The idea is to make the interface future-proof
so we can add flags and not new fields.
However, flags value isn't validated, as a result,
userspace can't detect which flags are supported.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: John Fastabend <redacted>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
Changes from v1:
tweaked commit message
no code changes
Please consider this patch for -stable.
The idea is by the time we add more flags,
everyone has updated to a kernel that
detects errors, so userspace will be able
to detect supported flags cleanly.
Agreed and because we haven't added more flags yet this shouldn't
break uapi. Thanks for catching this.
@@ -809,6 +813,9 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,if(data&&data[IFLA_MACVLAN_FLAGS])vlan->flags=nla_get_u16(data[IFLA_MACVLAN_FLAGS]);+if(vlan->flags&~MACVLAN_FLAG_NOPROMISC)+return-EINVAL;+
Is there really a case where newlink is called without first calling
validate? I don't think there is so the snippet here in newlink could
be dropped.
Thanks,
John
It seems so - macvtap_newlink calls macvlan_common_newlink.
macvtap does not seem to have .validate.
but it calls macvlan_link_register() from macvtap_init which sets
up the validate ops,
int macvlan_link_register(struct rtnl_link_ops *ops)
{
/* common fields */
ops->priv_size = sizeof(struct macvlan_dev);
ops->validate = macvlan_validate
I see. I'll drop this second chunk in the patch,
thanks for catching this.
--
MST