Netdev List
 help / color / mirror / Atom feed
* [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
@ 2026-07-12 18:35 Markus Elfring
  2026-07-12 22:19 ` Vadim Fedorenko
                   ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Markus Elfring @ 2026-07-12 18:35 UTC (permalink / raw)
  To: netdev, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong
  Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Sun, 12 Jul 2026 20:25:10 +0200

The address of a data structure member was determined before
a corresponding null pointer check in the implementation of
the function “rnpgbe_rm_adapter”.

Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
Pass the required address directly to a function call.

This issue was detected by using the Coccinelle software.

Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")
Cc: stable@vger.kernel.org
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c
index 70a2b0082ba8..93cf757c951c 100644
--- a/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c
+++ b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c
@@ -245,7 +245,6 @@ static int rnpgbe_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 static void rnpgbe_rm_adapter(struct pci_dev *pdev)
 {
 	struct mucse *mucse = pci_get_drvdata(pdev);
-	struct mucse_hw *hw = &mucse->hw;
 	struct net_device *netdev;
 	int err;
 
@@ -253,7 +252,7 @@ static void rnpgbe_rm_adapter(struct pci_dev *pdev)
 		return;
 	netdev = mucse->netdev;
 	unregister_netdev(netdev);
-	err = rnpgbe_send_notify(hw, false, mucse_fw_powerup);
+	err = rnpgbe_send_notify(&mucse->hw, false, mucse_fw_powerup);
 	if (err)
 		dev_warn(&pdev->dev, "Send powerdown to hw failed %d\n", err);
 	free_netdev(netdev);
-- 
2.55.0


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

* Re: [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-12 18:35 [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter() Markus Elfring
@ 2026-07-12 22:19 ` Vadim Fedorenko
  2026-07-13  6:00   ` Markus Elfring
  2026-07-13  8:04 ` [PATCH net] " Dan Carpenter
  2026-07-14 22:20 ` [PATCH net] " Andrew Lunn
  2 siblings, 1 reply; 20+ messages in thread
From: Vadim Fedorenko @ 2026-07-12 22:19 UTC (permalink / raw)
  To: Markus Elfring, netdev, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, MD Danish Anwar, Michael Grzeschik,
	Paolo Abeni, Uwe Kleine-König, Yibo Dong
  Cc: LKML, kernel-janitors

On 12/07/2026 19:35, Markus Elfring wrote:
> From: Markus Elfring <elfring@users.sourceforge.net>
> Date: Sun, 12 Jul 2026 20:25:10 +0200
> 
> The address of a data structure member was determined before
> a corresponding null pointer check in the implementation of
> the function “rnpgbe_rm_adapter”.

The null check in rnpgbe_rm_adapter() looks more like defensive
programming, which got into the code unnoticed. pdev will not exist if
netdev is not allocated, where mucse is netdev private data.

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-12 22:19 ` Vadim Fedorenko
@ 2026-07-13  6:00   ` Markus Elfring
  0 siblings, 0 replies; 20+ messages in thread
From: Markus Elfring @ 2026-07-13  6:00 UTC (permalink / raw)
  To: Vadim Fedorenko, netdev, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, MD Danish Anwar, Michael Grzeschik,
	Paolo Abeni, Uwe Kleine-König, Yibo Dong
  Cc: LKML, kernel-janitors

>> The address of a data structure member was determined before
>> a corresponding null pointer check in the implementation of
>> the function “rnpgbe_rm_adapter”.
> 
> The null check in rnpgbe_rm_adapter() looks more like defensive
> programming,

This can be fine, can't it?


>              which got into the code unnoticed.

Some patch reviews happened accordingly.


>                                                 pdev will not exist if
> netdev is not allocated, where mucse is netdev private data.

Would you like to reconsider the relevance of another null pointer check?

Regards,
Markus


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

* Re: [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-12 18:35 [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter() Markus Elfring
  2026-07-12 22:19 ` Vadim Fedorenko
@ 2026-07-13  8:04 ` Dan Carpenter
  2026-07-13  8:22   ` Markus Elfring
  2026-07-14 22:20 ` [PATCH net] " Andrew Lunn
  2 siblings, 1 reply; 20+ messages in thread
From: Dan Carpenter @ 2026-07-13  8:04 UTC (permalink / raw)
  To: Markus Elfring
  Cc: netdev, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	kernel-janitors

On Sun, Jul 12, 2026 at 08:35:21PM +0200, Markus Elfring wrote:
> From: Markus Elfring <elfring@users.sourceforge.net>
> Date: Sun, 12 Jul 2026 20:25:10 +0200
> 
> The address of a data structure member was determined before
> a corresponding null pointer check in the implementation of
> the function “rnpgbe_rm_adapter”.
> 
> Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
> Pass the required address directly to a function call.
> 
> This issue was detected by using the Coccinelle software.
> 
> Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")

There is no NULL dereference here.  It's just pointer math.
No need for a Fixes tag.

regards,
dan carpenter


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

* Re: [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-13  8:04 ` [PATCH net] " Dan Carpenter
@ 2026-07-13  8:22   ` Markus Elfring
  2026-07-15 13:12     ` Uwe Kleine-König
  2026-07-16  6:57     ` [PATCH net] " Dan Carpenter
  0 siblings, 2 replies; 20+ messages in thread
From: Markus Elfring @ 2026-07-13  8:22 UTC (permalink / raw)
  To: Dan Carpenter, netdev
  Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	kernel-janitors

>> The address of a data structure member was determined before
>> a corresponding null pointer check in the implementation of
>> the function “rnpgbe_rm_adapter”.
>>
>> Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
>> Pass the required address directly to a function call.
>>
>> This issue was detected by using the Coccinelle software.
>>
>> Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")
> 
> There is no NULL dereference here.  It's just pointer math.
> No need for a Fixes tag.

How does your view fit to information in an article like “Fun with NULL pointers, part 1”(by Jonathan Corbet from 2009-07-20)?
https://lwn.net/Articles/342330/

Regards,
Markus

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

* Re: [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-12 18:35 [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter() Markus Elfring
  2026-07-12 22:19 ` Vadim Fedorenko
  2026-07-13  8:04 ` [PATCH net] " Dan Carpenter
@ 2026-07-14 22:20 ` Andrew Lunn
  2026-07-15  5:22   ` Markus Elfring
  2 siblings, 1 reply; 20+ messages in thread
From: Andrew Lunn @ 2026-07-14 22:20 UTC (permalink / raw)
  To: Markus Elfring
  Cc: netdev, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	kernel-janitors

On Sun, Jul 12, 2026 at 08:35:21PM +0200, Markus Elfring wrote:
> From: Markus Elfring <elfring@users.sourceforge.net>
> Date: Sun, 12 Jul 2026 20:25:10 +0200
> 
> The address of a data structure member was determined before
> a corresponding null pointer check in the implementation of
> the function “rnpgbe_rm_adapter”.

Please can you show the path taken that mucse is actually NULL.

I tend to agree, that the correct change is to remove the NULL pointer
test.

    Andrew

---
pw-bot: cr

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-14 22:20 ` [PATCH net] " Andrew Lunn
@ 2026-07-15  5:22   ` Markus Elfring
  0 siblings, 0 replies; 20+ messages in thread
From: Markus Elfring @ 2026-07-15  5:22 UTC (permalink / raw)
  To: Andrew Lunn, netdev
  Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	kernel-janitors

>> The address of a data structure member was determined before
>> a corresponding null pointer check in the implementation of
>> the function “rnpgbe_rm_adapter”.
> 
> Please can you show the path taken that mucse is actually NULL.

The applied sanity check indicates a corresponding possibility.

Which result representations would you find helpful for the requested
data flow analysis?


> I tend to agree, that the correct change is to remove the NULL pointer
> test.
Will the omission of such a check gain wider acceptance?

Regards,
Markus

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

* Re: [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-13  8:22   ` Markus Elfring
@ 2026-07-15 13:12     ` Uwe Kleine-König
  2026-07-15 18:45       ` Markus Elfring
  2026-07-16  6:57     ` [PATCH net] " Dan Carpenter
  1 sibling, 1 reply; 20+ messages in thread
From: Uwe Kleine-König @ 2026-07-15 13:12 UTC (permalink / raw)
  To: Markus Elfring
  Cc: Dan Carpenter, netdev, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Vadim Fedorenko, Yibo Dong, LKML, kernel-janitors

[-- Attachment #1: Type: text/plain, Size: 2791 bytes --]

On Mon, Jul 13, 2026 at 10:22:06AM +0200, Markus Elfring wrote:
> >> The address of a data structure member was determined before
> >> a corresponding null pointer check in the implementation of
> >> the function “rnpgbe_rm_adapter”.
> >>
> >> Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
> >> Pass the required address directly to a function call.
> >>
> >> This issue was detected by using the Coccinelle software.
> >>
> >> Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")
> > 
> > There is no NULL dereference here.  It's just pointer math.
> > No need for a Fixes tag.
> 
> How does your view fit to information in an article like “Fun with
> NULL pointers, part 1”(by Jonathan Corbet from 2009-07-20)?
> https://lwn.net/Articles/342330/

It does fit, because the problematic code discussed in Jonathan Corbet's
article is of the type:

	int i = ptr->i;

	if (!ptr)
		do_something();

while here we have:

	int *i = &ptr->i;

	if (!ptr)
		do_something();

which at least in my test[1] is relevantly different. Note, I didn't
study the C standard if the compiler is free to optimize out
do_something() also in the 2nd case, but at least today gcc doesn't.

Best regards
Uwe

[1] Me knowing about ARM assembly, that's what I checked:

	$ cat test.c
	#include <stdio.h>
	#include <stdlib.h>

	struct mystruct {
		int i;
		char c;
	};

	int funcdirect(struct mystruct *ptr)
	{
		int i = ptr->i;

		if (!ptr)
			return -1;

		printf("i = %d\n", i);
		return 0;
	}

	int funcindirect(struct mystruct *ptr)
	{
		int *i = &ptr->i;

		if (!ptr)
			return -1;

		printf("i = %d\n", *i);
		return 0;
	}
	$ arm-linux-gnueabihf-gcc -O3 -c test.c
	$ objdump -D test.o

	test.o:     file format elf32-littlearm


	Disassembly of section .text:

	00000000 <funcdirect>:
	   0:	b508      	push	{r3, lr}
	   2:	4603      	mov	r3, r0
	   4:	4803      	ldr	r0, [pc, #12]	@ (14 <funcdirect+0x14>)
	   6:	6819      	ldr	r1, [r3, #0]
	   8:	4478      	add	r0, pc
	   a:	f7ff fffe 	bl	0 <printf>
	   e:	2000      	movs	r0, #0
	  10:	bd08      	pop	{r3, pc}
	  12:	bf00      	nop
	  14:	00000008 	andeq	r0, r0, r8

	00000018 <funcindirect>:
	  18:	b138      	cbz	r0, 2a <funcindirect+0x12>
	  1a:	6801      	ldr	r1, [r0, #0]
	  1c:	4804      	ldr	r0, [pc, #16]	@ (30 <funcindirect+0x18>)
	  1e:	b508      	push	{r3, lr}
	  20:	4478      	add	r0, pc
	  22:	f7ff fffe 	bl	0 <printf>
	  26:	2000      	movs	r0, #0
	  28:	bd08      	pop	{r3, pc}
	  2a:	f04f 30ff 	mov.w	r0, #4294967295	@ 0xffffffff
	  2e:	4770      	bx	lr
	  30:	0000000c 	andeq	r0, r0, ip

So in funcdirect the check is not present, while it is in funcindirect.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-15 13:12     ` Uwe Kleine-König
@ 2026-07-15 18:45       ` Markus Elfring
  2026-07-16  9:30         ` Dan Carpenter
  0 siblings, 1 reply; 20+ messages in thread
From: Markus Elfring @ 2026-07-15 18:45 UTC (permalink / raw)
  To: Uwe Kleine-König, netdev, kernel-janitors
  Cc: Dan Carpenter, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Vadim Fedorenko, Yibo Dong, LKML, Jonathan Corbet



Am 15.07.26 um 15:12 schrieb Uwe Kleine-König:
> On Mon, Jul 13, 2026 at 10:22:06AM +0200, Markus Elfring wrote:
>>>> The address of a data structure member was determined before
>>>> a corresponding null pointer check in the implementation of
>>>> the function “rnpgbe_rm_adapter”.
>>>>
>>>> Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
>>>> Pass the required address directly to a function call.
>>>>
>>>> This issue was detected by using the Coccinelle software.
>>>>
>>>> Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")
>>>
>>> There is no NULL dereference here.  It's just pointer math.
>>> No need for a Fixes tag.
>>
>> How does your view fit to information in an article like “Fun with
>> NULL pointers, part 1”(by Jonathan Corbet from 2009-07-20)?
>> https://lwn.net/Articles/342330/
> 
> It does fit, because the problematic code discussed in Jonathan Corbet's
> article is of the type:
> 
> 	int i = ptr->i;
> 
> 	if (!ptr)
> 		do_something();
> 
> while here we have:
> 
> 	int *i = &ptr->i;
> 
> 	if (!ptr)
> 		do_something();
> 
> which at least in my test[1] is relevantly different.

Jonathan Corbet provided the following information.

“…
But Herbert's patch added a line which dereferences the pointer prior to the check. That, of course, is a bug.
…”


>                                                       Note, I didn't
> study the C standard

I hope that clarification approaches can evolve further according to this information source.


>                      if the compiler is free to optimize out
> do_something() also in the 2nd case, but at least today gcc doesn't.

Can development interests grow also according to another clarification approach?

Does &((struct name *)NULL -> b) cause undefined behaviour in C11?
https://stackoverflow.com/questions/26906621/does-struct-name-null-b-cause-undefined-behaviour-in-c11



Would you prefer to omit a “sanity check” in the discussed function implementation?

Regards,
Markus

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

* Re: [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-13  8:22   ` Markus Elfring
  2026-07-15 13:12     ` Uwe Kleine-König
@ 2026-07-16  6:57     ` Dan Carpenter
  2026-07-16  8:20       ` Markus Elfring
  1 sibling, 1 reply; 20+ messages in thread
From: Dan Carpenter @ 2026-07-16  6:57 UTC (permalink / raw)
  To: Markus Elfring
  Cc: netdev, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	kernel-janitors

On Mon, Jul 13, 2026 at 10:22:06AM +0200, Markus Elfring wrote:
> >> The address of a data structure member was determined before
> >> a corresponding null pointer check in the implementation of
> >> the function “rnpgbe_rm_adapter”.
> >>
> >> Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
> >> Pass the required address directly to a function call.
> >>
> >> This issue was detected by using the Coccinelle software.
> >>
> >> Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")
> > 
> > There is no NULL dereference here.  It's just pointer math.
> > No need for a Fixes tag.
> 
> How does your view fit to information in an article like “Fun with NULL pointers, part 1”(by Jonathan Corbet from 2009-07-20)?
> https://lwn.net/Articles/342330/
> 

Of course you can't have NULL pointer dereferences but this is not a
dereference, it's just pointer math.

regards,
dan carpenter

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16  6:57     ` [PATCH net] " Dan Carpenter
@ 2026-07-16  8:20       ` Markus Elfring
  2026-07-16 13:30         ` Dan Carpenter
  2026-07-16 14:27         ` Jonathan Corbet
  0 siblings, 2 replies; 20+ messages in thread
From: Markus Elfring @ 2026-07-16  8:20 UTC (permalink / raw)
  To: Dan Carpenter, netdev, kernel-janitors
  Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	Jonathan Corbet

>>>> The address of a data structure member was determined before
>>>> a corresponding null pointer check in the implementation of
>>>> the function “rnpgbe_rm_adapter”.
>>>>
>>>> Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
>>>> Pass the required address directly to a function call.
>>>>
>>>> This issue was detected by using the Coccinelle software.
>>>>
>>>> Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")
>>>
>>> There is no NULL dereference here.  It's just pointer math.
>>> No need for a Fixes tag.
>>
>> How does your view fit to information in an article like “Fun with NULL pointers, part 1”
>> (by Jonathan Corbet from 2009-07-20)?>> https://lwn.net/Articles/342330/
>>
> 
> Of course you can't have NULL pointer dereferences but this is not a
> dereference, it's just pointer math.
Does your understanding of programming language details differ from the view
by Jonathan Corbet?

Regards,
Markus

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-15 18:45       ` Markus Elfring
@ 2026-07-16  9:30         ` Dan Carpenter
  2026-07-16  9:48           ` Markus Elfring
  0 siblings, 1 reply; 20+ messages in thread
From: Dan Carpenter @ 2026-07-16  9:30 UTC (permalink / raw)
  To: Markus Elfring
  Cc: Uwe Kleine-König, netdev, kernel-janitors, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, MD Danish Anwar,
	Michael Grzeschik, Paolo Abeni, Vadim Fedorenko, Yibo Dong, LKML,
	Jonathan Corbet

On Wed, Jul 15, 2026 at 08:45:48PM +0200, Markus Elfring wrote:
> 
> Jonathan Corbet provided the following information.
> 
> “…
> But Herbert's patch added a line which dereferences the pointer prior to the check. That, of course, is a bug.
> …”
> 

Notice that it says "dereferences" not "does pointer math".

> 
> >                                                       Note, I didn't
> > study the C standard
> 
> I hope that clarification approaches can evolve further according to this information source.
> 
> 
> >                      if the compiler is free to optimize out
> > do_something() also in the 2nd case, but at least today gcc doesn't.
> 
> Can development interests grow also according to another clarification approach?
> 
> Does &((struct name *)NULL -> b) cause undefined behaviour in C11?
> https://stackoverflow.com/questions/26906621/does-struct-name-null-b-cause-undefined-behaviour-in-c11
> 
> 
> 
> Would you prefer to omit a “sanity check” in the discussed function implementation?
> 

This is irrelevant.

In C writing if (!p) and if (p == NULL) are always equivalent but weirdly
the NULL doesn't have to zero.  It's part of the C FAQ.
https://c-faq.com/null/machexamp.html It's just a bit of fun trivia that
doesn't really matter unless you have a time machine.  Even if you invented
a time machine, the code here would still be fine because we have a NULL
test before dereferencing the results of our pointer math.

regards,
dan carpenter

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16  9:30         ` Dan Carpenter
@ 2026-07-16  9:48           ` Markus Elfring
  2026-07-16 13:24             ` Andrew Lunn
  0 siblings, 1 reply; 20+ messages in thread
From: Markus Elfring @ 2026-07-16  9:48 UTC (permalink / raw)
  To: Dan Carpenter, netdev, kernel-janitors
  Cc: Uwe Kleine-König, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Vadim Fedorenko, Yibo Dong, LKML, Jonathan Corbet

> In C writing if (!p) and if (p == NULL) are always equivalent but weirdly
> the NULL doesn't have to zero.  It's part of the C FAQ.
> https://c-faq.com/null/machexamp.html It's just a bit of fun trivia that
> doesn't really matter unless you have a time machine.  Even if you invented
> a time machine, the code here would still be fine because we have a NULL
> test before dereferencing the results of our pointer math.
Which expression evaluations would you interpret as pointer dereferences finally?
https://c-faq.com/sx1/

Regards,
Markus

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16  9:48           ` Markus Elfring
@ 2026-07-16 13:24             ` Andrew Lunn
  2026-07-16 13:34               ` Dan Carpenter
  0 siblings, 1 reply; 20+ messages in thread
From: Andrew Lunn @ 2026-07-16 13:24 UTC (permalink / raw)
  To: Markus Elfring
  Cc: Dan Carpenter, netdev, kernel-janitors, Uwe Kleine-König,
	Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni, Vadim Fedorenko,
	Yibo Dong, LKML, Jonathan Corbet

On Thu, Jul 16, 2026 at 11:48:43AM +0200, Markus Elfring wrote:
> > In C writing if (!p) and if (p == NULL) are always equivalent but weirdly
> > the NULL doesn't have to zero.  It's part of the C FAQ.
> > https://c-faq.com/null/machexamp.html It's just a bit of fun trivia that
> > doesn't really matter unless you have a time machine.  Even if you invented
> > a time machine, the code here would still be fine because we have a NULL
> > test before dereferencing the results of our pointer math.
> Which expression evaluations would you interpret as pointer dereferences finally?
> https://c-faq.com/sx1/

This is all interesting, but nobody has yet explain how this function
can be called such that we have a NULL pointer.

    Andrew

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16  8:20       ` Markus Elfring
@ 2026-07-16 13:30         ` Dan Carpenter
  2026-07-16 16:19           ` Markus Elfring
  2026-07-16 14:27         ` Jonathan Corbet
  1 sibling, 1 reply; 20+ messages in thread
From: Dan Carpenter @ 2026-07-16 13:30 UTC (permalink / raw)
  To: Markus Elfring
  Cc: netdev, kernel-janitors, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, MD Danish Anwar, Michael Grzeschik,
	Paolo Abeni, Uwe Kleine-König, Vadim Fedorenko, Yibo Dong,
	LKML, Jonathan Corbet

On Thu, Jul 16, 2026 at 10:20:42AM +0200, Markus Elfring wrote:
> >>>> The address of a data structure member was determined before
> >>>> a corresponding null pointer check in the implementation of
> >>>> the function “rnpgbe_rm_adapter”.
> >>>>
> >>>> Thus avoid the risk for undefined behaviour by omitting the variable “hw”.
> >>>> Pass the required address directly to a function call.
> >>>>
> >>>> This issue was detected by using the Coccinelle software.
> >>>>
> >>>> Fixes: 2ee95ec17e97c58b65e978a08b75fa8cb6424e4e ("net: rnpgbe: Add register_netdev")
> >>>
> >>> There is no NULL dereference here.  It's just pointer math.
> >>> No need for a Fixes tag.
> >>
> >> How does your view fit to information in an article like “Fun with NULL pointers, part 1”
> >> (by Jonathan Corbet from 2009-07-20)?>> https://lwn.net/Articles/342330/
> >>
> > 
> > Of course you can't have NULL pointer dereferences but this is not a
> > dereference, it's just pointer math.
> Does your understanding of programming language details differ from the view
> by Jonathan Corbet?

Jonathan Corbet's article talks about dereferences.

	p = tun->sk;
            ^^^^^^^
This is a dereference.

	p = &tun->sk;
            ^
This is pointer math.  It's not a dereference.

regards,
dan carpenter



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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16 13:24             ` Andrew Lunn
@ 2026-07-16 13:34               ` Dan Carpenter
  2026-07-16 13:43                 ` Andrew Lunn
  0 siblings, 1 reply; 20+ messages in thread
From: Dan Carpenter @ 2026-07-16 13:34 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Markus Elfring, netdev, kernel-janitors, Uwe Kleine-König,
	Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni, Vadim Fedorenko,
	Yibo Dong, LKML, Jonathan Corbet

On Thu, Jul 16, 2026 at 03:24:22PM +0200, Andrew Lunn wrote:
> On Thu, Jul 16, 2026 at 11:48:43AM +0200, Markus Elfring wrote:
> > > In C writing if (!p) and if (p == NULL) are always equivalent but weirdly
> > > the NULL doesn't have to zero.  It's part of the C FAQ.
> > > https://c-faq.com/null/machexamp.html It's just a bit of fun trivia that
> > > doesn't really matter unless you have a time machine.  Even if you invented
> > > a time machine, the code here would still be fine because we have a NULL
> > > test before dereferencing the results of our pointer math.
> > Which expression evaluations would you interpret as pointer dereferences finally?
> > https://c-faq.com/sx1/
> 
> This is all interesting, but nobody has yet explain how this function
> can be called such that we have a NULL pointer.

mucse cannot be NULL.

We call pci_set_drvdata() during probe() and it is still valid when
we call the remove() function.

regards,
dan carpenter

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16 13:34               ` Dan Carpenter
@ 2026-07-16 13:43                 ` Andrew Lunn
  0 siblings, 0 replies; 20+ messages in thread
From: Andrew Lunn @ 2026-07-16 13:43 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Markus Elfring, netdev, kernel-janitors, Uwe Kleine-König,
	Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni, Vadim Fedorenko,
	Yibo Dong, LKML, Jonathan Corbet

On Thu, Jul 16, 2026 at 04:34:05PM +0300, Dan Carpenter wrote:
> On Thu, Jul 16, 2026 at 03:24:22PM +0200, Andrew Lunn wrote:
> > On Thu, Jul 16, 2026 at 11:48:43AM +0200, Markus Elfring wrote:
> > > > In C writing if (!p) and if (p == NULL) are always equivalent but weirdly
> > > > the NULL doesn't have to zero.  It's part of the C FAQ.
> > > > https://c-faq.com/null/machexamp.html It's just a bit of fun trivia that
> > > > doesn't really matter unless you have a time machine.  Even if you invented
> > > > a time machine, the code here would still be fine because we have a NULL
> > > > test before dereferencing the results of our pointer math.
> > > Which expression evaluations would you interpret as pointer dereferences finally?
> > > https://c-faq.com/sx1/
> > 
> > This is all interesting, but nobody has yet explain how this function
> > can be called such that we have a NULL pointer.
> 
> mucse cannot be NULL.
> 
> We call pci_set_drvdata() during probe() and it is still valid when
> we call the remove() function.

Same as what i thought. So while this is an interesting discussion,
please could someone post the real fix, remove the NULL pointer check.

       Andrew

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16  8:20       ` Markus Elfring
  2026-07-16 13:30         ` Dan Carpenter
@ 2026-07-16 14:27         ` Jonathan Corbet
  2026-07-16 16:30           ` Markus Elfring
  1 sibling, 1 reply; 20+ messages in thread
From: Jonathan Corbet @ 2026-07-16 14:27 UTC (permalink / raw)
  To: Markus Elfring, Dan Carpenter, netdev, kernel-janitors
  Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML

Markus Elfring <Markus.Elfring@web.de> writes:

> Does your understanding of programming language details differ from the view
> by Jonathan Corbet?

I'm not sure why you keep dragging me into this - I have not opined on
this particular situation, which is definitely *not* a dereference.

jon

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16 13:30         ` Dan Carpenter
@ 2026-07-16 16:19           ` Markus Elfring
  0 siblings, 0 replies; 20+ messages in thread
From: Markus Elfring @ 2026-07-16 16:19 UTC (permalink / raw)
  To: Dan Carpenter, netdev, kernel-janitors
  Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	Jonathan Corbet

> Jonathan Corbet's article talks about dereferences.
> 
> 	p = tun->sk;
>             ^^^^^^^
> This is a dereference.
> 
> 	p = &tun->sk;
>             ^
> This is pointer math.  It's not a dereference.
Can such a development view be confusing?

Is the operator “address of” applied only after a pointer dereference attempt in this case?
https://en.cppreference.com/c/language/operator_member_access

Regards,
Markus

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

* Re: net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter()
  2026-07-16 14:27         ` Jonathan Corbet
@ 2026-07-16 16:30           ` Markus Elfring
  0 siblings, 0 replies; 20+ messages in thread
From: Markus Elfring @ 2026-07-16 16:30 UTC (permalink / raw)
  To: Jonathan Corbet, netdev, kernel-janitors
  Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	MD Danish Anwar, Michael Grzeschik, Paolo Abeni,
	Uwe Kleine-König, Vadim Fedorenko, Yibo Dong, LKML,
	Dan Carpenter

>> Does your understanding of programming language details differ from the view
>> by Jonathan Corbet?
> 
> I'm not sure why you keep dragging me into this

You are one of the contributors who pointed a specific control flow out as a bug.


>                                                 - I have not opined on
> this particular situation,

I got an other impression.


>                            which is definitely *not* a dereference.
Does such a feedback indicate a questionable communication difficulty?

Regards,
Markus

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

end of thread, other threads:[~2026-07-16 16:31 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-12 18:35 [PATCH net] net: rnpgbe: Pass an expression directly in rnpgbe_rm_adapter() Markus Elfring
2026-07-12 22:19 ` Vadim Fedorenko
2026-07-13  6:00   ` Markus Elfring
2026-07-13  8:04 ` [PATCH net] " Dan Carpenter
2026-07-13  8:22   ` Markus Elfring
2026-07-15 13:12     ` Uwe Kleine-König
2026-07-15 18:45       ` Markus Elfring
2026-07-16  9:30         ` Dan Carpenter
2026-07-16  9:48           ` Markus Elfring
2026-07-16 13:24             ` Andrew Lunn
2026-07-16 13:34               ` Dan Carpenter
2026-07-16 13:43                 ` Andrew Lunn
2026-07-16  6:57     ` [PATCH net] " Dan Carpenter
2026-07-16  8:20       ` Markus Elfring
2026-07-16 13:30         ` Dan Carpenter
2026-07-16 16:19           ` Markus Elfring
2026-07-16 14:27         ` Jonathan Corbet
2026-07-16 16:30           ` Markus Elfring
2026-07-14 22:20 ` [PATCH net] " Andrew Lunn
2026-07-15  5:22   ` Markus Elfring

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