Commit a8f7116b authored by Nicolas Saenz Julienne's avatar Nicolas Saenz Julienne Committed by Greg Kroah-Hartman

staging: vchiq: Introduce vchiq_validate_params()

When adding a new service validate the configuration parameters
provided, and remove unnecessary checks in vchi, now that we have
validated service's config.
Signed-off-by: default avatarNicolas Saenz Julienne <nsaenzjulienne@suse.de>
Link: https://lore.kernel.org/r/20200629150945.10720-23-nsaenzjulienne@suse.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6c53da0b
......@@ -2265,6 +2265,16 @@ vchiq_init_state(struct vchiq_state *state, struct vchiq_slot_zero *slot_zero)
return VCHIQ_ERROR;
}
static int vchiq_validate_params(const struct vchiq_service_params *params)
{
if (!params->callback || !params->fourcc) {
vchiq_loud_error("Can't add service, invalid params\n");
return -EINVAL;
}
return 0;
}
/* Called from application thread when a client or server service is created. */
struct vchiq_service *
vchiq_add_service_internal(struct vchiq_state *state,
......@@ -2275,8 +2285,13 @@ vchiq_add_service_internal(struct vchiq_state *state,
struct vchiq_service *service;
struct vchiq_service __rcu **pservice = NULL;
struct vchiq_service_quota *service_quota;
int ret;
int i;
ret = vchiq_validate_params(params);
if (ret)
return NULL;
service = kmalloc(sizeof(*service), GFP_KERNEL);
if (!service)
return service;
......
......@@ -271,15 +271,11 @@ static enum vchiq_status shim_callback(enum vchiq_reason reason,
struct vchi_service *service =
(struct vchi_service *)VCHIQ_GET_SERVICE_USERDATA(handle);
if (!service->callback)
goto release;
if (reason == VCHIQ_MESSAGE_AVAILABLE)
vchiu_queue_push(&service->queue, header);
service->callback(service->callback_param, reason, bulk_user);
release:
return VCHIQ_SUCCESS;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment