All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] remoteproc: Fix potential race condition in rproc_add
@ 2016-05-25 20:41 ` Dave Gerlach
  0 siblings, 0 replies; 3+ messages in thread
From: Dave Gerlach @ 2016-05-25 20:41 UTC (permalink / raw)
  To: linux-kernel, linux-remoteproc
  Cc: Bjorn Andersson, Ohad Ben-Cohen, Suman Anna, Dave Gerlach

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: fec47d863587 ("remoteproc: introduce rproc_get_by_phandle API")
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 drivers/remoteproc/remoteproc_core.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index db3958b3f094..fe0539ed9cb5 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -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);
 
-- 
2.8.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH] remoteproc: Fix potential race condition in rproc_add
@ 2016-05-25 20:41 ` Dave Gerlach
  0 siblings, 0 replies; 3+ messages in thread
From: Dave Gerlach @ 2016-05-25 20:41 UTC (permalink / raw)
  To: linux-kernel, linux-remoteproc
  Cc: Bjorn Andersson, Ohad Ben-Cohen, Suman Anna, Dave Gerlach

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: fec47d863587 ("remoteproc: introduce rproc_get_by_phandle API")
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
---
 drivers/remoteproc/remoteproc_core.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index db3958b3f094..fe0539ed9cb5 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -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);
 
-- 
2.8.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] remoteproc: Fix potential race condition in rproc_add
  2016-05-25 20:41 ` Dave Gerlach
  (?)
@ 2016-06-14 18:34 ` Bjorn Andersson
  -1 siblings, 0 replies; 3+ messages in thread
From: Bjorn Andersson @ 2016-06-14 18:34 UTC (permalink / raw)
  To: Dave Gerlach; +Cc: linux-kernel, linux-remoteproc, Ohad Ben-Cohen, Suman Anna

On Wed 25 May 13:41 PDT 2016, Dave Gerlach wrote:

> 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: fec47d863587 ("remoteproc: introduce rproc_get_by_phandle API")
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>

Applied and added Cc: stable.

Regards,
Bjorn

> ---
>  drivers/remoteproc/remoteproc_core.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
> index db3958b3f094..fe0539ed9cb5 100644
> --- a/drivers/remoteproc/remoteproc_core.c
> +++ b/drivers/remoteproc/remoteproc_core.c
> @@ -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);
>  

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-06-14 18:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-25 20:41 [PATCH] remoteproc: Fix potential race condition in rproc_add Dave Gerlach
2016-05-25 20:41 ` Dave Gerlach
2016-06-14 18:34 ` Bjorn Andersson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.