From: Nikolay Aleksandrov Date: Sat, 28 Aug 2021 11:07:49 +0000 (+0300) Subject: bridge: vlan: skip unknown attributes when printing options X-Git-Tag: v5.16.0~46^2~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d3a961a9b16cd9cf4528c30e58032511f5c40917;p=thirdparty%2Fiproute2.git bridge: vlan: skip unknown attributes when printing options Skip unknown attributes when printing vlan options in print_vlan_rtm. Make sure print_vlan_opts doesn't accept attributes it doesn't understand. Currently we print only one type, later global vlan options support will be added. Signed-off-by: Nikolay Aleksandrov Signed-off-by: David Ahern --- diff --git a/bridge/vlan.c b/bridge/vlan.c index b9d928010..7e4254283 100644 --- a/bridge/vlan.c +++ b/bridge/vlan.c @@ -629,6 +629,9 @@ static void print_vlan_opts(struct rtattr *a) __u16 vrange = 0; __u8 state = 0; + if ((a->rta_type & NLA_TYPE_MASK) != BRIDGE_VLANDB_ENTRY) + return; + parse_rtattr_flags(vtb, BRIDGE_VLANDB_ENTRY_MAX, RTA_DATA(a), RTA_PAYLOAD(a), NLA_F_NESTED); vinfo = RTA_DATA(vtb[BRIDGE_VLANDB_ENTRY_INFO]); @@ -716,6 +719,12 @@ int print_vlan_rtm(struct nlmsghdr *n, void *arg, bool monitor) rem = len; for (a = BRVLAN_RTA(bvm); RTA_OK(a, rem); a = RTA_NEXT(a, rem)) { + unsigned short rta_type = a->rta_type & NLA_TYPE_MASK; + + /* skip unknown attributes */ + if (rta_type > BRIDGE_VLANDB_MAX) + continue; + if (vlan_rtm_cur_ifidx != bvm->ifindex) { open_vlan_port(bvm->ifindex, VLAN_SHOW_VLAN); open_json_object(NULL); @@ -724,7 +733,11 @@ int print_vlan_rtm(struct nlmsghdr *n, void *arg, bool monitor) open_json_object(NULL); print_string(PRINT_FP, NULL, "%-" __stringify(IFNAMSIZ) "s ", ""); } - print_vlan_opts(a); + switch (rta_type) { + case BRIDGE_VLANDB_ENTRY: + print_vlan_opts(a); + break; + } close_json_object(); }