lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Sun, 19 Mar 2023 16:45:03 +0100
From:   "H. Nikolaus Schaller" <>
To:     Jonathan Cameron <>
Cc:     Patrik Dahlström <>,
        Lars-Peter Clausen <>,,
        linux Kernel Mailing List <>,
        Discussions about the Letux Kernel 
        Pradeep Goudagunta <>
Subject: Re: [PATCH] iio: adc: palmas_gpadc: fix NULL dereference on rmmod

Hi there,

> Am 19.03.2023 um 16:32 schrieb Jonathan Cameron <>:
> On Sat, 18 Mar 2023 20:22:53 +0100
> Patrik Dahlström <> wrote:
>> On Sat, Mar 18, 2023 at 04:30:33PM +0000, Jonathan Cameron wrote:
>>> On Mon, 13 Mar 2023 21:50:29 +0100
>>> Patrik Dahlström <> wrote:
>>>> Calling dev_to_iio_dev() on a platform device pointer is undefined and
>>>> will make adc NULL.
>>>> Signed-off-by: Patrik Dahlström <>  
>>> Hi Patrik,
>>> Looks good so applied to the fixes-togreg branch of iio.git.
>>> Whilst we are here, this would be a trivial driver to take fully device
>>> managed.  The only slightly messy bit is that it would need
>>> a devm_add_action_or_reset() + custom callback to handle the
>>> device_wakeup_enable().
>>> On the off chance you can test it I'll send a patch in a few mins.
>>> Note that will depend on this one going up stream first and that
>>> I haven't done more than build test it.  
>> I got the patch and it looks good, but it will take a few days before I
>> have the time to test it.
>> I have some more patches coming for this driver to configure the adc
>> thresholds from userspace,

Yes, that is a useful feature.

>> employing the iio channel event subsystem, but
>> they need a bit more work. In particular, to ensure backwards compatibility
>> with the adc_wakeupX_data platform data. However, I don't see this platform
>> data being used by anyone.
>> How important is it to retain support for adc_wakeupX_data?
> It's a somewhat unusual feature, so I doubt it was implemented without someone
> needing it.  However as you observe there is no upstream user.
> As it is causing you problems, I'd just rip out the palmas_adc_platform_data
> completely and see if anyone objects.  You can do that as a standalone patch
> prior to posting your events stuff if you like.  Or hopefully
> H. Nikolaus Schaller might be able to give us some background on why
> that feature is there but not used.

I also have no idea.

The original author was Pradeep Goudagunta <> and I just copied it from

polished the code and made it compile & work some years ago.

So it may have been useful in a some Tegra Android kernel from 2013. Maybe it is
for special power management (at least that is how I interpret the "wakeup").

But I found some hint which device it is good for:

"PALMAS PMIC is used on Dalmore platform."

And there seems to be an upstream DTS: arch/arm/boot/dts/tegra114-dalmore.dts
but without gpadc support. That is quite common that upstream DTS are incomplete
so we can't deduce that there are no users of a feature.


>>> Thanks,
>>> Jonathan  
>> Thank you for going the extra mile :)
> No problem.  I jumped on the opportunity to get it tested - takes way longer
> than writing a little patch like that ;)
> Jonathan
>>>> ---
>>>> drivers/iio/adc/palmas_gpadc.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>> diff --git a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/palmas_gpadc.c
>>>> index 61e80bf3d05e..6db6f3bc768a 100644
>>>> --- a/drivers/iio/adc/palmas_gpadc.c
>>>> +++ b/drivers/iio/adc/palmas_gpadc.c
>>>> @@ -638,7 +638,7 @@ static int palmas_gpadc_probe(struct platform_device *pdev)
>>>> static int palmas_gpadc_remove(struct platform_device *pdev)
>>>> {
>>>> -	struct iio_dev *indio_dev = dev_to_iio_dev(&pdev->dev);
>>>> +	struct iio_dev *indio_dev = dev_get_drvdata(&pdev->dev);
>>>> 	struct palmas_gpadc *adc = iio_priv(indio_dev);
>>>> 	if (adc->wakeup1_enable || adc->wakeup2_enable)  

Powered by blists - more mailing lists