From: Kamal Heib <kamalheib1@gmail.com>
Date: Fri, 27 Jul 2018 21:23:05 +0300
Subject: RDMA/core: Check for verbs callbacks before using them
Patch-mainline: v4.19-rc1
Git-commit: 0584c47bbc3b3149bfe544d4e090fb6d96addf6c
References: bsc#1103992 FATE#326009
Make sure the providers implement the verbs callbacks before calling
them, otherwise return -EOPNOTSUPP.
Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
---
drivers/infiniband/core/uverbs_cmd.c | 3 ++-
drivers/infiniband/core/verbs.c | 3 +++
2 files changed, 5 insertions(+), 1 deletion(-)
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -2553,7 +2553,8 @@ ssize_t ib_uverbs_post_srq_recv(struct i
goto out;
resp.bad_wr = 0;
- ret = srq->device->post_srq_recv(srq, wr, &bad_wr);
+ ret = srq->device->post_srq_recv ?
+ srq->device->post_srq_recv(srq, wr, &bad_wr) : -EOPNOTSUPP;
uobj_put_obj_read(srq);
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -479,6 +479,9 @@ static struct ib_ah *_rdma_create_ah(str
{
struct ib_ah *ah;
+ if (!pd->device->create_ah)
+ return ERR_PTR(-EOPNOTSUPP);
+
ah = pd->device->create_ah(pd, ah_attr, udata);
if (!IS_ERR(ah)) {