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

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.de


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6c53da0b
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -2265,6 +2265,16 @@ fail_free_handler_thread:
	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;
+0 −4
Original line number Diff line number Diff line
@@ -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;
}