netfilter: nf_tables: use correct integer types
authorFlorian Westphal <fw@strlen.de>
Thu, 23 Jun 2022 13:05:13 +0000 (15:05 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 11 Jul 2022 14:40:46 +0000 (16:40 +0200)
Sparse tool complains about mixing of different endianess
types, so use the correct ones.

Add type casts where needed.

objdiff shows no changes except in nft_tunnel (type is changed).

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nft_cmp.c
net/netfilter/nft_ct.c
net/netfilter/nft_exthdr.c
net/netfilter/nft_tunnel.c

index 6528f76ca29ec38e9c96c1f8ece6d7b7ea4dbb46..bec22584395f1ef30755639e7b33a6a07be26370 100644 (file)
@@ -125,13 +125,13 @@ static void nft_payload_n2h(union nft_cmp_offload_data *data,
 {
        switch (len) {
        case 2:
-               data->val16 = ntohs(*((u16 *)val));
+               data->val16 = ntohs(*((__be16 *)val));
                break;
        case 4:
-               data->val32 = ntohl(*((u32 *)val));
+               data->val32 = ntohl(*((__be32 *)val));
                break;
        case 8:
-               data->val64 = be64_to_cpu(*((u64 *)val));
+               data->val64 = be64_to_cpu(*((__be64 *)val));
                break;
        default:
                WARN_ON_ONCE(1);
index d8e1614918a13cfb2683b86c6c90622b641d4c69..b04995c3e17f120a36c1c7e1ddead14f82f22bb6 100644 (file)
@@ -204,12 +204,12 @@ static void nft_ct_get_eval(const struct nft_expr *expr,
        case NFT_CT_SRC_IP:
                if (nf_ct_l3num(ct) != NFPROTO_IPV4)
                        goto err;
-               *dest = tuple->src.u3.ip;
+               *dest = (__force __u32)tuple->src.u3.ip;
                return;
        case NFT_CT_DST_IP:
                if (nf_ct_l3num(ct) != NFPROTO_IPV4)
                        goto err;
-               *dest = tuple->dst.u3.ip;
+               *dest = (__force __u32)tuple->dst.u3.ip;
                return;
        case NFT_CT_SRC_IP6:
                if (nf_ct_l3num(ct) != NFPROTO_IPV6)
index 22c3e05b52dbb6afe18b24e0c56c3a4706a6383e..a67ea9c3ae57ddaca318c1ab31c2aa5b30278492 100644 (file)
@@ -266,7 +266,7 @@ static void nft_exthdr_tcp_set_eval(const struct nft_expr *expr,
 
                switch (priv->len) {
                case 2:
-                       old.v16 = get_unaligned((u16 *)(opt + offset));
+                       old.v16 = (__force __be16)get_unaligned((u16 *)(opt + offset));
                        new.v16 = (__force __be16)nft_reg_load16(
                                &regs->data[priv->sreg]);
 
@@ -281,18 +281,18 @@ static void nft_exthdr_tcp_set_eval(const struct nft_expr *expr,
                        if (old.v16 == new.v16)
                                return;
 
-                       put_unaligned(new.v16, (u16*)(opt + offset));
+                       put_unaligned(new.v16, (__be16*)(opt + offset));
                        inet_proto_csum_replace2(&tcph->check, pkt->skb,
                                                 old.v16, new.v16, false);
                        break;
                case 4:
-                       new.v32 = regs->data[priv->sreg];
-                       old.v32 = get_unaligned((u32 *)(opt + offset));
+                       new.v32 = nft_reg_load_be32(&regs->data[priv->sreg]);
+                       old.v32 = (__force __be32)get_unaligned((u32 *)(opt + offset));
 
                        if (old.v32 == new.v32)
                                return;
 
-                       put_unaligned(new.v32, (u32*)(opt + offset));
+                       put_unaligned(new.v32, (__be32*)(opt + offset));
                        inet_proto_csum_replace4(&tcph->check, pkt->skb,
                                                 old.v32, new.v32, false);
                        break;
index d0f9b1d51b0e9db3b3257e633b44abce02266dd5..5edaaded706d9cf018ad39ef64184507c99a6778 100644 (file)
@@ -383,8 +383,9 @@ static int nft_tunnel_obj_opts_init(const struct nft_ctx *ctx,
                                    struct ip_tunnel_info *info,
                                    struct nft_tunnel_opts *opts)
 {
-       int err, rem, type = 0;
        struct nlattr *nla;
+       __be16 type = 0;
+       int err, rem;
 
        err = nla_validate_nested_deprecated(attr, NFTA_TUNNEL_KEY_OPTS_MAX,
                                             nft_tunnel_opts_policy, NULL);