The pdsfc_get_operations() function returns error pointers, it doesn't return NULL. However, the "ep_info->operations" pointer should be set to either a valid pointer or NULL because the rest of the driver checks for that. Fixes: 804294d75ac5 ("pds_fwctl: add rpc and query support") Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> --- --- drivers/fwctl/pds/main.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/fwctl/pds/main.c b/drivers/fwctl/pds/main.c index c0266fc76797..a097fdde0b55 100644 --- a/drivers/fwctl/pds/main.c +++ b/drivers/fwctl/pds/main.c @@ -255,6 +255,7 @@ static int pdsfc_validate_rpc(struct pdsfc_dev *pdsfc, { struct pds_fwctl_query_data_operation *op_entry; struct pdsfc_rpc_endpoint_info *ep_info = NULL; + struct pds_fwctl_query_data *operations; struct device *dev = &pdsfc->fwctl.dev; int i; @@ -287,13 +288,14 @@ static int pdsfc_validate_rpc(struct pdsfc_dev *pdsfc, /* query and cache this endpoint's operations */ mutex_lock(&ep_info->lock); if (!ep_info->operations) { - ep_info->operations = pdsfc_get_operations(pdsfc, - &ep_info->operations_pa, - rpc->in.ep); - if (!ep_info->operations) { + operations = pdsfc_get_operations(pdsfc, + &ep_info->operations_pa, + rpc->in.ep); + if (IS_ERR(operations)) { mutex_unlock(&ep_info->lock); - return -ENOMEM; + return PTR_ERR(operations); } + ep_info->operations = operations; } mutex_unlock(&ep_info->lock); -- 2.47.2