RDMA/uverbs: check for allocation failure in uapi_add_elm()
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 30 May 2019 08:20:24 +0000 (11:20 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 30 May 2019 18:45:58 +0000 (15:45 -0300)
If the kzalloc() fails then we should return ERR_PTR(-ENOMEM).  In the
current code it's possible that the kzalloc() fails and the
radix_tree_insert() inserts the NULL pointer successfully and we return
the NULL "elm" pointer to the caller.  That results in a NULL pointer
dereference.

Fixes: 9ed3e5f44772 ("IB/uverbs: Build the specs into a radix tree at runtime")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/uverbs_uapi.c

index 7a987acf0c0bbdf0b48460371ca164b6cb34a194..ccc4be0a65665100169a6b26cde68efa63856fff 100644 (file)
@@ -22,6 +22,8 @@ static void *uapi_add_elm(struct uverbs_api *uapi, u32 key, size_t alloc_size)
                return ERR_PTR(-EOVERFLOW);
 
        elm = kzalloc(alloc_size, GFP_KERNEL);
+       if (!elm)
+               return ERR_PTR(-ENOMEM);
        rc = radix_tree_insert(&uapi->radix, key, elm);
        if (rc) {
                kfree(elm);