* [PATCH RESEND v3] checkpatch: add uninitialized pointer with __free attribute check
@ 2025-11-04 9:56 Ally Heev
2025-11-04 13:28 ` Geert Uytterhoeven
0 siblings, 1 reply; 6+ messages in thread
From: Ally Heev @ 2025-11-04 9:56 UTC (permalink / raw)
To: Dwaipayan Ray, Lukas Bulwahn, Joe Perches, Jonathan Corbet,
Andy Whitcroft
Cc: workflows, linux-doc, linux-kernel, Dan Carpenter, David Hunter,
Shuah Khan, Viresh Kumar, Nishanth Menon, Stephen Boyd, linux-pm,
dan.j.williams, Ally Heev
uninitialized pointers with __free attribute can cause undefined
behaviour as the memory allocated to the pointer is freed
automatically when the pointer goes out of scope.
add check in checkpatch to detect such issues
Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
Link: https://lore.kernel.org/all/8a4c0b43-cf63-400d-b33d-d9c447b7e0b9@suswa.mountain/
Acked-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Ally Heev <allyheev@gmail.com>
---
Testing:
ran checkpatch.pl before and after the change on
crypto/asymmetric_keys/x509_public_key.c, which has
both initialized with NULL and uninitialized pointers
---
Changes in v3:
- remove $FreeAttribute
- Link to v2: https://lore.kernel.org/r/20251024-aheev-checkpatch-uninitialized-free-v2-0-16c0900e8130@gmail.com
Changes in v2:
- change cover letter and title to reflect new changes
- fix regex to handle multiple declarations in a single line case
- convert WARN to ERROR for uninitialized pointers
- add a new WARN for pointers initialized with NULL
- NOTE: tried handling multiple declarations on a single line by splitting
them and matching the parts with regex, but, it turned out to be
complex and overkill. Moreover, multi-line declarations pose a threat
- Link to v1: https://lore.kernel.org/r/20251021-aheev-checkpatch-uninitialized-free-v1-1-18fb01bc6a7a@gmail.com
---
Documentation/dev-tools/checkpatch.rst | 5 +++++
scripts/checkpatch.pl | 6 ++++++
2 files changed, 11 insertions(+)
diff --git a/Documentation/dev-tools/checkpatch.rst b/Documentation/dev-tools/checkpatch.rst
index d5c47e560324fb2399a5b1bc99c891ed1de10535..1a304bf38bcd27e50bbb7cd4383b07ac54d20b0a 100644
--- a/Documentation/dev-tools/checkpatch.rst
+++ b/Documentation/dev-tools/checkpatch.rst
@@ -1009,6 +1009,11 @@ Functions and Variables
return bar;
+ **UNINITIALIZED_PTR_WITH_FREE**
+ Pointers with __free attribute should be initialized. Not doing so
+ may lead to undefined behavior as the memory allocated (garbage,
+ in case not initialized) to the pointer is freed automatically
+ when the pointer goes out of scope.
Permissions
-----------
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 92669904eecc7a8d2afd3f2625528e02b6d17cd6..e697d81d71c0b3628f7b59807e8bc40d582621bb 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -7721,6 +7721,12 @@ sub process {
ERROR("MISSING_SENTINEL", "missing sentinel in ID array\n" . "$here\n$stat\n");
}
}
+
+# check for uninitialized pointers with __free attribute
+ while ($line =~ /\*\s*($Ident)\s+__free\s*\(\s*$Ident\s*\)\s*[,;]/g) {
+ ERROR("UNINITIALIZED_PTR_WITH_FREE",
+ "pointer '$1' with __free attribute should be initialized\n" . $herecurr);
+ }
}
# If we have no input at all, then there is nothing to report on
---
base-commit: 6548d364a3e850326831799d7e3ea2d7bb97ba08
change-id: 20251021-aheev-checkpatch-uninitialized-free-5c39f75e10a1
Best regards,
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQQBFRpOLrIakF7DYvaWPaLUP9d7HAUCaPyCqQAKCRCWPaLUP9d7
HMY1AP93A0fWIkV06Vcd8EHJy3w2G8hoinjDBpy5dZIXMMQFJgEA945Vs2tysbbR
qVNPU2EM8cnDwRabEkET597he3AbpgM=
=PL1b
-----END PGP SIGNATURE-----
--
Ally Heev <allyheev@gmail.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH RESEND v3] checkpatch: add uninitialized pointer with __free attribute check
2025-11-04 9:56 [PATCH RESEND v3] checkpatch: add uninitialized pointer with __free attribute check Ally Heev
@ 2025-11-04 13:28 ` Geert Uytterhoeven
2025-11-05 6:27 ` ally heev
2025-11-05 9:18 ` Markus Elfring
0 siblings, 2 replies; 6+ messages in thread
From: Geert Uytterhoeven @ 2025-11-04 13:28 UTC (permalink / raw)
To: Ally Heev
Cc: Dwaipayan Ray, Lukas Bulwahn, Joe Perches, Jonathan Corbet,
Andy Whitcroft, workflows, linux-doc, linux-kernel,
Dan Carpenter, David Hunter, Shuah Khan, Viresh Kumar,
Nishanth Menon, Stephen Boyd, linux-pm, dan.j.williams
Hi Ally,
On Tue, 4 Nov 2025 at 10:58, Ally Heev <allyheev@gmail.com> wrote:
> uninitialized pointers with __free attribute can cause undefined
> behaviour as the memory allocated to the pointer is freed
> automatically when the pointer goes out of scope.
> add check in checkpatch to detect such issues
>
> Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
> Link: https://lore.kernel.org/all/8a4c0b43-cf63-400d-b33d-d9c447b7e0b9@suswa.mountain/
> Acked-by: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Ally Heev <allyheev@gmail.com>
Thanks for your patch!
> --- a/Documentation/dev-tools/checkpatch.rst
> +++ b/Documentation/dev-tools/checkpatch.rst
> @@ -1009,6 +1009,11 @@ Functions and Variables
>
> return bar;
>
> + **UNINITIALIZED_PTR_WITH_FREE**
> + Pointers with __free attribute should be initialized. Not doing so
> + may lead to undefined behavior as the memory allocated (garbage,
> + in case not initialized) to the pointer is freed automatically
> + when the pointer goes out of scope.
I think this is misleading, and can be improved: if the pointer is
uninitialized, no memory was allocated?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH RESEND v3] checkpatch: add uninitialized pointer with __free attribute check
2025-11-04 13:28 ` Geert Uytterhoeven
@ 2025-11-05 6:27 ` ally heev
2025-11-05 9:18 ` Markus Elfring
1 sibling, 0 replies; 6+ messages in thread
From: ally heev @ 2025-11-05 6:27 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Dwaipayan Ray, Lukas Bulwahn, Joe Perches, Jonathan Corbet,
Andy Whitcroft, workflows, linux-doc, linux-kernel,
Dan Carpenter, David Hunter, Shuah Khan, Viresh Kumar,
Nishanth Menon, Stephen Boyd, linux-pm, dan.j.williams
On Tue, 2025-11-04 at 14:28 +0100, Geert Uytterhoeven wrote:
> Hi Ally,
>
> On Tue, 4 Nov 2025 at 10:58, Ally Heev <allyheev@gmail.com> wrote:
> > uninitialized pointers with __free attribute can cause undefined
> > behaviour as the memory allocated to the pointer is freed
> > automatically when the pointer goes out of scope.
> > add check in checkpatch to detect such issues
> >
> > Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
> > Link: https://lore.kernel.org/all/8a4c0b43-cf63-400d-b33d-d9c447b7e0b9@suswa.mountain/
> > Acked-by: Dan Williams <dan.j.williams@intel.com>
> > Signed-off-by: Ally Heev <allyheev@gmail.com>
>
> Thanks for your patch!
>
> > --- a/Documentation/dev-tools/checkpatch.rst
> > +++ b/Documentation/dev-tools/checkpatch.rst
> > @@ -1009,6 +1009,11 @@ Functions and Variables
> >
> > return bar;
> >
> > + **UNINITIALIZED_PTR_WITH_FREE**
> > + Pointers with __free attribute should be initialized. Not doing so
> > + may lead to undefined behavior as the memory allocated (garbage,
> > + in case not initialized) to the pointer is freed automatically
> > + when the pointer goes out of scope.
>
> I think this is misleading, and can be improved: if the pointer is
> uninitialized, no memory was allocated?
yeah right. Will update in next version
Regards,
Ally
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH RESEND v3] checkpatch: add uninitialized pointer with __free attribute check
2025-11-04 13:28 ` Geert Uytterhoeven
2025-11-05 6:27 ` ally heev
@ 2025-11-05 9:18 ` Markus Elfring
2025-11-06 16:29 ` ally heev
1 sibling, 1 reply; 6+ messages in thread
From: Markus Elfring @ 2025-11-05 9:18 UTC (permalink / raw)
To: Ally Heev, Geert Uytterhoeven, linux-doc, workflows, Joe Perches
Cc: LKML, linux-pm, Andy Whitcroft, Jonathan Corbet, Dan Carpenter,
Dan Williams, David Hunter, Dwaipayan Ray, Lukas Bulwahn,
Nishanth Menon, Shuah Khan, Stephen Boyd, Viresh Kumar
…
> > +++ b/Documentation/dev-tools/checkpatch.rst
> > @@ -1009,6 +1009,11 @@ Functions and Variables
> >
> > return bar;
> >
> > + **UNINITIALIZED_PTR_WITH_FREE**
> > + Pointers with __free attribute should be initialized. Not doing so
> > + may lead to undefined behavior as the memory allocated (garbage,
> > + in case not initialized) to the pointer is freed automatically
> > + when the pointer goes out of scope.
>
> I think this is misleading, and can be improved: if the pointer is
> uninitialized, no memory was allocated?
* Do corresponding source code analysis requirements indicate a need
to perform data processing with other programming interfaces than regular expressions?
* How do you think about to mention the possibility once more that scopes
can be reduced for affected local variables?
https://elixir.bootlin.com/linux/v6.18-rc4/source/include/linux/cleanup.h#L142-L146
Regards,
Markus
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH RESEND v3] checkpatch: add uninitialized pointer with __free attribute check
2025-11-05 9:18 ` Markus Elfring
@ 2025-11-06 16:29 ` ally heev
2025-11-06 17:03 ` [v3] " Markus Elfring
0 siblings, 1 reply; 6+ messages in thread
From: ally heev @ 2025-11-06 16:29 UTC (permalink / raw)
To: Markus Elfring, Geert Uytterhoeven, linux-doc, workflows, Joe Perches
Cc: LKML, linux-pm, Andy Whitcroft, Jonathan Corbet, Dan Carpenter,
Dan Williams, David Hunter, Dwaipayan Ray, Lukas Bulwahn,
Nishanth Menon, Shuah Khan, Stephen Boyd, Viresh Kumar
On Wed, 2025-11-05 at 10:18 +0100, Markus Elfring wrote:
[..]
> * Do corresponding source code analysis requirements indicate a need
> to perform data processing with other programming interfaces than regular expressions?
>
not sure about other source code analysis tools, but checkpatch
predominantly uses regexes
> * How do you think about to mention the possibility once more that scopes
> can be reduced for affected local variables?
> https://elixir.bootlin.com/linux/v6.18-rc4/source/include/linux/cleanup.h#L142-L146
> ...
The docstring talks about interdependency issues caused by assigning to
`NULL` which are very rare
Regards,
Ally
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [v3] checkpatch: add uninitialized pointer with __free attribute check
2025-11-06 16:29 ` ally heev
@ 2025-11-06 17:03 ` Markus Elfring
0 siblings, 0 replies; 6+ messages in thread
From: Markus Elfring @ 2025-11-06 17:03 UTC (permalink / raw)
To: Ally Heev, Geert Uytterhoeven, linux-doc, workflows, Joe Perches
Cc: LKML, linux-pm, Andy Whitcroft, Jonathan Corbet, Dan Carpenter,
Dan Williams, David Hunter, Dwaipayan Ray, Lukas Bulwahn,
Nishanth Menon, Shuah Khan, Stephen Boyd, Viresh Kumar
>> * Do corresponding source code analysis requirements indicate a need
>> to perform data processing with other programming interfaces than regular expressions?
>
> not sure about other source code analysis tools, but checkpatch
> predominantly uses regexes
Would you become interested to discuss additional software design approaches?
>> * How do you think about to mention the possibility once more that scopes
>> can be reduced for affected local variables?
>> https://elixir.bootlin.com/linux/v6.18-rc4/source/include/linux/cleanup.h#L142-L146
>> ...
>
> The docstring talks about interdependency issues caused by assigning to
> `NULL` which are very rare
It seems that you interpret a linked information source in a special direction.
Several developers are stumbling on challenges also according to software evolution.
Regards,
Markus
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-11-06 17:03 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-04 9:56 [PATCH RESEND v3] checkpatch: add uninitialized pointer with __free attribute check Ally Heev
2025-11-04 13:28 ` Geert Uytterhoeven
2025-11-05 6:27 ` ally heev
2025-11-05 9:18 ` Markus Elfring
2025-11-06 16:29 ` ally heev
2025-11-06 17:03 ` [v3] " Markus Elfring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox