Commit 3633bd82 authored by Dave Gerlach's avatar Dave Gerlach Committed by Greg Kroah-Hartman

remoteproc: Fix potential race condition in rproc_add

commit d2e12e66 upstream.

rproc_add adds the newly created remoteproc to a list for use by
rproc_get_by_phandle and then does some additional processing to finish
adding the remoteproc. This leaves a small window of time in which the
rproc is available in the list but not yet fully initialized, so if
another driver comes along and gets a handle to the rproc, it will be
invalid. Rearrange the code in rproc_add to make sure the rproc is added
to the list only after it has been successfuly initialized.

Fixes: fec47d86 ("remoteproc: introduce rproc_get_by_phandle API")
Signed-off-by: default avatarDave Gerlach <d-gerlach@ti.com>
Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 54c4ddcb
...@@ -1239,11 +1239,6 @@ int rproc_add(struct rproc *rproc) ...@@ -1239,11 +1239,6 @@ int rproc_add(struct rproc *rproc)
if (ret < 0) if (ret < 0)
return ret; return ret;
/* expose to rproc_get_by_phandle users */
mutex_lock(&rproc_list_mutex);
list_add(&rproc->node, &rproc_list);
mutex_unlock(&rproc_list_mutex);
dev_info(dev, "%s is available\n", rproc->name); dev_info(dev, "%s is available\n", rproc->name);
dev_info(dev, "Note: remoteproc is still under development and considered experimental.\n"); dev_info(dev, "Note: remoteproc is still under development and considered experimental.\n");
...@@ -1251,8 +1246,16 @@ int rproc_add(struct rproc *rproc) ...@@ -1251,8 +1246,16 @@ int rproc_add(struct rproc *rproc)
/* create debugfs entries */ /* create debugfs entries */
rproc_create_debug_dir(rproc); rproc_create_debug_dir(rproc);
ret = rproc_add_virtio_devices(rproc);
if (ret < 0)
return ret;
return rproc_add_virtio_devices(rproc); /* expose to rproc_get_by_phandle users */
mutex_lock(&rproc_list_mutex);
list_add(&rproc->node, &rproc_list);
mutex_unlock(&rproc_list_mutex);
return 0;
} }
EXPORT_SYMBOL(rproc_add); EXPORT_SYMBOL(rproc_add);
......
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