Add commit 5e47596bee12597824a3b5b21e20f80b61e58a35 to kernel fixes. This will fix https://bugs.openfabrics.org/show_bug.cgi?id=1664.
Signed-off-by: Moni Shoua <[email protected]> --- kernel_patches/fixes/ipoib_0550_check_multicast_address_format.patch | 51 ++++++++++ 1 file changed, 51 insertions(+) diff --git a/kernel_patches/fixes/ipoib_0550_check_multicast_address_format.patch b/kernel_patches/fixes/ipoib_0550_check_multicast_address_format.patch new file mode 100644 index 0000000..a98e591 --- /dev/null +++ b/kernel_patches/fixes/ipoib_0550_check_multicast_address_format.patch @@ -0,0 +1,51 @@ +commit 5e47596bee12597824a3b5b21e20f80b61e58a35 +Author: Jason Gunthorpe <[email protected]> +Date: Sat Sep 5 20:23:40 2009 -0700 + + IPoIB: Check multicast address format + + Check that the format of multicast link addresses is correct before + taking them from dev->mc_list to priv->multicast_list. This way we + never try to send a bogus address to the SA, which prevents badness + from erronous 'ip maddr addr add', broken bonding drivers, etc. + + Signed-off-by: Jason Gunthorpe <[email protected]> + Signed-off-by: Roland Dreier <[email protected]> + +diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +index a0825fe..25874fc 100644 +--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c ++++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +@@ -760,6 +760,20 @@ void ipoib_mcast_dev_flush(struct net_device *dev) + } + } + ++static int ipoib_mcast_addr_is_valid(const u8 *addr, unsigned int addrlen, ++ const u8 *broadcast) ++{ ++ if (addrlen != INFINIBAND_ALEN) ++ return 0; ++ /* reserved QPN, prefix, scope */ ++ if (memcmp(addr, broadcast, 6)) ++ return 0; ++ /* signature lower, pkey */ ++ if (memcmp(addr + 7, broadcast + 7, 3)) ++ return 0; ++ return 1; ++} ++ + void ipoib_mcast_restart_task(struct work_struct *work) + { + struct ipoib_dev_priv *priv = +@@ -793,6 +807,11 @@ void ipoib_mcast_restart_task(struct work_struct *work) + for (mclist = dev->mc_list; mclist; mclist = mclist->next) { + union ib_gid mgid; + ++ if (!ipoib_mcast_addr_is_valid(mclist->dmi_addr, ++ mclist->dmi_addrlen, ++ dev->broadcast)) ++ continue; ++ + memcpy(mgid.raw, mclist->dmi_addr + 4, sizeof mgid); + + mcast = __ipoib_mcast_find(dev, &mgid); _______________________________________________ ewg mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
