mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] soundwire: bus: stop dereferencing invalid slave pointer
@ 2021-10-12 10:15 Srinivas Kandagatla
  2021-10-12 13:32 ` Pierre-Louis Bossart
  2021-10-20 15:24 ` Vinod Koul
  0 siblings, 2 replies; 3+ messages in thread
From: Srinivas Kandagatla @ 2021-10-12 10:15 UTC (permalink / raw)
  To: vkoul
  Cc: yung-chuan.liao, pierre-louis.bossart, sanyog.r.kale,
	guennadi.liakhovetski, rander.wang, alsa-devel, linux-kernel,
	Srinivas Kandagatla

Slave pointer is invalid after end of list iteration, using this
would result in below Memory abort.

Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
...
Call trace:
 __dev_printk+0x34/0x7c
 _dev_warn+0x6c/0x90
 sdw_bus_exit_clk_stop+0x194/0x1d0
 swrm_runtime_resume+0x13c/0x238
 pm_generic_runtime_resume+0x2c/0x48
 __rpm_callback+0x44/0x150
 rpm_callback+0x6c/0x78
 rpm_resume+0x314/0x558
 rpm_resume+0x378/0x558
 rpm_resume+0x378/0x558
 __pm_runtime_resume+0x3c/0x88

Use bus->dev instead to print this error message.

Fixes: b50bb8ba369cd ("soundwire: bus: handle -ENODATA errors in clock stop/start sequences")
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/soundwire/bus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c
index 1b115734a8f6..67369e941d0d 100644
--- a/drivers/soundwire/bus.c
+++ b/drivers/soundwire/bus.c
@@ -1110,7 +1110,7 @@ int sdw_bus_exit_clk_stop(struct sdw_bus *bus)
 	if (!simple_clk_stop) {
 		ret = sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM);
 		if (ret < 0)
-			dev_warn(&slave->dev, "clock stop deprepare wait failed:%d\n", ret);
+			dev_warn(bus->dev, "clock stop deprepare wait failed:%d\n", ret);
 	}
 
 	list_for_each_entry(slave, &bus->slaves, node) {
-- 
2.21.0


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

* Re: [PATCH] soundwire: bus: stop dereferencing invalid slave pointer
  2021-10-12 10:15 [PATCH] soundwire: bus: stop dereferencing invalid slave pointer Srinivas Kandagatla
@ 2021-10-12 13:32 ` Pierre-Louis Bossart
  2021-10-20 15:24 ` Vinod Koul
  1 sibling, 0 replies; 3+ messages in thread
From: Pierre-Louis Bossart @ 2021-10-12 13:32 UTC (permalink / raw)
  To: Srinivas Kandagatla, vkoul
  Cc: yung-chuan.liao, sanyog.r.kale, guennadi.liakhovetski,
	rander.wang, alsa-devel, linux-kernel



On 10/12/21 5:15 AM, Srinivas Kandagatla wrote:
> Slave pointer is invalid after end of list iteration, using this
> would result in below Memory abort.
> 
> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
> ...
> Call trace:
>  __dev_printk+0x34/0x7c
>  _dev_warn+0x6c/0x90
>  sdw_bus_exit_clk_stop+0x194/0x1d0
>  swrm_runtime_resume+0x13c/0x238
>  pm_generic_runtime_resume+0x2c/0x48
>  __rpm_callback+0x44/0x150
>  rpm_callback+0x6c/0x78
>  rpm_resume+0x314/0x558
>  rpm_resume+0x378/0x558
>  rpm_resume+0x378/0x558
>  __pm_runtime_resume+0x3c/0x88
> 
> Use bus->dev instead to print this error message.
> 
> Fixes: b50bb8ba369cd ("soundwire: bus: handle -ENODATA errors in clock stop/start sequences")
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

Nice catch, even if the 'slave' pointer was valid it makes no sense to
use this device for a bus-level operation. Using the bus->dev is the
right thing to do.

Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

> ---
>  drivers/soundwire/bus.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c
> index 1b115734a8f6..67369e941d0d 100644
> --- a/drivers/soundwire/bus.c
> +++ b/drivers/soundwire/bus.c
> @@ -1110,7 +1110,7 @@ int sdw_bus_exit_clk_stop(struct sdw_bus *bus)
>  	if (!simple_clk_stop) {
>  		ret = sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM);
>  		if (ret < 0)
> -			dev_warn(&slave->dev, "clock stop deprepare wait failed:%d\n", ret);
> +			dev_warn(bus->dev, "clock stop deprepare wait failed:%d\n", ret);
>  	}
>  
>  	list_for_each_entry(slave, &bus->slaves, node) {
> 

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

* Re: [PATCH] soundwire: bus: stop dereferencing invalid slave pointer
  2021-10-12 10:15 [PATCH] soundwire: bus: stop dereferencing invalid slave pointer Srinivas Kandagatla
  2021-10-12 13:32 ` Pierre-Louis Bossart
@ 2021-10-20 15:24 ` Vinod Koul
  1 sibling, 0 replies; 3+ messages in thread
From: Vinod Koul @ 2021-10-20 15:24 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: yung-chuan.liao, pierre-louis.bossart, sanyog.r.kale,
	guennadi.liakhovetski, rander.wang, alsa-devel, linux-kernel

On 12-10-21, 11:15, Srinivas Kandagatla wrote:
> Slave pointer is invalid after end of list iteration, using this
> would result in below Memory abort.

Applied, thanks

-- 
~Vinod

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

end of thread, other threads:[~2021-10-20 15:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-12 10:15 [PATCH] soundwire: bus: stop dereferencing invalid slave pointer Srinivas Kandagatla
2021-10-12 13:32 ` Pierre-Louis Bossart
2021-10-20 15:24 ` Vinod Koul

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®