netfilter: nf_tables: add and use BE register load-store helpers
authorFlorian Westphal <fw@strlen.de>
Thu, 23 Jun 2022 13:05:12 +0000 (15:05 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 11 Jul 2022 14:40:46 +0000 (16:40 +0200)
Same as the existing ones, no conversions. This is just for sparse sake
only so that we no longer mix be16/u16 and be32/u32 types.

Alternative is to add __force __beX in various places, but this
seems nicer.

objdiff shows no changes.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_tables.h
net/bridge/netfilter/nft_meta_bridge.c
net/netfilter/nft_tproxy.c

index 5c4e5a96a984fdb2c9b89760202311dde4da62d1..dd6ad0b67d7dad82ca634942a78b50d8b8099e31 100644 (file)
@@ -157,11 +157,26 @@ static inline void nft_reg_store16(u32 *dreg, u16 val)
        *(u16 *)dreg = val;
 }
 
+static inline void nft_reg_store_be16(u32 *dreg, __be16 val)
+{
+       nft_reg_store16(dreg, (__force __u16)val);
+}
+
 static inline u16 nft_reg_load16(const u32 *sreg)
 {
        return *(u16 *)sreg;
 }
 
+static inline __be16 nft_reg_load_be16(const u32 *sreg)
+{
+       return (__force __be16)nft_reg_load16(sreg);
+}
+
+static inline __be32 nft_reg_load_be32(const u32 *sreg)
+{
+       return *(__force __be32 *)sreg;
+}
+
 static inline void nft_reg_store64(u32 *dreg, u64 val)
 {
        put_unaligned(val, (u64 *)dreg);
index 8c3eaba87ad2bb448f2ee396e90507693627714a..c3ecd77e25cb8c1c6491343cd0457f8f2f25ab1d 100644 (file)
@@ -53,7 +53,7 @@ static void nft_meta_bridge_get_eval(const struct nft_expr *expr,
                        goto err;
 
                br_vlan_get_proto(br_dev, &p_proto);
-               nft_reg_store16(dest, htons(p_proto));
+               nft_reg_store_be16(dest, htons(p_proto));
                return;
        }
        default:
index 801f013971dfaf4633395fb7c70f512f34928646..68b2eed742df907863fe237860798a0814a2df17 100644 (file)
@@ -52,11 +52,11 @@ static void nft_tproxy_eval_v4(const struct nft_expr *expr,
                                   skb->dev, NF_TPROXY_LOOKUP_ESTABLISHED);
 
        if (priv->sreg_addr)
-               taddr = regs->data[priv->sreg_addr];
+               taddr = nft_reg_load_be32(&regs->data[priv->sreg_addr]);
        taddr = nf_tproxy_laddr4(skb, taddr, iph->daddr);
 
        if (priv->sreg_port)
-               tport = nft_reg_load16(&regs->data[priv->sreg_port]);
+               tport = nft_reg_load_be16(&regs->data[priv->sreg_port]);
        if (!tport)
                tport = hp->dest;
 
@@ -124,7 +124,7 @@ static void nft_tproxy_eval_v6(const struct nft_expr *expr,
        taddr = *nf_tproxy_laddr6(skb, &taddr, &iph->daddr);
 
        if (priv->sreg_port)
-               tport = nft_reg_load16(&regs->data[priv->sreg_port]);
+               tport = nft_reg_load_be16(&regs->data[priv->sreg_port]);
        if (!tport)
                tport = hp->dest;