]>
Commit | Line | Data |
---|---|---|
a2acf6ef GKH |
1 | From b4cfe3971f6eab542dd7ecc398bfa1aeec889934 Mon Sep 17 00:00:00 2001 |
2 | From: Jack Morgenstein <jackm@dev.mellanox.co.il> | |
3 | Date: Sun, 15 Jan 2017 20:15:00 +0200 | |
4 | Subject: RDMA/cma: Fix unknown symbol when CONFIG_IPV6 is not enabled | |
5 | ||
6 | From: Jack Morgenstein <jackm@dev.mellanox.co.il> | |
7 | ||
8 | commit b4cfe3971f6eab542dd7ecc398bfa1aeec889934 upstream. | |
9 | ||
10 | If IPV6 has not been enabled in the underlying kernel, we must avoid | |
11 | calling IPV6 procedures in rdma_cm.ko. | |
12 | ||
13 | This requires using "IS_ENABLED(CONFIG_IPV6)" in "if" statements | |
14 | surrounding any code which calls external IPV6 procedures. | |
15 | ||
16 | In the instance fixed here, procedure cma_bind_addr() called | |
17 | ipv6_addr_type() -- which resulted in calling external procedure | |
18 | __ipv6_addr_type(). | |
19 | ||
20 | Fixes: 6c26a77124ff ("RDMA/cma: fix IPv6 address resolution") | |
21 | Cc: Spencer Baugh <sbaugh@catern.com> | |
22 | Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> | |
23 | Reviewed-by: Moni Shoua <monis@mellanox.com> | |
24 | Signed-off-by: Leon Romanovsky <leon@kernel.org> | |
25 | Signed-off-by: Doug Ledford <dledford@redhat.com> | |
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
27 | ||
28 | --- | |
29 | drivers/infiniband/core/cma.c | 3 ++- | |
30 | 1 file changed, 2 insertions(+), 1 deletion(-) | |
31 | ||
32 | --- a/drivers/infiniband/core/cma.c | |
33 | +++ b/drivers/infiniband/core/cma.c | |
34 | @@ -2578,7 +2578,8 @@ static int cma_bind_addr(struct rdma_cm_ | |
35 | if (!src_addr || !src_addr->sa_family) { | |
36 | src_addr = (struct sockaddr *) &id->route.addr.src_addr; | |
37 | src_addr->sa_family = dst_addr->sa_family; | |
38 | - if (dst_addr->sa_family == AF_INET6) { | |
39 | + if (IS_ENABLED(CONFIG_IPV6) && | |
40 | + dst_addr->sa_family == AF_INET6) { | |
41 | struct sockaddr_in6 *src_addr6 = (struct sockaddr_in6 *) src_addr; | |
42 | struct sockaddr_in6 *dst_addr6 = (struct sockaddr_in6 *) dst_addr; | |
43 | src_addr6->sin6_scope_id = dst_addr6->sin6_scope_id; |