diff mbox series

soc: qcom: rpmh-rsc: Set suppress_bind_attrs flag

Message ID 1592808805-2437-1-git-send-email-mkshah@codeaurora.org (mailing list archive)
State Accepted
Commit 1a53ce9ab4faeb841b33d62d23283dc76c0e7c5a
Headers show
Series soc: qcom: rpmh-rsc: Set suppress_bind_attrs flag | expand

Commit Message

Maulik Shah June 22, 2020, 6:53 a.m. UTC
rpmh-rsc driver is fairly core to system and should not be removable
once its probed. However it allows to unbind driver from sysfs using
below command which results into a crash on sc7180.

echo 18200000.rsc > /sys/bus/platform/drivers/rpmh/unbind

Lets prevent unbind at runtime by setting suppress_bind_attrs flag.

Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
---
 drivers/soc/qcom/rpmh-rsc.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Stephen Boyd June 22, 2020, 9:03 a.m. UTC | #1
Quoting Maulik Shah (2020-06-21 23:53:25)
> rpmh-rsc driver is fairly core to system and should not be removable
> once its probed. However it allows to unbind driver from sysfs using
> below command which results into a crash on sc7180.

What is the crash? The world falls apart because rpmh APIs start
referencing pointers that point to freed memory?

> 
> echo 18200000.rsc > /sys/bus/platform/drivers/rpmh/unbind
> 
> Lets prevent unbind at runtime by setting suppress_bind_attrs flag.

Ok. But when the Android module brigade comes knocking they'll have to
revert this change and solve this problem too. Have fun!

> 
> Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Maulik Shah June 22, 2020, 11:39 a.m. UTC | #2
Hi,

Thanks for the review Stephen.

On 6/22/2020 2:33 PM, Stephen Boyd wrote:
> Quoting Maulik Shah (2020-06-21 23:53:25)
>> rpmh-rsc driver is fairly core to system and should not be removable
>> once its probed. However it allows to unbind driver from sysfs using
>> below command which results into a crash on sc7180.
> What is the crash? The world falls apart because rpmh APIs start
> referencing pointers that point to freed memory?
Yes.
>
>> echo 18200000.rsc > /sys/bus/platform/drivers/rpmh/unbind
>>
>> Lets prevent unbind at runtime by setting suppress_bind_attrs flag.
> Ok. But when the Android module brigade comes knocking they'll have to
> revert this change and solve this problem too. Have fun!

No should not need to revert this change.

Even if rpmh-rsc is planned to be loadable module for android, Once 
loaded it should be disallowed to be removed.

same is the case for PDC irqchip as well. these drivers are core to the 
system and shouldn't be allowed to rmmod/unbind.

Thanks,
Maulik

>
>> Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
>> ---
> Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Bjorn Andersson June 22, 2020, 7:29 p.m. UTC | #3
On Mon 22 Jun 02:03 PDT 2020, Stephen Boyd wrote:

> Quoting Maulik Shah (2020-06-21 23:53:25)
> > rpmh-rsc driver is fairly core to system and should not be removable
> > once its probed. However it allows to unbind driver from sysfs using
> > below command which results into a crash on sc7180.
> 
> What is the crash? The world falls apart because rpmh APIs start
> referencing pointers that point to freed memory?
> 

Presumably the devm_of_platform_populate() will cause said drivers to be
dismantled as well - but I think it's safe to say that that code path
isn't well tested...

I've applied the patch, but would have preferred that some time was
spent to make sure that things are unloadable as well.

Regards,
Bjorn

> > 
> > echo 18200000.rsc > /sys/bus/platform/drivers/rpmh/unbind
> > 
> > Lets prevent unbind at runtime by setting suppress_bind_attrs flag.
> 
> Ok. But when the Android module brigade comes knocking they'll have to
> revert this change and solve this problem too. Have fun!
> 
> > 
> > Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
> > ---
> 
> Reviewed-by: Stephen Boyd <swboyd@chromium.org>
diff mbox series

Patch

diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c
index 076fd27..752a561 100644
--- a/drivers/soc/qcom/rpmh-rsc.c
+++ b/drivers/soc/qcom/rpmh-rsc.c
@@ -1023,6 +1023,7 @@  static struct platform_driver rpmh_driver = {
 	.driver = {
 		  .name = "rpmh",
 		  .of_match_table = rpmh_drv_match,
+		  .suppress_bind_attrs = true,
 	},
 };