diff mbox series

counter: Stop using dev_get_drvdata() to get the counter device

Message ID 20220204082556.370348-1-u.kleine-koenig@pengutronix.de (mailing list archive)
State Handled Elsewhere
Headers show
Series counter: Stop using dev_get_drvdata() to get the counter device | expand

Commit Message

Uwe Kleine-König Feb. 4, 2022, 8:25 a.m. UTC
dev_get_drvdata() returns NULL since commit b56346ddbd82 ("counter: Use
container_of instead of drvdata to track counter_device") which wrongly
claimed there were no users of drvdata. Convert to container_of() to
fix a null pointer dereference.

Reported-by: Oleksij Rempel <o.rempel@pengutronix.de>
Fixes: b56346ddbd82 ("counter: Use container_of instead of drvdata to track counter_device")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/counter/counter-sysfs.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)


base-commit: e783362eb54cd99b2cac8b3a9aeac942e6f6ac07

Comments

William Breathitt Gray Feb. 8, 2022, 1:42 a.m. UTC | #1
On Fri, Feb 04, 2022 at 09:25:56AM +0100, Uwe Kleine-König wrote:
> dev_get_drvdata() returns NULL since commit b56346ddbd82 ("counter: Use
> container_of instead of drvdata to track counter_device") which wrongly
> claimed there were no users of drvdata. Convert to container_of() to
> fix a null pointer dereference.
> 
> Reported-by: Oleksij Rempel <o.rempel@pengutronix.de>
> Fixes: b56346ddbd82 ("counter: Use container_of instead of drvdata to track counter_device")
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

I'll pick this up and apply it to my tree.

Thanks,

William Breathitt Gray

> ---
>  drivers/counter/counter-sysfs.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/counter/counter-sysfs.c b/drivers/counter/counter-sysfs.c
> index 7cc4d1d523ea..04eac41dad33 100644
> --- a/drivers/counter/counter-sysfs.c
> +++ b/drivers/counter/counter-sysfs.c
> @@ -19,6 +19,11 @@
>  
>  #include "counter-sysfs.h"
>  
> +static inline struct counter_device *counter_from_dev(struct device *dev)
> +{
> +	return container_of(dev, struct counter_device, dev);
> +}
> +
>  /**
>   * struct counter_attribute - Counter sysfs attribute
>   * @dev_attr:	device attribute for sysfs
> @@ -90,7 +95,7 @@ static ssize_t counter_comp_u8_show(struct device *dev,
>  				    struct device_attribute *attr, char *buf)
>  {
>  	const struct counter_attribute *const a = to_counter_attribute(attr);
> -	struct counter_device *const counter = dev_get_drvdata(dev);
> +	struct counter_device *const counter = counter_from_dev(dev);
>  	int err;
>  	u8 data = 0;
>  
> @@ -122,7 +127,7 @@ static ssize_t counter_comp_u8_store(struct device *dev,
>  				     const char *buf, size_t len)
>  {
>  	const struct counter_attribute *const a = to_counter_attribute(attr);
> -	struct counter_device *const counter = dev_get_drvdata(dev);
> +	struct counter_device *const counter = counter_from_dev(dev);
>  	int err;
>  	bool bool_data = 0;
>  	u8 data = 0;
> @@ -158,7 +163,7 @@ static ssize_t counter_comp_u32_show(struct device *dev,
>  				     struct device_attribute *attr, char *buf)
>  {
>  	const struct counter_attribute *const a = to_counter_attribute(attr);
> -	struct counter_device *const counter = dev_get_drvdata(dev);
> +	struct counter_device *const counter = counter_from_dev(dev);
>  	const struct counter_available *const avail = a->comp.priv;
>  	int err;
>  	u32 data = 0;
> @@ -221,7 +226,7 @@ static ssize_t counter_comp_u32_store(struct device *dev,
>  				      const char *buf, size_t len)
>  {
>  	const struct counter_attribute *const a = to_counter_attribute(attr);
> -	struct counter_device *const counter = dev_get_drvdata(dev);
> +	struct counter_device *const counter = counter_from_dev(dev);
>  	struct counter_count *const count = a->parent;
>  	struct counter_synapse *const synapse = a->comp.priv;
>  	const struct counter_available *const avail = a->comp.priv;
> @@ -281,7 +286,7 @@ static ssize_t counter_comp_u64_show(struct device *dev,
>  				     struct device_attribute *attr, char *buf)
>  {
>  	const struct counter_attribute *const a = to_counter_attribute(attr);
> -	struct counter_device *const counter = dev_get_drvdata(dev);
> +	struct counter_device *const counter = counter_from_dev(dev);
>  	int err;
>  	u64 data = 0;
>  
> @@ -309,7 +314,7 @@ static ssize_t counter_comp_u64_store(struct device *dev,
>  				      const char *buf, size_t len)
>  {
>  	const struct counter_attribute *const a = to_counter_attribute(attr);
> -	struct counter_device *const counter = dev_get_drvdata(dev);
> +	struct counter_device *const counter = counter_from_dev(dev);
>  	int err;
>  	u64 data = 0;
>  
> 
> base-commit: e783362eb54cd99b2cac8b3a9aeac942e6f6ac07
> -- 
> 2.34.1
>
Jarkko Nikula Feb. 17, 2022, 2:48 p.m. UTC | #2
Hi

On 2/8/22 03:42, William Breathitt Gray wrote:
> On Fri, Feb 04, 2022 at 09:25:56AM +0100, Uwe Kleine-König wrote:
>> dev_get_drvdata() returns NULL since commit b56346ddbd82 ("counter: Use
>> container_of instead of drvdata to track counter_device") which wrongly
>> claimed there were no users of drvdata. Convert to container_of() to
>> fix a null pointer dereference.
>>
>> Reported-by: Oleksij Rempel <o.rempel@pengutronix.de>
>> Fixes: b56346ddbd82 ("counter: Use container_of instead of drvdata to track counter_device")
>> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> 
> I'll pick this up and apply it to my tree.
> 
Perhaps late but I hit this same issue, patch here fixes it and I wanted 
to confirm it.

Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Uwe Kleine-König Feb. 17, 2022, 4:03 p.m. UTC | #3
On Thu, Feb 17, 2022 at 04:48:50PM +0200, Jarkko Nikula wrote:
> On 2/8/22 03:42, William Breathitt Gray wrote:
> > On Fri, Feb 04, 2022 at 09:25:56AM +0100, Uwe Kleine-König wrote:
> > > dev_get_drvdata() returns NULL since commit b56346ddbd82 ("counter: Use
> > > container_of instead of drvdata to track counter_device") which wrongly
> > > claimed there were no users of drvdata. Convert to container_of() to
> > > fix a null pointer dereference.
> > > 
> > > Reported-by: Oleksij Rempel <o.rempel@pengutronix.de>
> > > Fixes: b56346ddbd82 ("counter: Use container_of instead of drvdata to track counter_device")
> > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> > 
> > I'll pick this up and apply it to my tree.
>
> Perhaps late but I hit this same issue, patch here fixes it and I wanted to
> confirm it.
> 
> Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>

I wonder if this patch is scheduled for 5.17. Currently it's not even in
next ... :-\

Best regards
Uwe
William Breathitt Gray Feb. 17, 2022, 11:42 p.m. UTC | #4
On Thu, Feb 17, 2022 at 05:03:08PM +0100, Uwe Kleine-König wrote:
> On Thu, Feb 17, 2022 at 04:48:50PM +0200, Jarkko Nikula wrote:
> > On 2/8/22 03:42, William Breathitt Gray wrote:
> > > On Fri, Feb 04, 2022 at 09:25:56AM +0100, Uwe Kleine-König wrote:
> > > > dev_get_drvdata() returns NULL since commit b56346ddbd82 ("counter: Use
> > > > container_of instead of drvdata to track counter_device") which wrongly
> > > > claimed there were no users of drvdata. Convert to container_of() to
> > > > fix a null pointer dereference.
> > > > 
> > > > Reported-by: Oleksij Rempel <o.rempel@pengutronix.de>
> > > > Fixes: b56346ddbd82 ("counter: Use container_of instead of drvdata to track counter_device")
> > > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> > > 
> > > I'll pick this up and apply it to my tree.
> >
> > Perhaps late but I hit this same issue, patch here fixes it and I wanted to
> > confirm it.
> > 
> > Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> 
> I wonder if this patch is scheduled for 5.17. Currently it's not even in
> next ... :-\
> 
> Best regards
> Uwe

Hi Uwe,

I've got it in my tree. I'm sending a pull request for the Counter
patches for 5.17 next week, so they should all be merged after that.

Sincerely,

William Breathitt Gray
Uwe Kleine-König Feb. 18, 2022, 7:47 a.m. UTC | #5
Hello,

On Fri, Feb 18, 2022 at 08:42:51AM +0900, William Breathitt Gray wrote:
> On Thu, Feb 17, 2022 at 05:03:08PM +0100, Uwe Kleine-König wrote:
> > On Thu, Feb 17, 2022 at 04:48:50PM +0200, Jarkko Nikula wrote:
> > > On 2/8/22 03:42, William Breathitt Gray wrote:
> > > > On Fri, Feb 04, 2022 at 09:25:56AM +0100, Uwe Kleine-König wrote:
> > > > > dev_get_drvdata() returns NULL since commit b56346ddbd82 ("counter: Use
> > > > > container_of instead of drvdata to track counter_device") which wrongly
> > > > > claimed there were no users of drvdata. Convert to container_of() to
> > > > > fix a null pointer dereference.
> > > > > 
> > > > > Reported-by: Oleksij Rempel <o.rempel@pengutronix.de>
> > > > > Fixes: b56346ddbd82 ("counter: Use container_of instead of drvdata to track counter_device")
> > > > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> > > > 
> > > > I'll pick this up and apply it to my tree.
> > >
> > > Perhaps late but I hit this same issue, patch here fixes it and I wanted to
> > > confirm it.
> > > 
> > > Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> > 
> > I wonder if this patch is scheduled for 5.17. Currently it's not even in
> > next ... :-\
> 
> I've got it in my tree. I'm sending a pull request for the Counter
> patches for 5.17 next week, so they should all be merged after that.

That's good. Still I think you could make live easier for your users to
find fixes if your tree was included in next. And in MAINTAINERS.

Best regards
Uwe
William Breathitt Gray Feb. 18, 2022, 9:11 a.m. UTC | #6
On Fri, Feb 18, 2022 at 08:47:51AM +0100, Uwe Kleine-König wrote:
> Hello,
> 
> On Fri, Feb 18, 2022 at 08:42:51AM +0900, William Breathitt Gray wrote:
> > On Thu, Feb 17, 2022 at 05:03:08PM +0100, Uwe Kleine-König wrote:
> > > On Thu, Feb 17, 2022 at 04:48:50PM +0200, Jarkko Nikula wrote:
> > > > On 2/8/22 03:42, William Breathitt Gray wrote:
> > > > > On Fri, Feb 04, 2022 at 09:25:56AM +0100, Uwe Kleine-König wrote:
> > > > > > dev_get_drvdata() returns NULL since commit b56346ddbd82 ("counter: Use
> > > > > > container_of instead of drvdata to track counter_device") which wrongly
> > > > > > claimed there were no users of drvdata. Convert to container_of() to
> > > > > > fix a null pointer dereference.
> > > > > > 
> > > > > > Reported-by: Oleksij Rempel <o.rempel@pengutronix.de>
> > > > > > Fixes: b56346ddbd82 ("counter: Use container_of instead of drvdata to track counter_device")
> > > > > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> > > > > 
> > > > > I'll pick this up and apply it to my tree.
> > > >
> > > > Perhaps late but I hit this same issue, patch here fixes it and I wanted to
> > > > confirm it.
> > > > 
> > > > Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> > > 
> > > I wonder if this patch is scheduled for 5.17. Currently it's not even in
> > > next ... :-\
> > 
> > I've got it in my tree. I'm sending a pull request for the Counter
> > patches for 5.17 next week, so they should all be merged after that.
> 
> That's good. Still I think you could make live easier for your users to
> find fixes if your tree was included in next. And in MAINTAINERS.
> 
> Best regards
> Uwe

That's a fair point, I'll update MAINTAINERS and set up my fixes branch
for inclusion in linux-next.

Incidentally, it looks like this is the only fix I have merged; I'll
submit it now by itself so we don't have to wait until next week.

Thanks,

William Breathitt Gray
diff mbox series

Patch

diff --git a/drivers/counter/counter-sysfs.c b/drivers/counter/counter-sysfs.c
index 7cc4d1d523ea..04eac41dad33 100644
--- a/drivers/counter/counter-sysfs.c
+++ b/drivers/counter/counter-sysfs.c
@@ -19,6 +19,11 @@ 
 
 #include "counter-sysfs.h"
 
+static inline struct counter_device *counter_from_dev(struct device *dev)
+{
+	return container_of(dev, struct counter_device, dev);
+}
+
 /**
  * struct counter_attribute - Counter sysfs attribute
  * @dev_attr:	device attribute for sysfs
@@ -90,7 +95,7 @@  static ssize_t counter_comp_u8_show(struct device *dev,
 				    struct device_attribute *attr, char *buf)
 {
 	const struct counter_attribute *const a = to_counter_attribute(attr);
-	struct counter_device *const counter = dev_get_drvdata(dev);
+	struct counter_device *const counter = counter_from_dev(dev);
 	int err;
 	u8 data = 0;
 
@@ -122,7 +127,7 @@  static ssize_t counter_comp_u8_store(struct device *dev,
 				     const char *buf, size_t len)
 {
 	const struct counter_attribute *const a = to_counter_attribute(attr);
-	struct counter_device *const counter = dev_get_drvdata(dev);
+	struct counter_device *const counter = counter_from_dev(dev);
 	int err;
 	bool bool_data = 0;
 	u8 data = 0;
@@ -158,7 +163,7 @@  static ssize_t counter_comp_u32_show(struct device *dev,
 				     struct device_attribute *attr, char *buf)
 {
 	const struct counter_attribute *const a = to_counter_attribute(attr);
-	struct counter_device *const counter = dev_get_drvdata(dev);
+	struct counter_device *const counter = counter_from_dev(dev);
 	const struct counter_available *const avail = a->comp.priv;
 	int err;
 	u32 data = 0;
@@ -221,7 +226,7 @@  static ssize_t counter_comp_u32_store(struct device *dev,
 				      const char *buf, size_t len)
 {
 	const struct counter_attribute *const a = to_counter_attribute(attr);
-	struct counter_device *const counter = dev_get_drvdata(dev);
+	struct counter_device *const counter = counter_from_dev(dev);
 	struct counter_count *const count = a->parent;
 	struct counter_synapse *const synapse = a->comp.priv;
 	const struct counter_available *const avail = a->comp.priv;
@@ -281,7 +286,7 @@  static ssize_t counter_comp_u64_show(struct device *dev,
 				     struct device_attribute *attr, char *buf)
 {
 	const struct counter_attribute *const a = to_counter_attribute(attr);
-	struct counter_device *const counter = dev_get_drvdata(dev);
+	struct counter_device *const counter = counter_from_dev(dev);
 	int err;
 	u64 data = 0;
 
@@ -309,7 +314,7 @@  static ssize_t counter_comp_u64_store(struct device *dev,
 				      const char *buf, size_t len)
 {
 	const struct counter_attribute *const a = to_counter_attribute(attr);
-	struct counter_device *const counter = dev_get_drvdata(dev);
+	struct counter_device *const counter = counter_from_dev(dev);
 	int err;
 	u64 data = 0;