bridge: vlan: fix possible null ptr derefs on port init and deinit
[firefly-linux-kernel-4.4.55.git] / net / bridge / br_vlan.c
1 #include <linux/kernel.h>
2 #include <linux/netdevice.h>
3 #include <linux/rtnetlink.h>
4 #include <linux/slab.h>
5 #include <net/switchdev.h>
6
7 #include "br_private.h"
8
9 static inline int br_vlan_cmp(struct rhashtable_compare_arg *arg,
10                               const void *ptr)
11 {
12         const struct net_bridge_vlan *vle = ptr;
13         u16 vid = *(u16 *)arg->key;
14
15         return vle->vid != vid;
16 }
17
18 static const struct rhashtable_params br_vlan_rht_params = {
19         .head_offset = offsetof(struct net_bridge_vlan, vnode),
20         .key_offset = offsetof(struct net_bridge_vlan, vid),
21         .key_len = sizeof(u16),
22         .nelem_hint = 3,
23         .locks_mul = 1,
24         .max_size = VLAN_N_VID,
25         .obj_cmpfn = br_vlan_cmp,
26         .automatic_shrinking = true,
27 };
28
29 static struct net_bridge_vlan *br_vlan_lookup(struct rhashtable *tbl, u16 vid)
30 {
31         return rhashtable_lookup_fast(tbl, &vid, br_vlan_rht_params);
32 }
33
34 static void __vlan_add_pvid(struct net_bridge_vlan_group *vg, u16 vid)
35 {
36         if (vg->pvid == vid)
37                 return;
38
39         smp_wmb();
40         vg->pvid = vid;
41 }
42
43 static void __vlan_delete_pvid(struct net_bridge_vlan_group *vg, u16 vid)
44 {
45         if (vg->pvid != vid)
46                 return;
47
48         smp_wmb();
49         vg->pvid = 0;
50 }
51
52 static void __vlan_add_flags(struct net_bridge_vlan *v, u16 flags)
53 {
54         struct net_bridge_vlan_group *vg;
55
56         if (br_vlan_is_master(v))
57                 vg = v->br->vlgrp;
58         else
59                 vg = v->port->vlgrp;
60
61         if (flags & BRIDGE_VLAN_INFO_PVID)
62                 __vlan_add_pvid(vg, v->vid);
63         else
64                 __vlan_delete_pvid(vg, v->vid);
65
66         if (flags & BRIDGE_VLAN_INFO_UNTAGGED)
67                 v->flags |= BRIDGE_VLAN_INFO_UNTAGGED;
68         else
69                 v->flags &= ~BRIDGE_VLAN_INFO_UNTAGGED;
70 }
71
72 static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br,
73                           u16 vid, u16 flags)
74 {
75         const struct net_device_ops *ops = dev->netdev_ops;
76         int err;
77
78         /* If driver uses VLAN ndo ops, use 8021q to install vid
79          * on device, otherwise try switchdev ops to install vid.
80          */
81
82         if (ops->ndo_vlan_rx_add_vid) {
83                 err = vlan_vid_add(dev, br->vlan_proto, vid);
84         } else {
85                 struct switchdev_obj_vlan v = {
86                         .flags = flags,
87                         .vid_begin = vid,
88                         .vid_end = vid,
89                 };
90
91                 err = switchdev_port_obj_add(dev, SWITCHDEV_OBJ_PORT_VLAN, &v);
92                 if (err == -EOPNOTSUPP)
93                         err = 0;
94         }
95
96         return err;
97 }
98
99 static void __vlan_add_list(struct net_bridge_vlan *v)
100 {
101         struct list_head *headp, *hpos;
102         struct net_bridge_vlan *vent;
103
104         headp = br_vlan_is_master(v) ? &v->br->vlgrp->vlan_list :
105                                        &v->port->vlgrp->vlan_list;
106         list_for_each_prev(hpos, headp) {
107                 vent = list_entry(hpos, struct net_bridge_vlan, vlist);
108                 if (v->vid < vent->vid)
109                         continue;
110                 else
111                         break;
112         }
113         list_add(&v->vlist, hpos);
114 }
115
116 static void __vlan_del_list(struct net_bridge_vlan *v)
117 {
118         list_del(&v->vlist);
119 }
120
121 static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br,
122                           u16 vid)
123 {
124         const struct net_device_ops *ops = dev->netdev_ops;
125         int err = 0;
126
127         /* If driver uses VLAN ndo ops, use 8021q to delete vid
128          * on device, otherwise try switchdev ops to delete vid.
129          */
130
131         if (ops->ndo_vlan_rx_kill_vid) {
132                 vlan_vid_del(dev, br->vlan_proto, vid);
133         } else {
134                 struct switchdev_obj_vlan v = {
135                         .vid_begin = vid,
136                         .vid_end = vid,
137                 };
138
139                 err = switchdev_port_obj_del(dev, SWITCHDEV_OBJ_PORT_VLAN, &v);
140                 if (err == -EOPNOTSUPP)
141                         err = 0;
142         }
143
144         return err;
145 }
146
147 /* This is the shared VLAN add function which works for both ports and bridge
148  * devices. There are four possible calls to this function in terms of the
149  * vlan entry type:
150  * 1. vlan is being added on a port (no master flags, global entry exists)
151  * 2. vlan is being added on a bridge (both master and brvlan flags)
152  * 3. vlan is being added on a port, but a global entry didn't exist which
153  *    is being created right now (master flag set, brvlan flag unset), the
154  *    global entry is used for global per-vlan features, but not for filtering
155  * 4. same as 3 but with both master and brvlan flags set so the entry
156  *    will be used for filtering in both the port and the bridge
157  */
158 static int __vlan_add(struct net_bridge_vlan *v, u16 flags)
159 {
160         struct net_bridge_vlan *masterv = NULL;
161         struct net_bridge_port *p = NULL;
162         struct rhashtable *tbl;
163         struct net_device *dev;
164         struct net_bridge *br;
165         int err;
166
167         if (br_vlan_is_master(v)) {
168                 br = v->br;
169                 dev = br->dev;
170                 tbl = &br->vlgrp->vlan_hash;
171         } else {
172                 p = v->port;
173                 br = p->br;
174                 dev = p->dev;
175                 tbl = &p->vlgrp->vlan_hash;
176         }
177
178         if (p) {
179                 u16 master_flags = flags;
180
181                 /* Add VLAN to the device filter if it is supported.
182                  * This ensures tagged traffic enters the bridge when
183                  * promiscuous mode is disabled by br_manage_promisc().
184                  */
185                 err = __vlan_vid_add(dev, br, v->vid, flags);
186                 if (err)
187                         goto out;
188
189                 /* need to work on the master vlan too */
190                 if (flags & BRIDGE_VLAN_INFO_MASTER) {
191                         master_flags |= BRIDGE_VLAN_INFO_BRENTRY;
192                         err = br_vlan_add(br, v->vid, master_flags);
193                         if (err)
194                                 goto out_filt;
195                 }
196
197                 masterv = br_vlan_find(br->vlgrp, v->vid);
198                 if (!masterv) {
199                         /* missing global ctx, create it now */
200                         err = br_vlan_add(br, v->vid, master_flags);
201                         if (err)
202                                 goto out_filt;
203                         masterv = br_vlan_find(br->vlgrp, v->vid);
204                         WARN_ON(!masterv);
205                 }
206                 atomic_inc(&masterv->refcnt);
207                 v->brvlan = masterv;
208         }
209
210         /* Add the dev mac only if it's a usable vlan */
211         if (br_vlan_should_use(v)) {
212                 err = br_fdb_insert(br, p, dev->dev_addr, v->vid);
213                 if (err) {
214                         br_err(br, "failed insert local address into bridge forwarding table\n");
215                         goto out_filt;
216                 }
217         }
218
219         err = rhashtable_lookup_insert_fast(tbl, &v->vnode, br_vlan_rht_params);
220         if (err)
221                 goto out_fdb_insert;
222
223         __vlan_add_list(v);
224         __vlan_add_flags(v, flags);
225         if (br_vlan_is_master(v)) {
226                 if (br_vlan_is_brentry(v))
227                         br->vlgrp->num_vlans++;
228         } else {
229                 p->vlgrp->num_vlans++;
230         }
231 out:
232         return err;
233
234 out_fdb_insert:
235         br_fdb_find_delete_local(br, p, br->dev->dev_addr, v->vid);
236
237 out_filt:
238         if (p) {
239                 __vlan_vid_del(dev, br, v->vid);
240                 if (masterv) {
241                         atomic_dec(&masterv->refcnt);
242                         v->brvlan = NULL;
243                 }
244         }
245
246         goto out;
247 }
248
249 static int __vlan_del(struct net_bridge_vlan *v)
250 {
251         struct net_bridge_vlan *masterv = v;
252         struct net_bridge_vlan_group *vg;
253         struct net_bridge_port *p = NULL;
254         struct net_bridge *br;
255         int err = 0;
256
257         if (br_vlan_is_master(v)) {
258                 br = v->br;
259                 vg = v->br->vlgrp;
260         } else {
261                 p = v->port;
262                 br = p->br;
263                 vg = v->port->vlgrp;
264                 masterv = v->brvlan;
265         }
266
267         __vlan_delete_pvid(vg, v->vid);
268         if (p) {
269                 err = __vlan_vid_del(p->dev, p->br, v->vid);
270                 if (err)
271                         goto out;
272         }
273
274         if (br_vlan_is_master(v)) {
275                 if (br_vlan_is_brentry(v)) {
276                         v->flags &= ~BRIDGE_VLAN_INFO_BRENTRY;
277                         br->vlgrp->num_vlans--;
278                 }
279         } else {
280                 p->vlgrp->num_vlans--;
281         }
282
283         if (masterv != v) {
284                 rhashtable_remove_fast(&vg->vlan_hash, &v->vnode,
285                                        br_vlan_rht_params);
286                 __vlan_del_list(v);
287                 kfree_rcu(v, rcu);
288         }
289
290         if (atomic_dec_and_test(&masterv->refcnt)) {
291                 rhashtable_remove_fast(&masterv->br->vlgrp->vlan_hash,
292                                        &masterv->vnode, br_vlan_rht_params);
293                 __vlan_del_list(masterv);
294                 kfree_rcu(masterv, rcu);
295         }
296 out:
297         return err;
298 }
299
300 static void __vlan_flush(struct net_bridge_vlan_group *vlgrp)
301 {
302         struct net_bridge_vlan *vlan, *tmp;
303
304         __vlan_delete_pvid(vlgrp, vlgrp->pvid);
305         list_for_each_entry_safe(vlan, tmp, &vlgrp->vlan_list, vlist)
306                 __vlan_del(vlan);
307         rhashtable_destroy(&vlgrp->vlan_hash);
308         kfree(vlgrp);
309 }
310
311 struct sk_buff *br_handle_vlan(struct net_bridge *br,
312                                struct net_bridge_vlan_group *vg,
313                                struct sk_buff *skb)
314 {
315         struct net_bridge_vlan *v;
316         u16 vid;
317
318         /* If this packet was not filtered at input, let it pass */
319         if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
320                 goto out;
321
322         /* At this point, we know that the frame was filtered and contains
323          * a valid vlan id.  If the vlan id has untagged flag set,
324          * send untagged; otherwise, send tagged.
325          */
326         br_vlan_get_tag(skb, &vid);
327         v = br_vlan_find(vg, vid);
328         /* Vlan entry must be configured at this point.  The
329          * only exception is the bridge is set in promisc mode and the
330          * packet is destined for the bridge device.  In this case
331          * pass the packet as is.
332          */
333         if (!v || !br_vlan_should_use(v)) {
334                 if ((br->dev->flags & IFF_PROMISC) && skb->dev == br->dev) {
335                         goto out;
336                 } else {
337                         kfree_skb(skb);
338                         return NULL;
339                 }
340         }
341         if (v->flags & BRIDGE_VLAN_INFO_UNTAGGED)
342                 skb->vlan_tci = 0;
343
344 out:
345         return skb;
346 }
347
348 /* Called under RCU */
349 static bool __allowed_ingress(struct net_bridge_vlan_group *vg, __be16 proto,
350                               struct sk_buff *skb, u16 *vid)
351 {
352         const struct net_bridge_vlan *v;
353         bool tagged;
354
355         BR_INPUT_SKB_CB(skb)->vlan_filtered = true;
356         /* If vlan tx offload is disabled on bridge device and frame was
357          * sent from vlan device on the bridge device, it does not have
358          * HW accelerated vlan tag.
359          */
360         if (unlikely(!skb_vlan_tag_present(skb) &&
361                      skb->protocol == proto)) {
362                 skb = skb_vlan_untag(skb);
363                 if (unlikely(!skb))
364                         return false;
365         }
366
367         if (!br_vlan_get_tag(skb, vid)) {
368                 /* Tagged frame */
369                 if (skb->vlan_proto != proto) {
370                         /* Protocol-mismatch, empty out vlan_tci for new tag */
371                         skb_push(skb, ETH_HLEN);
372                         skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto,
373                                                         skb_vlan_tag_get(skb));
374                         if (unlikely(!skb))
375                                 return false;
376
377                         skb_pull(skb, ETH_HLEN);
378                         skb_reset_mac_len(skb);
379                         *vid = 0;
380                         tagged = false;
381                 } else {
382                         tagged = true;
383                 }
384         } else {
385                 /* Untagged frame */
386                 tagged = false;
387         }
388
389         if (!*vid) {
390                 u16 pvid = br_get_pvid(vg);
391
392                 /* Frame had a tag with VID 0 or did not have a tag.
393                  * See if pvid is set on this port.  That tells us which
394                  * vlan untagged or priority-tagged traffic belongs to.
395                  */
396                 if (!pvid)
397                         goto drop;
398
399                 /* PVID is set on this port.  Any untagged or priority-tagged
400                  * ingress frame is considered to belong to this vlan.
401                  */
402                 *vid = pvid;
403                 if (likely(!tagged))
404                         /* Untagged Frame. */
405                         __vlan_hwaccel_put_tag(skb, proto, pvid);
406                 else
407                         /* Priority-tagged Frame.
408                          * At this point, We know that skb->vlan_tci had
409                          * VLAN_TAG_PRESENT bit and its VID field was 0x000.
410                          * We update only VID field and preserve PCP field.
411                          */
412                         skb->vlan_tci |= pvid;
413
414                 return true;
415         }
416
417         /* Frame had a valid vlan tag.  See if vlan is allowed */
418         v = br_vlan_find(vg, *vid);
419         if (v && br_vlan_should_use(v))
420                 return true;
421 drop:
422         kfree_skb(skb);
423         return false;
424 }
425
426 bool br_allowed_ingress(const struct net_bridge *br,
427                         struct net_bridge_vlan_group *vg, struct sk_buff *skb,
428                         u16 *vid)
429 {
430         /* If VLAN filtering is disabled on the bridge, all packets are
431          * permitted.
432          */
433         if (!br->vlan_enabled) {
434                 BR_INPUT_SKB_CB(skb)->vlan_filtered = false;
435                 return true;
436         }
437
438         return __allowed_ingress(vg, br->vlan_proto, skb, vid);
439 }
440
441 /* Called under RCU. */
442 bool br_allowed_egress(struct net_bridge_vlan_group *vg,
443                        const struct sk_buff *skb)
444 {
445         const struct net_bridge_vlan *v;
446         u16 vid;
447
448         /* If this packet was not filtered at input, let it pass */
449         if (!BR_INPUT_SKB_CB(skb)->vlan_filtered)
450                 return true;
451
452         br_vlan_get_tag(skb, &vid);
453         v = br_vlan_find(vg, vid);
454         if (v && br_vlan_should_use(v))
455                 return true;
456
457         return false;
458 }
459
460 /* Called under RCU */
461 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid)
462 {
463         struct net_bridge_vlan_group *vg;
464         struct net_bridge *br = p->br;
465
466         /* If filtering was disabled at input, let it pass. */
467         if (!br->vlan_enabled)
468                 return true;
469
470         vg = p->vlgrp;
471         if (!vg || !vg->num_vlans)
472                 return false;
473
474         if (!br_vlan_get_tag(skb, vid) && skb->vlan_proto != br->vlan_proto)
475                 *vid = 0;
476
477         if (!*vid) {
478                 *vid = br_get_pvid(vg);
479                 if (!*vid)
480                         return false;
481
482                 return true;
483         }
484
485         if (br_vlan_find(vg, *vid))
486                 return true;
487
488         return false;
489 }
490
491 /* Must be protected by RTNL.
492  * Must be called with vid in range from 1 to 4094 inclusive.
493  */
494 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags)
495 {
496         struct net_bridge_vlan *vlan;
497         int ret;
498
499         ASSERT_RTNL();
500
501         vlan = br_vlan_find(br->vlgrp, vid);
502         if (vlan) {
503                 if (!br_vlan_is_brentry(vlan)) {
504                         /* Trying to change flags of non-existent bridge vlan */
505                         if (!(flags & BRIDGE_VLAN_INFO_BRENTRY))
506                                 return -EINVAL;
507                         /* It was only kept for port vlans, now make it real */
508                         ret = br_fdb_insert(br, NULL, br->dev->dev_addr,
509                                             vlan->vid);
510                         if (ret) {
511                                 br_err(br, "failed insert local address into bridge forwarding table\n");
512                                 return ret;
513                         }
514                         atomic_inc(&vlan->refcnt);
515                         vlan->flags |= BRIDGE_VLAN_INFO_BRENTRY;
516                         br->vlgrp->num_vlans++;
517                 }
518                 __vlan_add_flags(vlan, flags);
519                 return 0;
520         }
521
522         vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
523         if (!vlan)
524                 return -ENOMEM;
525
526         vlan->vid = vid;
527         vlan->flags = flags | BRIDGE_VLAN_INFO_MASTER;
528         vlan->flags &= ~BRIDGE_VLAN_INFO_PVID;
529         vlan->br = br;
530         if (flags & BRIDGE_VLAN_INFO_BRENTRY)
531                 atomic_set(&vlan->refcnt, 1);
532         ret = __vlan_add(vlan, flags);
533         if (ret)
534                 kfree(vlan);
535
536         return ret;
537 }
538
539 /* Must be protected by RTNL.
540  * Must be called with vid in range from 1 to 4094 inclusive.
541  */
542 int br_vlan_delete(struct net_bridge *br, u16 vid)
543 {
544         struct net_bridge_vlan *v;
545
546         ASSERT_RTNL();
547
548         v = br_vlan_find(br->vlgrp, vid);
549         if (!v || !br_vlan_is_brentry(v))
550                 return -ENOENT;
551
552         br_fdb_find_delete_local(br, NULL, br->dev->dev_addr, vid);
553
554         return __vlan_del(v);
555 }
556
557 void br_vlan_flush(struct net_bridge *br)
558 {
559         ASSERT_RTNL();
560
561         __vlan_flush(br_vlan_group(br));
562 }
563
564 struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid)
565 {
566         if (!vg)
567                 return NULL;
568
569         return br_vlan_lookup(&vg->vlan_hash, vid);
570 }
571
572 /* Must be protected by RTNL. */
573 static void recalculate_group_addr(struct net_bridge *br)
574 {
575         if (br->group_addr_set)
576                 return;
577
578         spin_lock_bh(&br->lock);
579         if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q)) {
580                 /* Bridge Group Address */
581                 br->group_addr[5] = 0x00;
582         } else { /* vlan_enabled && ETH_P_8021AD */
583                 /* Provider Bridge Group Address */
584                 br->group_addr[5] = 0x08;
585         }
586         spin_unlock_bh(&br->lock);
587 }
588
589 /* Must be protected by RTNL. */
590 void br_recalculate_fwd_mask(struct net_bridge *br)
591 {
592         if (!br->vlan_enabled || br->vlan_proto == htons(ETH_P_8021Q))
593                 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT;
594         else /* vlan_enabled && ETH_P_8021AD */
595                 br->group_fwd_mask_required = BR_GROUPFWD_8021AD &
596                                               ~(1u << br->group_addr[5]);
597 }
598
599 int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
600 {
601         if (br->vlan_enabled == val)
602                 return 0;
603
604         br->vlan_enabled = val;
605         br_manage_promisc(br);
606         recalculate_group_addr(br);
607         br_recalculate_fwd_mask(br);
608
609         return 0;
610 }
611
612 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
613 {
614         if (!rtnl_trylock())
615                 return restart_syscall();
616
617         __br_vlan_filter_toggle(br, val);
618         rtnl_unlock();
619
620         return 0;
621 }
622
623 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
624 {
625         int err = 0;
626         struct net_bridge_port *p;
627         struct net_bridge_vlan *vlan;
628         __be16 oldproto;
629
630         if (br->vlan_proto == proto)
631                 return 0;
632
633         /* Add VLANs for the new proto to the device filter. */
634         list_for_each_entry(p, &br->port_list, list) {
635                 list_for_each_entry(vlan, &p->vlgrp->vlan_list, vlist) {
636                         err = vlan_vid_add(p->dev, proto, vlan->vid);
637                         if (err)
638                                 goto err_filt;
639                 }
640         }
641
642         oldproto = br->vlan_proto;
643         br->vlan_proto = proto;
644
645         recalculate_group_addr(br);
646         br_recalculate_fwd_mask(br);
647
648         /* Delete VLANs for the old proto from the device filter. */
649         list_for_each_entry(p, &br->port_list, list)
650                 list_for_each_entry(vlan, &p->vlgrp->vlan_list, vlist)
651                         vlan_vid_del(p->dev, oldproto, vlan->vid);
652
653         return 0;
654
655 err_filt:
656         list_for_each_entry_continue_reverse(vlan, &p->vlgrp->vlan_list, vlist)
657                 vlan_vid_del(p->dev, proto, vlan->vid);
658
659         list_for_each_entry_continue_reverse(p, &br->port_list, list)
660                 list_for_each_entry(vlan, &p->vlgrp->vlan_list, vlist)
661                         vlan_vid_del(p->dev, proto, vlan->vid);
662
663         return err;
664 }
665
666 int br_vlan_set_proto(struct net_bridge *br, unsigned long val)
667 {
668         int err;
669
670         if (val != ETH_P_8021Q && val != ETH_P_8021AD)
671                 return -EPROTONOSUPPORT;
672
673         if (!rtnl_trylock())
674                 return restart_syscall();
675
676         err = __br_vlan_set_proto(br, htons(val));
677         rtnl_unlock();
678
679         return err;
680 }
681
682 static bool vlan_default_pvid(struct net_bridge_vlan_group *vg, u16 vid)
683 {
684         struct net_bridge_vlan *v;
685
686         if (vid != vg->pvid)
687                 return false;
688
689         v = br_vlan_lookup(&vg->vlan_hash, vid);
690         if (v && br_vlan_should_use(v) &&
691             (v->flags & BRIDGE_VLAN_INFO_UNTAGGED))
692                 return true;
693
694         return false;
695 }
696
697 static void br_vlan_disable_default_pvid(struct net_bridge *br)
698 {
699         struct net_bridge_port *p;
700         u16 pvid = br->default_pvid;
701
702         /* Disable default_pvid on all ports where it is still
703          * configured.
704          */
705         if (vlan_default_pvid(br->vlgrp, pvid))
706                 br_vlan_delete(br, pvid);
707
708         list_for_each_entry(p, &br->port_list, list) {
709                 if (vlan_default_pvid(p->vlgrp, pvid))
710                         nbp_vlan_delete(p, pvid);
711         }
712
713         br->default_pvid = 0;
714 }
715
716 static int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid)
717 {
718         const struct net_bridge_vlan *pvent;
719         struct net_bridge_port *p;
720         u16 old_pvid;
721         int err = 0;
722         unsigned long *changed;
723
724         changed = kcalloc(BITS_TO_LONGS(BR_MAX_PORTS), sizeof(unsigned long),
725                           GFP_KERNEL);
726         if (!changed)
727                 return -ENOMEM;
728
729         old_pvid = br->default_pvid;
730
731         /* Update default_pvid config only if we do not conflict with
732          * user configuration.
733          */
734         pvent = br_vlan_find(br->vlgrp, pvid);
735         if ((!old_pvid || vlan_default_pvid(br->vlgrp, old_pvid)) &&
736             (!pvent || !br_vlan_should_use(pvent))) {
737                 err = br_vlan_add(br, pvid,
738                                   BRIDGE_VLAN_INFO_PVID |
739                                   BRIDGE_VLAN_INFO_UNTAGGED |
740                                   BRIDGE_VLAN_INFO_BRENTRY);
741                 if (err)
742                         goto out;
743                 br_vlan_delete(br, old_pvid);
744                 set_bit(0, changed);
745         }
746
747         list_for_each_entry(p, &br->port_list, list) {
748                 /* Update default_pvid config only if we do not conflict with
749                  * user configuration.
750                  */
751                 if ((old_pvid &&
752                      !vlan_default_pvid(p->vlgrp, old_pvid)) ||
753                     br_vlan_find(p->vlgrp, pvid))
754                         continue;
755
756                 err = nbp_vlan_add(p, pvid,
757                                    BRIDGE_VLAN_INFO_PVID |
758                                    BRIDGE_VLAN_INFO_UNTAGGED);
759                 if (err)
760                         goto err_port;
761                 nbp_vlan_delete(p, old_pvid);
762                 set_bit(p->port_no, changed);
763         }
764
765         br->default_pvid = pvid;
766
767 out:
768         kfree(changed);
769         return err;
770
771 err_port:
772         list_for_each_entry_continue_reverse(p, &br->port_list, list) {
773                 if (!test_bit(p->port_no, changed))
774                         continue;
775
776                 if (old_pvid)
777                         nbp_vlan_add(p, old_pvid,
778                                      BRIDGE_VLAN_INFO_PVID |
779                                      BRIDGE_VLAN_INFO_UNTAGGED);
780                 nbp_vlan_delete(p, pvid);
781         }
782
783         if (test_bit(0, changed)) {
784                 if (old_pvid)
785                         br_vlan_add(br, old_pvid,
786                                     BRIDGE_VLAN_INFO_PVID |
787                                     BRIDGE_VLAN_INFO_UNTAGGED |
788                                     BRIDGE_VLAN_INFO_BRENTRY);
789                 br_vlan_delete(br, pvid);
790         }
791         goto out;
792 }
793
794 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val)
795 {
796         u16 pvid = val;
797         int err = 0;
798
799         if (val >= VLAN_VID_MASK)
800                 return -EINVAL;
801
802         if (!rtnl_trylock())
803                 return restart_syscall();
804
805         if (pvid == br->default_pvid)
806                 goto unlock;
807
808         /* Only allow default pvid change when filtering is disabled */
809         if (br->vlan_enabled) {
810                 pr_info_once("Please disable vlan filtering to change default_pvid\n");
811                 err = -EPERM;
812                 goto unlock;
813         }
814
815         if (!pvid)
816                 br_vlan_disable_default_pvid(br);
817         else
818                 err = __br_vlan_set_default_pvid(br, pvid);
819
820 unlock:
821         rtnl_unlock();
822         return err;
823 }
824
825 int br_vlan_init(struct net_bridge *br)
826 {
827         int ret = -ENOMEM;
828
829         br->vlgrp = kzalloc(sizeof(struct net_bridge_vlan_group), GFP_KERNEL);
830         if (!br->vlgrp)
831                 goto out;
832         ret = rhashtable_init(&br->vlgrp->vlan_hash, &br_vlan_rht_params);
833         if (ret)
834                 goto err_rhtbl;
835         INIT_LIST_HEAD(&br->vlgrp->vlan_list);
836         br->vlan_proto = htons(ETH_P_8021Q);
837         br->default_pvid = 1;
838         ret = br_vlan_add(br, 1,
839                           BRIDGE_VLAN_INFO_PVID | BRIDGE_VLAN_INFO_UNTAGGED |
840                           BRIDGE_VLAN_INFO_BRENTRY);
841         if (ret)
842                 goto err_vlan_add;
843
844 out:
845         return ret;
846
847 err_vlan_add:
848         rhashtable_destroy(&br->vlgrp->vlan_hash);
849 err_rhtbl:
850         kfree(br->vlgrp);
851
852         goto out;
853 }
854
855 int nbp_vlan_init(struct net_bridge_port *p)
856 {
857         struct net_bridge_vlan_group *vg;
858         int ret = -ENOMEM;
859
860         vg = kzalloc(sizeof(struct net_bridge_vlan_group), GFP_KERNEL);
861         if (!vg)
862                 goto out;
863
864         ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params);
865         if (ret)
866                 goto err_rhtbl;
867         INIT_LIST_HEAD(&vg->vlan_list);
868         /* Make sure everything's committed before publishing vg */
869         smp_wmb();
870         p->vlgrp = vg;
871         if (p->br->default_pvid) {
872                 ret = nbp_vlan_add(p, p->br->default_pvid,
873                                    BRIDGE_VLAN_INFO_PVID |
874                                    BRIDGE_VLAN_INFO_UNTAGGED);
875                 if (ret)
876                         goto err_vlan_add;
877         }
878 out:
879         return ret;
880
881 err_vlan_add:
882         rhashtable_destroy(&vg->vlan_hash);
883 err_rhtbl:
884         kfree(vg);
885
886         goto out;
887 }
888
889 /* Must be protected by RTNL.
890  * Must be called with vid in range from 1 to 4094 inclusive.
891  */
892 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags)
893 {
894         struct net_bridge_vlan *vlan;
895         int ret;
896
897         ASSERT_RTNL();
898
899         vlan = br_vlan_find(port->vlgrp, vid);
900         if (vlan) {
901                 __vlan_add_flags(vlan, flags);
902                 return 0;
903         }
904
905         vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
906         if (!vlan)
907                 return -ENOMEM;
908
909         vlan->vid = vid;
910         vlan->port = port;
911         ret = __vlan_add(vlan, flags);
912         if (ret)
913                 kfree(vlan);
914
915         return ret;
916 }
917
918 /* Must be protected by RTNL.
919  * Must be called with vid in range from 1 to 4094 inclusive.
920  */
921 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
922 {
923         struct net_bridge_vlan *v;
924
925         ASSERT_RTNL();
926
927         v = br_vlan_find(port->vlgrp, vid);
928         if (!v)
929                 return -ENOENT;
930         br_fdb_find_delete_local(port->br, port, port->dev->dev_addr, vid);
931         br_fdb_delete_by_port(port->br, port, vid, 0);
932
933         return __vlan_del(v);
934 }
935
936 void nbp_vlan_flush(struct net_bridge_port *port)
937 {
938         struct net_bridge_vlan *vlan;
939
940         ASSERT_RTNL();
941
942         list_for_each_entry(vlan, &port->vlgrp->vlan_list, vlist)
943                 vlan_vid_del(port->dev, port->br->vlan_proto, vlan->vid);
944
945         __vlan_flush(nbp_vlan_group(port));
946 }