From: Markus Elfring <Markus.Elfring@web.de>
To: Chad Aldreda <ca@modelmiser.com>, cocci@inria.fr, tools@kernel.org
Cc: kernel-janitors@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
Julia Lawall <julia.lawall@inria.fr>,
Nicolas Palix <nicolas.palix@imag.fr>
Subject: Re: [PATCH] coccinelle: api: add a checker for device nodes in devm_ memory
Date: Sat, 7 Nov 2026 11:55:24 +0100 [thread overview]
Message-ID: <2148bc74-0558-4eeb-a66a-e903995df05f@web.de> (raw)
In-Reply-To: <20261106193517.3267013-2-ca@modelmiser.com>
Thanks for your contribution.
How do you think about further collateral evolution according to the presented
source code analysis approach?
I suggest to use the word “devm” (without a trailing underscore) in the summary phrase
(and subsequent messages).
You propose something for device nodes.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/driver-api/driver-model/devres.rst?h=v7.4-rc1#n9
> A struct cdev, struct miscdevice, struct video_device or struct
> v4l2_device embedded in memory from devm_kzalloc() and friends is freed
> when the driver unbinds, but a file that user space holds open on the
> node outlives the unbind. Its later file operations are a use-after-free
> when they use that memory, and for a cdev or video_device so is its
> close(), where the core touches the object and the v4l2_device the
> video_device points to.
…
How many data structures should be touched after a close() call?
Are there more system dependencies to reconsider?
> +@initialize:python@
> +@@
> +seen = set()
Such a programming interface can look appealing.
https://gitlab.inria.fr/coccinelle/coccinelle/-/blob/ea58efe355dea2184217954248a01f5dc5995d24/docs/manual/cocci_syntax.tex#L697-700
https://docs.python.org/3/builtins/stdtypes.html#set
But further constraints should occasionally be taken better into account.
I guess you would like to benefit from parallel data processing with multiple
processor cores.
> +@alloc depends on org || report exists@
> +expression x, e, e2;
> +identifier fn =~ "^devm_k[mzcr]";
> +position p, q;
> +@@
> +
> +x = fn@p(...);
> +... when != x = e
> +(
> +misc_register@q(\(x\|&<+... x ...+>\))
Would such an SmPL disjunction be redundant for the passed argument expression?
> +|
> +cdev_add@q(\(x\|&<+... x ...+>\), ...)
> +|
> +cdev_device_add@q(\(x\|&<+... x ...+>\), ...)
> +|
> +video_register_device@q(\(x\|&<+... x ...+>\), ...)
> +|
> +video_register_device_no_warn@q(\(x\|&<+... x ...+>\), ...)
> +|
> +__video_register_device@q(\(x\|&<+... x ...+>\), ...)
> +|
> +v4l2_device_register@q(e2, \(x\|&<+... x ...+>\))
> +)
Were these function names ordered by their usage probability?
…
> +@script:python depends on report@
> +p << alloc.p;
> +q << alloc.q;
> +@@
> +if (p[0].file, p[0].line, p[0].column) not in seen:
> + seen.add((p[0].file, p[0].line, p[0].column))
…
Can such a control flow pattern still be refined?
Would a temporary variable become helpful here?
Regards,
Markus
WARNING: multiple messages have this Message-ID (diff)
From: Markus Elfring <Markus.Elfring@web.de>
To: Chad Aldreda <ca@modelmiser.com>, cocci@inria.fr, tools@kernel.org
Cc: kernel-janitors@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
Julia Lawall <julia.lawall@inria.fr>,
Nicolas Palix <nicolas.palix@imag.fr>
Subject: Re: [cocci] [PATCH] coccinelle: api: add a checker for device nodes in devm_ memory
Date: Sat, 7 Nov 2026 11:55:24 +0100 [thread overview]
Message-ID: <2148bc74-0558-4eeb-a66a-e903995df05f@web.de> (raw)
In-Reply-To: <20261106193517.3267013-2-ca@modelmiser.com>
Thanks for your contribution.
How do you think about further collateral evolution according to the presented
source code analysis approach?
I suggest to use the word “devm” (without a trailing underscore) in the summary phrase
(and subsequent messages).
You propose something for device nodes.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/driver-api/driver-model/devres.rst?h=v7.4-rc1#n9
> A struct cdev, struct miscdevice, struct video_device or struct
> v4l2_device embedded in memory from devm_kzalloc() and friends is freed
> when the driver unbinds, but a file that user space holds open on the
> node outlives the unbind. Its later file operations are a use-after-free
> when they use that memory, and for a cdev or video_device so is its
> close(), where the core touches the object and the v4l2_device the
> video_device points to.
…
How many data structures should be touched after a close() call?
Are there more system dependencies to reconsider?
> +@initialize:python@
> +@@
> +seen = set()
Such a programming interface can look appealing.
https://gitlab.inria.fr/coccinelle/coccinelle/-/blob/ea58efe355dea2184217954248a01f5dc5995d24/docs/manual/cocci_syntax.tex#L697-700
https://docs.python.org/3/builtins/stdtypes.html#set
But further constraints should occasionally be taken better into account.
I guess you would like to benefit from parallel data processing with multiple
processor cores.
> +@alloc depends on org || report exists@
> +expression x, e, e2;
> +identifier fn =~ "^devm_k[mzcr]";
> +position p, q;
> +@@
> +
> +x = fn@p(...);
> +... when != x = e
> +(
> +misc_register@q(\(x\|&<+... x ...+>\))
Would such an SmPL disjunction be redundant for the passed argument expression?
> +|
> +cdev_add@q(\(x\|&<+... x ...+>\), ...)
> +|
> +cdev_device_add@q(\(x\|&<+... x ...+>\), ...)
> +|
> +video_register_device@q(\(x\|&<+... x ...+>\), ...)
> +|
> +video_register_device_no_warn@q(\(x\|&<+... x ...+>\), ...)
> +|
> +__video_register_device@q(\(x\|&<+... x ...+>\), ...)
> +|
> +v4l2_device_register@q(e2, \(x\|&<+... x ...+>\))
> +)
Were these function names ordered by their usage probability?
…
> +@script:python depends on report@
> +p << alloc.p;
> +q << alloc.q;
> +@@
> +if (p[0].file, p[0].line, p[0].column) not in seen:
> + seen.add((p[0].file, p[0].line, p[0].column))
…
Can such a control flow pattern still be refined?
Would a temporary variable become helpful here?
Regards,
Markus
next prev parent reply other threads:[~2026-11-07 10:55 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 19:35 [PATCH] coccinelle: api: add a checker for device nodes in devm_ memory Chad Aldreda
2026-11-06 19:35 ` [cocci] " Chad Aldreda
2026-11-06 20:20 ` Julia Lawall
2026-11-06 20:20 ` Julia Lawall
2026-11-06 21:07 ` Chad Aldreda
2026-11-06 21:07 ` [cocci] " Chad Aldreda
2026-11-07 9:10 ` Markus Elfring
2026-11-07 10:55 ` Markus Elfring [this message]
2026-11-07 10:55 ` Markus Elfring
2026-11-07 13:40 ` Markus Elfring
2026-11-07 14:37 ` Markus Elfring
2026-11-08 20:10 ` Julia Lawall
2026-11-08 20:10 ` [cocci] " Julia Lawall
2026-11-08 20:36 ` Chad Aldreda
2026-11-08 20:36 ` [cocci] " Chad Aldreda
2026-11-10 17:56 ` [PATCH v2] coccinelle: api: add a checker for device nodes in devm memory Chad Aldreda
2026-11-10 17:56 ` [cocci] " Chad Aldreda
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2148bc74-0558-4eeb-a66a-e903995df05f@web.de \
--to=markus.elfring@web.de \
--cc=ca@modelmiser.com \
--cc=cocci@inria.fr \
--cc=julia.lawall@inria.fr \
--cc=kernel-janitors@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.palix@imag.fr \
--cc=tools@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.