diff mbox

[net-next,V2] net/vxlan: Avoid unaligned access in vxlan_build_skb()

Message ID 20160920185737.GU8920@oracle.com
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Sowmini Varadhan Sept. 20, 2016, 6:57 p.m. UTC
The vxlan header may not be aligned to 4 bytes in
vxlan_build_skb (e.g., for MLD packets). This patch
avoids unaligned access traps from vxlan_build_skb
(in platforms like sparc) by making struct vxlanhdr __packed.

Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
---
 include/net/vxlan.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Jiri Benc Sept. 21, 2016, 9:43 a.m. UTC | #1
On Tue, 20 Sep 2016 14:57:37 -0400, Sowmini Varadhan wrote:
> The vxlan header may not be aligned to 4 bytes in
> vxlan_build_skb (e.g., for MLD packets). This patch
> avoids unaligned access traps from vxlan_build_skb
> (in platforms like sparc) by making struct vxlanhdr __packed.
> 
> Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>

Acked-by: Jiri Benc <jbenc@redhat.com>
Hannes Frederic Sowa Sept. 21, 2016, 10:10 a.m. UTC | #2
On 20.09.2016 20:57, Sowmini Varadhan wrote:
> The vxlan header may not be aligned to 4 bytes in
> vxlan_build_skb (e.g., for MLD packets). This patch
> avoids unaligned access traps from vxlan_build_skb
> (in platforms like sparc) by making struct vxlanhdr __packed.
> 
> Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>

Performance wise this should only affect code generation for archs where
it matters anyway.

Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>

Thanks,
Hannes
Alexei Starovoitov Sept. 21, 2016, 4:14 p.m. UTC | #3
On Wed, Sep 21, 2016 at 12:10:55PM +0200, Hannes Frederic Sowa wrote:
> On 20.09.2016 20:57, Sowmini Varadhan wrote:
> > The vxlan header may not be aligned to 4 bytes in
> > vxlan_build_skb (e.g., for MLD packets). This patch
> > avoids unaligned access traps from vxlan_build_skb
> > (in platforms like sparc) by making struct vxlanhdr __packed.
> > 
> > Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
> 
> Performance wise this should only affect code generation for archs where
> it matters anyway.

I think it's the opposite. Even on x86 compiler will use byte loads.
Hannes Frederic Sowa Sept. 21, 2016, 4:49 p.m. UTC | #4
On 21.09.2016 18:14, Alexei Starovoitov wrote:
> On Wed, Sep 21, 2016 at 12:10:55PM +0200, Hannes Frederic Sowa wrote:
>> On 20.09.2016 20:57, Sowmini Varadhan wrote:
>>> The vxlan header may not be aligned to 4 bytes in
>>> vxlan_build_skb (e.g., for MLD packets). This patch
>>> avoids unaligned access traps from vxlan_build_skb
>>> (in platforms like sparc) by making struct vxlanhdr __packed.
>>>
>>> Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
>>
>> Performance wise this should only affect code generation for archs where
>> it matters anyway.
> 
> I think it's the opposite. Even on x86 compiler will use byte loads.

I checked that on x86-64 actually. Also clearly visible here:

https://godbolt.org/g/xsW2P1

Bye,
Hannes
Eric Dumazet Sept. 21, 2016, 4:53 p.m. UTC | #5
On Wed, 2016-09-21 at 09:14 -0700, Alexei Starovoitov wrote:

> 
> I think it's the opposite. Even on x86 compiler will use byte loads.

Unless you tweaked gcc, it should still use word loads on x86.
Alexei Starovoitov Sept. 21, 2016, 5:12 p.m. UTC | #6
On Wed, Sep 21, 2016 at 09:53:31AM -0700, Eric Dumazet wrote:
> On Wed, 2016-09-21 at 09:14 -0700, Alexei Starovoitov wrote:
> 
> > 
> > I think it's the opposite. Even on x86 compiler will use byte loads.
> 
> Unless you tweaked gcc, it should still use word loads on x86.

> checked that on x86-64 actually. Also clearly visible here:

ahh. ok. good to know. thanks guys!
diff mbox

Patch

diff --git a/include/net/vxlan.h b/include/net/vxlan.h
index 0255613..1ec56f4 100644
--- a/include/net/vxlan.h
+++ b/include/net/vxlan.h
@@ -18,7 +18,7 @@ 
 struct vxlanhdr {
 	__be32 vx_flags;
 	__be32 vx_vni;
-};
+} __packed;
 
 /* VXLAN header flags. */
 #define VXLAN_HF_VNI	cpu_to_be32(BIT(27))