kernel: backport flow offload pppoe fix
[openwrt/staging/blocktrron.git] / target / linux / generic / hack-5.15 / 650-netfilter-add-xt_FLOWOFFLOAD-target.patch
index da603344980cfab7172752988f476187609933a6..49f339bddcab99ec107561015c261a6abaa50b79 100644 (file)
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
 --- /dev/null
 +++ b/net/netfilter/xt_FLOWOFFLOAD.c
-@@ -0,0 +1,701 @@
+@@ -0,0 +1,702 @@
 +/*
 + * Copyright (C) 2018-2021 Felix Fietkau <nbd@nbd.name>
 + *
@@ -163,7 +163,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +              proto = veth->h_vlan_encapsulated_proto;
 +              break;
 +      case htons(ETH_P_PPP_SES):
-+              proto = nf_flow_pppoe_proto(skb);
++              if (!nf_flow_pppoe_proto(skb, &proto))
++                      return NF_ACCEPT;
 +              break;
 +      default:
 +              proto = skb->protocol;
@@ -609,6 +610,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +      if (!nf_ct_is_confirmed(ct))
 +              return XT_CONTINUE;
 +
++      dir = CTINFO2DIR(ctinfo);
++
 +      devs[dir] = xt_out(par);
 +      devs[!dir] = xt_in(par);
 +
@@ -618,8 +621,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +      if (test_and_set_bit(IPS_OFFLOAD_BIT, &ct->status))
 +              return XT_CONTINUE;
 +
-+      dir = CTINFO2DIR(ctinfo);
-+
 +      if (xt_flowoffload_route(skb, ct, par, &route, dir, devs) < 0)
 +              goto err_flow_route;
 +