examples/l3fwd: fix unaligned memory access on x86
authorHariprasad Govindharajan <hariprasad.govindharajan@intel.com>
Tue, 30 Jul 2019 13:26:38 +0000 (14:26 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 30 Jul 2019 20:05:00 +0000 (22:05 +0200)
Fix unaligned memory access when reading IPv6 header which
leads to segmentation fault by changing aligned memory read
to unaligned memory read.

Bugzilla ID: 279
Fixes: 64d3955de1de ("examples/l3fwd: fix ARM build")
Cc: stable@dpdk.org
Signed-off-by: Hariprasad Govindharajan <hariprasad.govindharajan@intel.com>
Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Jerin Jacob <jerinj@marvell.com>
Reviewed-by: David Christensen <drc@linux.vnet.ibm.com>
Reviewed-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
Tested-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
examples/l3fwd/l3fwd_em.c

index 5f499e0..74a7c8f 100644 (file)
@@ -287,7 +287,11 @@ em_get_ipv6_dst_port(void *ipv6_hdr, uint16_t portid, void *lookup_struct)
         * Get part of 5 tuple: dst IP address lower 96 bits
         * and src IP address higher 32 bits.
         */
+#if defined RTE_ARCH_X86
+       key.xmm[1] = _mm_loadu_si128(data1);
+#else
        key.xmm[1] = *(xmm_t *)data1;
+#endif
 
        /*
         * Get part of 5 tuple: dst port and src port