cxgb4: mk_act_open_req() buggers ->{local, peer}_ip on big-endian hosts
authorAl Viro <viro@ZenIV.linux.org.uk>
Sun, 5 Aug 2018 17:22:38 +0000 (18:22 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 7 Aug 2018 19:33:58 +0000 (12:33 -0700)
Unlike fs.val.lport and fs.val.fport, cxgb4_process_flow_match()
sets fs.val.{l,f}ip to net-endian values without conversion - they come
straight from flow_dissector_key_ipv4_addrs ->dst and ->src resp.  So
the assignment in mk_act_open_req() ought to be a straight copy.

As far as I know, T4 PCIe cards do exist, so it's not as if that
thing could only be found on little-endian systems...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c

index 00fc5f1afb1d0024b6477d6c63408afcd9858ad9..7dddb9e748b8146fbcbb441153ab16669305599e 100644 (file)
@@ -1038,10 +1038,8 @@ static void mk_act_open_req(struct filter_entry *f, struct sk_buff *skb,
        OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_ACT_OPEN_REQ, qid_filterid));
        req->local_port = cpu_to_be16(f->fs.val.lport);
        req->peer_port = cpu_to_be16(f->fs.val.fport);
-       req->local_ip = f->fs.val.lip[0] | f->fs.val.lip[1] << 8 |
-               f->fs.val.lip[2] << 16 | f->fs.val.lip[3] << 24;
-       req->peer_ip = f->fs.val.fip[0] | f->fs.val.fip[1] << 8 |
-               f->fs.val.fip[2] << 16 | f->fs.val.fip[3] << 24;
+       memcpy(&req->local_ip, f->fs.val.lip, 4);
+       memcpy(&req->peer_ip, f->fs.val.fip, 4);
        req->opt0 = cpu_to_be64(NAGLE_V(f->fs.newvlan == VLAN_REMOVE ||
                                        f->fs.newvlan == VLAN_REWRITE) |
                                DELACK_V(f->fs.hitcnts) |