aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/ulp/ipoib
diff options
context:
space:
mode:
authorDoug Ledford <dledford@redhat.com>2013-04-01 21:25:30 +0000
committerRoland Dreier <roland@purestorage.com>2013-04-16 22:57:09 -0700
commit83bdd3b96cad1b0c5b8e257ed1f4f38eb2cb844b (patch)
tree19acb9f581b13d8ca184de5c67341adbcb2c05d6 /drivers/infiniband/ulp/ipoib
parentLinux 3.9-rc7 (diff)
downloadlinux-dev-83bdd3b96cad1b0c5b8e257ed1f4f38eb2cb844b.tar.xz
linux-dev-83bdd3b96cad1b0c5b8e257ed1f4f38eb2cb844b.zip
IPoIB: Fix ipoib_hard_header() return value
If you have a patched up dhcp server (and dhclient), they will use AF_PACKET/SOCK_DGRAM pair to send dhcp packets over IPoIB. However, when testing an upstream kernel, this has been broken for a very long time (I tested 2.6.34, 2.6.38, 3.0, 3.1, 3.8, HEAD). It turns out that the hard_header routine in ipoib is not following the API and is returning 0 even when it pushed data onto the skb. This then causes af_packet.c to overwrite the header just pushed with data from user space. Fixing this gets DHCP working on IPoIB. Signed-off-by: Doug Ledford <dledford@redhat.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/ulp/ipoib')
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 8534afd04e7c..31dd2a7a880f 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -828,7 +828,7 @@ static int ipoib_hard_header(struct sk_buff *skb,
*/
memcpy(cb->hwaddr, daddr, INFINIBAND_ALEN);
- return 0;
+ return sizeof *header;
}
static void ipoib_set_mcast_list(struct net_device *dev)