Commit e9df6a89 authored by Suman Anna's avatar Suman Anna Committed by Hari Kanigeri

SYSLINK: ipc - fix issues with nameserver_get functions

This patch fixes multiple issues with the nameserver_get and related
functions. The patch includes the following main changes.
	- nameserver_remote_get function is called only for valid
		remote notify handles in nameserver_get. Additional
		error checks have also been added.
	- Additional WARN_ONs and error checks have been added for
		input arguments in nameserver_remote_get function.
	- nameserver_remotenotify_message structure misalignment has
		been fixed. This issue is causing the remote processor
		to return wrong values when queried.
	- Additional error check has been added to ensure that there
		is a valid buffer to copy after receiving a response
		from the remote processor in nameserver_remotenotify_get
		function.
Signed-off-by: default avatarSuman Anna <s-anna@ti.com>
parent f34a2c8c
......@@ -856,9 +856,12 @@ int nameserver_get(void *handle, const char *name,
if (i == local_proc_id)
continue;
if (nameserver_state.remote_handle_list[i] == NULL)
continue;
retval = nameserver_remote_get(
nameserver_state.remote_handle_list[i],
temp_obj->name, name, buffer, length);
nameserver_state.remote_handle_list[i],
temp_obj->name, name, buffer, length);
if (retval > 0 || ((retval < 0) &&
(retval != -ENOENT))) /* Got the value */
break;
......@@ -888,7 +891,8 @@ int nameserver_get(void *handle, const char *name,
}
exit:
printk(KERN_ERR "nameserver_get status:%x \n", retval);
if (retval < 0)
printk(KERN_ERR "nameserver_get failed: status=%x \n", retval);
return retval;
}
EXPORT_SYMBOL(nameserver_get);
......
......@@ -30,7 +30,13 @@ int nameserver_remote_get(const struct nameserver_remote_object *handle,
{
s32 retval = 0;
if (WARN_ON(instance_name == NULL)) {
if (handle == NULL) {
retval = -EINVAL;
goto exit;
}
if (WARN_ON((instance_name == NULL) || (name == NULL)
|| (value == NULL))) {
retval = -EINVAL;
goto exit;
}
......
......@@ -65,7 +65,6 @@ struct nameserver_remotenotify_message {
u32 request;
u32 response;
u32 request_status;
u32 response_status;
u32 value;
u32 value_len;
char instance_name[32];
......@@ -369,13 +368,16 @@ int nameserver_remotenotify_get(void *rhandle,
goto exit;
}
if (!value_len) {
retval = -ENOENT;
goto exit;
}
if (value_len == sizeof(u32))
memcpy((void *)value,
(void *) &(obj->msg[offset]->value),
memcpy((void *)value, (void *) &(obj->msg[offset]->value),
sizeof(u32));
else
memcpy((void *)value,
(void *)&(obj->msg[offset]->value_buf),
memcpy((void *)value, (void *)&(obj->msg[offset]->value_buf),
value_len);
obj->msg[offset]->request_status = false;
......
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