remoteproc: Fix potential race condition in rproc_add
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: fec47d8635
("remoteproc: introduce rproc_get_by_phandle API")
Cc: stable@vger.kernel.org
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
15ebc72dba
commit
d2e12e66a9
@ -1264,11 +1264,6 @@ int rproc_add(struct rproc *rproc)
|
||||
if (ret < 0)
|
||||
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, "Note: remoteproc is still under development and considered experimental.\n");
|
||||
@ -1276,8 +1271,16 @@ int rproc_add(struct rproc *rproc)
|
||||
|
||||
/* create debugfs entries */
|
||||
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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user