| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: Parav Pandit <parav@mellanox.com> |
| Date: Wed, 7 Mar 2018 08:07:41 +0200 |
| Subject: IB/core: Fix possible crash to access NULL netdev |
| |
| From: Parav Pandit <parav@mellanox.com> |
| |
| [ Upstream commit bb7f8f199c354c4cf155b1d6d55f86eaaed7fa5a ] |
| |
| resolved_dev returned might be NULL as ifindex is transient number. |
| Ignoring NULL check of resolved_dev might crash the kernel. |
| Therefore perform NULL check before accessing resolved_dev. |
| |
| Additionally rdma_resolve_ip_route() invokes addr_resolve() which |
| performs check and address translation for loopback ifindex. |
| Therefore, checking it again in rdma_resolve_ip_route() is not helpful. |
| Therefore, the code is simplified to avoid IFF_LOOPBACK check. |
| |
| Fixes: 200298326b27 ("IB/core: Validate route when we init ah") |
| Reviewed-by: Daniel Jurgens <danielj@mellanox.com> |
| Signed-off-by: Parav Pandit <parav@mellanox.com> |
| Signed-off-by: Leon Romanovsky <leon@kernel.org> |
| Signed-off-by: Doug Ledford <dledford@redhat.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/infiniband/core/sa_query.c | 7 +++---- |
| 1 file changed, 3 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/infiniband/core/sa_query.c |
| +++ b/drivers/infiniband/core/sa_query.c |
| @@ -1137,10 +1137,9 @@ int ib_init_ah_from_path(struct ib_devic |
| |
| resolved_dev = dev_get_by_index(dev_addr.net, |
| dev_addr.bound_dev_if); |
| - if (resolved_dev->flags & IFF_LOOPBACK) { |
| - dev_put(resolved_dev); |
| - resolved_dev = idev; |
| - dev_hold(resolved_dev); |
| + if (!resolved_dev) { |
| + dev_put(idev); |
| + return -ENODEV; |
| } |
| ndev = ib_get_ndev_from_path(rec); |
| rcu_read_lock(); |