Re: [PATCH 0/3] firewire: core: add KUnit tests for tree building

Takashi Sakamoto <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.kernel.firewire.devel
Message-ID <[email protected]>
On Mon, Aug 10, 2026 at 03:41:16PM +0900, Takashi Sakamoto wrote:
> Hi,
> 
> The core function builds internal node tree by parsing self ID sequence
> at bus reset. Abdun Nihaal points to a memory leak in this process at
> encountering a failure in the middle of self ID sequence enumeration[1].
> This issue is not yet solved, and some unit tests make it easier to work
> for it, mainly to avoid some regressions when refactoring codes.
> 
> This patchset adds some KUnit tests for the purpose. Especially, the
> tests added at the last patch includes actual cases to hit the memory
> leak.
> 
> In my development environment (Ubuntu 26.04, amd64), I can see the
> memory leak by enabling and redirecting some tracepoints events to kmsg
> on the qemu process for KUnit tests execution:
> 
> ```
> $ python3 tools/testing/kunit/kunit.py run \
>   --arch=x86_64 \
>   --cross_compile=x86_64-linux-gnu- \
>   --kunitconfig=drivers/firewire/ \
>   --kconfig_add=CONFIG_FTRACE=y \
>   --kernel_args=tp_printk=1 \
>   --kernel_args=trace_event=kmem:kmalloc,kmem:kfree \
>   --kernel_args=hash_pointers=never \
>   --raw_output=all
> ```
> 
> In the KUnit tests for successful cases, the allocated memory objects
> are released successfully in the test side, like:
> 
> ```
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0b80 bytes_req=48 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0b40 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kfree: call_site=for_each_fw_node+0x17c/0x230 ptr=ffff8e10413f0b40
> kfree: call_site=for_each_fw_node+0x17c/0x230 ptr=ffff8e10413f0b80
> ```
> 
> For the issued cases, we can see no kfree events corresponding to the
> allocated memory objects, like: 
> 
> ```
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0940 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0900 bytes_req=48 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f08c0 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> kmalloc: call_site=build_tree+0x203/0x5d0 ptr=ffff8e10413f0880 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_ATOMIC|__GFP_ZERO node=-1 accounted=false
> firewire_core node_tree_test_invalid_parent_port_count.dummy-device: parent port inconsistency for node 3: parent_count=2
> ...
> ```
> 
> The memory objects remain in the build_tree() function and should be
> released internally. This is the addressing issue.
> 
> [1] https://lore.kernel.org/lkml/[email protected]/
> 
> 
> Takashi Sakamoto (3):
>   firewire: core: add KUnit test skeleton for node tree
>   firewire: core: add KUnit tests for successful tree building
>   firewire: core: add KUnit tests for failure of tree building
> 
>  drivers/firewire/.kunitconfig     |   1 +
>  drivers/firewire/Kconfig          |  15 +
>  drivers/firewire/core-topology.c  |   4 +
>  drivers/firewire/node-tree-test.c | 611 ++++++++++++++++++++++++++++++
>  4 files changed, 631 insertions(+)
>  create mode 100644 drivers/firewire/node-tree-test.c

Applied to for-next branch.


Regards

Takashi Sakamoto
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.