| From foo@baz Wed May 31 09:13:34 JST 2017 |
| From: Tobias Jungel <tobias.jungel@bisdn.de> |
| Date: Wed, 17 May 2017 09:29:12 +0200 |
| Subject: bridge: netlink: check vlan_default_pvid range |
| |
| From: Tobias Jungel <tobias.jungel@bisdn.de> |
| |
| |
| [ Upstream commit a285860211bf257b0e6d522dac6006794be348af ] |
| |
| Currently it is allowed to set the default pvid of a bridge to a value |
| above VLAN_VID_MASK (0xfff). This patch adds a check to br_validate and |
| returns -EINVAL in case the pvid is out of bounds. |
| |
| Reproduce by calling: |
| |
| [root@test ~]# ip l a type bridge |
| [root@test ~]# ip l a type dummy |
| [root@test ~]# ip l s bridge0 type bridge vlan_filtering 1 |
| [root@test ~]# ip l s bridge0 type bridge vlan_default_pvid 9999 |
| [root@test ~]# ip l s dummy0 master bridge0 |
| [root@test ~]# bridge vlan |
| port vlan ids |
| bridge0 9999 PVID Egress Untagged |
| |
| dummy0 9999 PVID Egress Untagged |
| |
| Fixes: 0f963b7592ef ("bridge: netlink: add support for default_pvid") |
| Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> |
| Signed-off-by: Tobias Jungel <tobias.jungel@bisdn.de> |
| Acked-by: Sabrina Dubroca <sd@queasysnail.net> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/bridge/br_netlink.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/net/bridge/br_netlink.c |
| +++ b/net/bridge/br_netlink.c |
| @@ -776,6 +776,13 @@ static int br_validate(struct nlattr *tb |
| return -EPROTONOSUPPORT; |
| } |
| } |
| + |
| + if (data[IFLA_BR_VLAN_DEFAULT_PVID]) { |
| + __u16 defpvid = nla_get_u16(data[IFLA_BR_VLAN_DEFAULT_PVID]); |
| + |
| + if (defpvid >= VLAN_VID_MASK) |
| + return -EINVAL; |
| + } |
| #endif |
| |
| return 0; |