[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <14a56a50d5d8803bc822ae99fbe527755323623b.camel@gmail.com>
Date: Sat, 25 Oct 2025 11:47:09 +0530
From: ally heev <allyheev@...il.com>
To: Joe Perches <joe@...ches.com>, Dwaipayan Ray <dwaipayanray1@...il.com>,
Lukas Bulwahn <lukas.bulwahn@...il.com>, Jonathan Corbet <corbet@....net>,
Andy Whitcroft <apw@...onical.com>
Cc: workflows@...r.kernel.org, linux-doc@...r.kernel.org,
linux-kernel@...r.kernel.org, Dan Carpenter <dan.carpenter@...aro.org>,
David Hunter <david.hunter.linux@...il.com>, Shuah Khan
<skhan@...uxfoundation.org>, Viresh Kumar <vireshk@...nel.org>, Nishanth
Menon <nm@...com>, Stephen Boyd <sboyd@...nel.org>, linux-pm
<linux-pm@...r.kernel.org>, dan.j.williams@...el.com
Subject: Re: [PATCH v2 2/2] add check for pointers with __free attribute
initialized to NULL
On Fri, 2025-10-24 at 11:01 -0700, Joe Perches wrote:
[..]
> > @@ -7728,6 +7728,12 @@ sub process {
> > ERROR("UNINITIALIZED_PTR_WITH_FREE",
> > "pointer '$1' with __free attribute should be initialized\n" . $herecurr);
> > }
> > +
> > +# check for pointers with __free attribute initialized to NULL
> > + while ($line =~ /\*\s*($Ident)\s+$FreeAttribute\s*=\s*NULL\b/g) {
> > + WARN("NULL_INITIALIZED_PTR_WITH_FREE",
> > + "pointer '$1' with __free attribute should be initialized to a non-NULL address\n" . $herecurr);
> > + }
> > }
>
> I think this a poor idea as almost all the instances where this
> initialization is done are fine.
>
> And there are a lot of them.
>
> $ git grep -P '\b__free\b.*=\s*NULL\s*;' | wc -l
> 490
Sorry for not checking this earlier. I looked at quite a few of them
none were real issues
>
> And what about these uses that depend on struct path members
> .mnt and .dentry being NULL.
>
> $ git grep -P '\b__free\b.*=\s*\{.*\}\s*;'
> fs/configfs/symlink.c: struct path path __free(path_put) = {};
> fs/fhandle.c: struct path path __free(path_put) = {};
> fs/file_attr.c: struct path filepath __free(path_put) = {};
> fs/file_attr.c: struct path filepath __free(path_put) = {};
> fs/namei.c: struct path parent_path __free(path_put) = {};
> fs/namei.c: struct path parent_path __free(path_put) = {};
> fs/namespace.c: struct path old_path __free(path_put) = {};
> fs/namespace.c: struct path path __free(path_put) = {};
> fs/namespace.c: struct path old_path __free(path_put) = {};
> fs/namespace.c: struct path path __free(path_put) = {};
> fs/namespace.c: struct path to_path __free(path_put) = {};
> fs/namespace.c: struct path from_path __free(path_put) = {};
> fs/namespace.c: struct path new __free(path_put) = {};
> fs/namespace.c: struct path old __free(path_put) = {};
> fs/namespace.c: struct path root __free(path_put) = {};
> fs/namespace.c: struct klistmount kls __free(klistmount_free) = {};
> fs/namespace.c: struct path fs_root __free(path_put) = {};
> fs/nsfs.c: struct path path __free(path_put) = {};
> fs/nsfs.c: struct path path __free(path_put) = {};
> fs/nsfs.c: struct path path __free(path_put) = {};
> fs/overlayfs/params.c: struct path layer_path __free(path_put) = {};
> fs/overlayfs/params.c: struct path path __free(path_put) = {};
> fs/pidfs.c: struct path path __free(path_put) = {};
> include/linux/path.h: * struct path path __free(path_put) = {};
> kernel/acct.c: struct path internal __free(path_put) = {}; // in that order
> kernel/trace/trace_uprobe.c: struct path path __free(path_put) = {};
These are not valid issues too
Powered by blists - more mailing lists