wireless: only apply wireless device attributes to the base vif interface
authorFelix Fietkau <nbd@nbd.name>
Mon, 20 Sep 2021 15:55:39 +0000 (17:55 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 20 Sep 2021 15:56:03 +0000 (17:56 +0200)
Per-station interfaces in 4-addr AP mode must not inherit them, because
this can cause reflected packets by enabling hairpin mode.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
wireless.c

index 0e6447d5584d7ec707bf8d0e7d2c460b6daf8d6c..29feb6aad7a9da5ef2c6659a3ebdd83696702635 100644 (file)
@@ -328,14 +328,14 @@ static void wireless_interface_handle_link(struct wireless_interface *vif, const
        if (!ifname)
                ifname = vif->ifname;
 
-       if (up) {
+       if (up && ifname != vif->ifname) {
                struct device *dev = device_get(ifname, 2);
                if (dev) {
                        dev->wireless_isolate = vif->isolate;
                        dev->wireless_proxyarp = vif->proxyarp;
                        dev->wireless = true;
                        dev->wireless_ap = vif->ap_mode;
-                       dev->bpdu_filter = dev->wireless_ap && ifname == vif->ifname;
+                       dev->bpdu_filter = dev->wireless_ap;
                }
        }