All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] firmware: Hold a reference for of_find_compatible_node()
@ 2022-06-21  3:26 Liang He
  2022-06-27 14:09 ` Greg KH
  0 siblings, 1 reply; 5+ messages in thread
From: Liang He @ 2022-06-21  3:26 UTC (permalink / raw)
  To: broonie, gregkh, ckeepax, michal.simek, abhyuday.godhasara,
	simont, ronak.jain, peng.fan, linux-kernel
  Cc: Liang He

In of_register_trusted_foundations(), we need to hold the reference
returned by of_find_compatible_node() and then use it to call
of_node_put() for refcount balance.

Signed-off-by: Liang He <windhl@126.com>
---
 include/linux/firmware/trusted_foundations.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/linux/firmware/trusted_foundations.h b/include/linux/firmware/trusted_foundations.h
index be5984bda592..399471c2f1c7 100644
--- a/include/linux/firmware/trusted_foundations.h
+++ b/include/linux/firmware/trusted_foundations.h
@@ -71,12 +71,16 @@ static inline void register_trusted_foundations(
 
 static inline void of_register_trusted_foundations(void)
 {
+	struct device_node *np = of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations");
+
+	of_node_put(np);
+	if (!np)
+		return;
 	/*
 	 * If we find the target should enable TF but does not support it,
 	 * fail as the system won't be able to do much anyway
 	 */
-	if (of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations"))
-		register_trusted_foundations(NULL);
+	register_trusted_foundations(NULL);
 }
 
 static inline bool trusted_foundations_registered(void)
-- 
2.25.1


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

* Re: [PATCH] firmware: Hold a reference for of_find_compatible_node()
  2022-06-21  3:26 [PATCH] firmware: Hold a reference for of_find_compatible_node() Liang He
@ 2022-06-27 14:09 ` Greg KH
  2022-06-27 14:51   ` Liang He
  0 siblings, 1 reply; 5+ messages in thread
From: Greg KH @ 2022-06-27 14:09 UTC (permalink / raw)
  To: Liang He
  Cc: broonie, ckeepax, michal.simek, abhyuday.godhasara, simont,
	ronak.jain, peng.fan, linux-kernel

On Tue, Jun 21, 2022 at 11:26:25AM +0800, Liang He wrote:
> In of_register_trusted_foundations(), we need to hold the reference
> returned by of_find_compatible_node() and then use it to call
> of_node_put() for refcount balance.
> 
> Signed-off-by: Liang He <windhl@126.com>
> ---
>  include/linux/firmware/trusted_foundations.h | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/firmware/trusted_foundations.h b/include/linux/firmware/trusted_foundations.h
> index be5984bda592..399471c2f1c7 100644
> --- a/include/linux/firmware/trusted_foundations.h
> +++ b/include/linux/firmware/trusted_foundations.h
> @@ -71,12 +71,16 @@ static inline void register_trusted_foundations(
>  
>  static inline void of_register_trusted_foundations(void)
>  {
> +	struct device_node *np = of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations");
> +
> +	of_node_put(np);
> +	if (!np)

While this is technically correct, you are now checking to see if this
points to a memory location that you no longer know what it really
belongs to.  C will let you do this, but it might be nicer to fix it up
properly so it doesn't look like this.

thanks,

greg k-h

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

* Re:Re: [PATCH] firmware: Hold a reference for of_find_compatible_node()
  2022-06-27 14:09 ` Greg KH
@ 2022-06-27 14:51   ` Liang He
  2022-06-27 15:03     ` Greg KH
  0 siblings, 1 reply; 5+ messages in thread
From: Liang He @ 2022-06-27 14:51 UTC (permalink / raw)
  To: Greg KH
  Cc: broonie, ckeepax, michal.simek, abhyuday.godhasara, simont,
	ronak.jain, peng.fan, linux-kernel



At 2022-06-27 22:09:43, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>On Tue, Jun 21, 2022 at 11:26:25AM +0800, Liang He wrote:
>> In of_register_trusted_foundations(), we need to hold the reference
>> returned by of_find_compatible_node() and then use it to call
>> of_node_put() for refcount balance.
>> 
>> Signed-off-by: Liang He <windhl@126.com>
>> ---
>>  include/linux/firmware/trusted_foundations.h | 8 ++++++--
>>  1 file changed, 6 insertions(+), 2 deletions(-)
>> 
>> diff --git a/include/linux/firmware/trusted_foundations.h b/include/linux/firmware/trusted_foundations.h
>> index be5984bda592..399471c2f1c7 100644
>> --- a/include/linux/firmware/trusted_foundations.h
>> +++ b/include/linux/firmware/trusted_foundations.h
>> @@ -71,12 +71,16 @@ static inline void register_trusted_foundations(
>>  
>>  static inline void of_register_trusted_foundations(void)
>>  {
>> +	struct device_node *np = of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations");
>> +
>> +	of_node_put(np);
>> +	if (!np)
>
>While this is technically correct, you are now checking to see if this
>points to a memory location that you no longer know what it really
>belongs to.  C will let you do this, but it might be nicer to fix it up
>properly so it doesn't look like this.
>
>thanks,
>
>greg k-h

Hi,Greg KH,

Thanks very much for your effort to review my patch.

In fact, I have reported a commit for this kind of 'check-after-put' coding style:
https://lore.kernel.org/all/20220617112636.4041671-1-windhl@126.com/

But I have been told to keep such style and I think the explanation is also reasonable.
So when I make this patch, I am indeed confused what I should write.

Finally, I think it is better to be consistent with current coding style so
I chose this 'check-after-put' style.

But if you think it is better to use a normal order, i.e., check-then-put,
I am, of cause, very happy to send a new patch for this bug and I will
also keep to use this coding style in future.

Thanks again.

Liang 


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

* Re: Re: [PATCH] firmware: Hold a reference for of_find_compatible_node()
  2022-06-27 14:51   ` Liang He
@ 2022-06-27 15:03     ` Greg KH
  2022-06-27 15:14       ` Liang He
  0 siblings, 1 reply; 5+ messages in thread
From: Greg KH @ 2022-06-27 15:03 UTC (permalink / raw)
  To: Liang He
  Cc: broonie, ckeepax, michal.simek, abhyuday.godhasara, simont,
	ronak.jain, peng.fan, linux-kernel

On Mon, Jun 27, 2022 at 10:51:38PM +0800, Liang He wrote:
> 
> 
> At 2022-06-27 22:09:43, "Greg KH" <gregkh@linuxfoundation.org> wrote:
> >On Tue, Jun 21, 2022 at 11:26:25AM +0800, Liang He wrote:
> >> In of_register_trusted_foundations(), we need to hold the reference
> >> returned by of_find_compatible_node() and then use it to call
> >> of_node_put() for refcount balance.
> >> 
> >> Signed-off-by: Liang He <windhl@126.com>
> >> ---
> >>  include/linux/firmware/trusted_foundations.h | 8 ++++++--
> >>  1 file changed, 6 insertions(+), 2 deletions(-)
> >> 
> >> diff --git a/include/linux/firmware/trusted_foundations.h b/include/linux/firmware/trusted_foundations.h
> >> index be5984bda592..399471c2f1c7 100644
> >> --- a/include/linux/firmware/trusted_foundations.h
> >> +++ b/include/linux/firmware/trusted_foundations.h
> >> @@ -71,12 +71,16 @@ static inline void register_trusted_foundations(
> >>  
> >>  static inline void of_register_trusted_foundations(void)
> >>  {
> >> +	struct device_node *np = of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations");
> >> +
> >> +	of_node_put(np);
> >> +	if (!np)
> >
> >While this is technically correct, you are now checking to see if this
> >points to a memory location that you no longer know what it really
> >belongs to.  C will let you do this, but it might be nicer to fix it up
> >properly so it doesn't look like this.
> >
> >thanks,
> >
> >greg k-h
> 
> Hi,Greg KH,
> 
> Thanks very much for your effort to review my patch.
> 
> In fact, I have reported a commit for this kind of 'check-after-put' coding style:
> https://lore.kernel.org/all/20220617112636.4041671-1-windhl@126.com/
> 
> But I have been told to keep such style and I think the explanation is also reasonable.

It's not very reasonable if you talk to C compiler authors.  They can do
crazy things with dereferenced memory locations, including optimizing
them away entirely as they now "know" that this does not point to any
valid memory so it's an undefined thing that the compiler is being asked
to do.

> So when I make this patch, I am indeed confused what I should write.
> 
> Finally, I think it is better to be consistent with current coding style so
> I chose this 'check-after-put' style.
> 
> But if you think it is better to use a normal order, i.e., check-then-put,
> I am, of cause, very happy to send a new patch for this bug and I will
> also keep to use this coding style in future.

check and then put please.  That prevents you from having to fix up this
type of thing in a few years when the compilers all start to blow up on
it.

thanks,

greg k-h

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

* Re:Re: Re: [PATCH] firmware: Hold a reference for of_find_compatible_node()
  2022-06-27 15:03     ` Greg KH
@ 2022-06-27 15:14       ` Liang He
  0 siblings, 0 replies; 5+ messages in thread
From: Liang He @ 2022-06-27 15:14 UTC (permalink / raw)
  To: Greg KH
  Cc: broonie, ckeepax, michal.simek, abhyuday.godhasara, simont,
	ronak.jain, peng.fan, linux-kernel



At 2022-06-27 23:03:59, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>On Mon, Jun 27, 2022 at 10:51:38PM +0800, Liang He wrote:
>> 
>> 
>> At 2022-06-27 22:09:43, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>> >On Tue, Jun 21, 2022 at 11:26:25AM +0800, Liang He wrote:
>> >> In of_register_trusted_foundations(), we need to hold the reference
>> >> returned by of_find_compatible_node() and then use it to call
>> >> of_node_put() for refcount balance.
>> >> 
>> >> Signed-off-by: Liang He <windhl@126.com>
>> >> ---
>> >>  include/linux/firmware/trusted_foundations.h | 8 ++++++--
>> >>  1 file changed, 6 insertions(+), 2 deletions(-)
>> >> 
>> >> diff --git a/include/linux/firmware/trusted_foundations.h b/include/linux/firmware/trusted_foundations.h
>> >> index be5984bda592..399471c2f1c7 100644
>> >> --- a/include/linux/firmware/trusted_foundations.h
>> >> +++ b/include/linux/firmware/trusted_foundations.h
>> >> @@ -71,12 +71,16 @@ static inline void register_trusted_foundations(
>> >>  
>> >>  static inline void of_register_trusted_foundations(void)
>> >>  {
>> >> +	struct device_node *np = of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations");
>> >> +
>> >> +	of_node_put(np);
>> >> +	if (!np)
>> >
>> >While this is technically correct, you are now checking to see if this
>> >points to a memory location that you no longer know what it really
>> >belongs to.  C will let you do this, but it might be nicer to fix it up
>> >properly so it doesn't look like this.
>> >
>> >thanks,
>> >
>> >greg k-h
>> 
>> Hi,Greg KH,
>> 
>> Thanks very much for your effort to review my patch.
>> 
>> In fact, I have reported a commit for this kind of 'check-after-put' coding style:
>> https://lore.kernel.org/all/20220617112636.4041671-1-windhl@126.com/
>> 
>> But I have been told to keep such style and I think the explanation is also reasonable.
>
>It's not very reasonable if you talk to C compiler authors.  They can do
>crazy things with dereferenced memory locations, including optimizing
>them away entirely as they now "know" that this does not point to any
>valid memory so it's an undefined thing that the compiler is being asked
>to do.
>
>> So when I make this patch, I am indeed confused what I should write.
>> 
>> Finally, I think it is better to be consistent with current coding style so
>> I chose this 'check-after-put' style.
>> 
>> But if you think it is better to use a normal order, i.e., check-then-put,
>> I am, of cause, very happy to send a new patch for this bug and I will
>> also keep to use this coding style in future.
>
>check and then put please.  That prevents you from having to fix up this
>type of thing in a few years when the compilers all start to blow up on
>it.
>
>thanks,
>
>greg k-h

OK, Greg KH,

I am very happy to hear this and I will send 'check-and-put' patch tomorrow.

Thanks very much.

Liang

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

end of thread, other threads:[~2022-06-27 15:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-21  3:26 [PATCH] firmware: Hold a reference for of_find_compatible_node() Liang He
2022-06-27 14:09 ` Greg KH
2022-06-27 14:51   ` Liang He
2022-06-27 15:03     ` Greg KH
2022-06-27 15:14       ` Liang He

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.