summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2017-04-28 11:20:01 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-05-25 14:30:07 +0200
commitc04397351fe577a4b4d046524118c38d87002e81 (patch)
treef5d11ca8ea9f0a8eacbcf0ff90886f2d1deba530
parent63450e38efe3ce80e563827d5b3f59b3f7a12ecf (diff)
downloadlinux-stable-c04397351fe577a4b4d046524118c38d87002e81.tar.gz
linux-stable-c04397351fe577a4b4d046524118c38d87002e81.tar.bz2
linux-stable-c04397351fe577a4b4d046524118c38d87002e81.zip
infiniband: call ipv6 route lookup via the stub interface
commit eea40b8f624f25cbc02d55f2d93203f60cee9341 upstream. The infiniband address handle can be triggered to resolve an ipv6 address in response to MAD packets, regardless of the ipv6 module being disabled via the kernel command line argument. That will cause a call into the ipv6 routing code, which is not initialized, and a conseguent oops. This commit addresses the above issue replacing the direct lookup call with an indirect one via the ipv6 stub, which is properly initialized according to the ipv6 status (e.g. if ipv6 is disabled, the routing lookup fails gracefully) Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Doug Ledford <dledford@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/infiniband/core/addr.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index 34b1adad07aa..6a8024d9d742 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
@@ -277,8 +277,8 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
fl6.saddr = src_in->sin6_addr;
fl6.flowi6_oif = addr->bound_dev_if;
- dst = ip6_route_output(addr->net, NULL, &fl6);
- if ((ret = dst->error))
+ ret = ipv6_stub->ipv6_dst_lookup(addr->net, NULL, &dst, &fl6);
+ if (ret < 0)
goto put;
if (ipv6_addr_any(&fl6.saddr)) {