flow-dissector: Fix alignment issue in __skb_flow_get_ports
authorAlexander Duyck <alexander.h.duyck@redhat.com>
Fri, 10 Oct 2014 19:09:12 +0000 (12:09 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Oct 2014 19:33:47 +0000 (15:33 -0400)
commit5af7fb6e3e92c2797ee30d66138cf6aa6b29240d
treed5e29d77ae2ec4e10af7220cd29d06f045ddbda2
parent8ea6e345a6123fa831e42cd8747f55892a58abff
flow-dissector: Fix alignment issue in __skb_flow_get_ports

This patch addresses a kernel unaligned access bug seen on a sparc64 system
with an igb adapter.  Specifically the __skb_flow_get_ports was returning a
be32 pointer which was then having the value directly returned.

In order to prevent this it is actually easier to simply not populate the
ports or address values when an skb is not present.  In this case the
assumption is that the data isn't needed and rather than slow down the
faster aligned accesses by making them have to assume the unaligned path on
architectures that don't support efficent unaligned access it makes more
sense to simply switch off the bits that were copying the source and
destination address/port for the case where we only care about the protocol
types and lengths which are normally 16 bit fields anyway.

Reported-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/flow_dissector.c