From: sashiko-bot@kernel.org
To: "Jens Remus" <jremus@linux.ibm.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH v15 18/20] unwind_user/sframe: Duplicate registered .sframe section data on clone/fork
Date: Wed, 20 May 2026 17:01:12 +0000 [thread overview]
Message-ID: <20260520170112.A8AA41F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260520154004.3845823-19-jremus@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Mixing goto-based error handling with guard() scope-based cleanup in sframe_dup_mm().
- [Low] Redundant #ifdef blocks around sframe functions in dup_mmap().
--
commit 06e12a491c0dc4cc93fac24f7de9fe0b02b9a9e0
Author: Jens Remus <jremus@linux.ibm.com>
Subject: unwind_user/sframe: Duplicate registered .sframe section data on clone/fork
When duplicating a process' virtual memory mappings also duplicate all
of its registered .sframe sections stored in the per-mm maple tree to
enable stacktracing using sframe of the child process.
> diff --git a/kernel/unwind/sframe.c b/kernel/unwind/sframe.c
> index ec8318977a2ef..0661090dd5bcd 100644
> --- a/kernel/unwind/sframe.c
> +++ b/kernel/unwind/sframe.c
[ ... ]
> @@ -886,6 +886,54 @@ int sframe_remove_section(unsigned long sframe_start)
[ ... ]
> +int sframe_dup_mm(struct mm_struct *mm, struct mm_struct *oldmm)
> +{
> + struct sframe_section *sec, *oldsec;
> + unsigned long index = 0;
> + int ret;
> +
> + guard(srcu)(&sframe_srcu);
> +
> + mt_for_each(&oldmm->sframe_mt, oldsec, index, ULONG_MAX) {
> + sec = kzalloc(sizeof(*sec), GFP_KERNEL_ACCOUNT);
> + if (!sec)
> + return -ENOMEM;
> +
> + __sframe_dup_section(sec, oldsec);
> +
> + ret = mtree_insert_range(&mm->sframe_mt,
> + sec->text_start,
> + sec->text_end - 1,
> + sec, GFP_KERNEL_ACCOUNT);
> + if (ret)
> + goto err_free;
[Severity: Medium]
Is it intentional to mix goto-based error handling with scope-based cleanup
in the same function?
The cleanup subsystem guidelines recommend against mixing goto labels and
guard declarations to prevent confusing ownership semantics and lifecycle
bugs. Would it be better to drop the err_free label entirely and explicitly
call free_section(sec) followed by returning ret directly inside this block?
> + }
> +
> + return 0;
> +
> +err_free:
> + free_section(sec);
> + return ret;
> +}
[ ... ]
> diff --git a/mm/mmap.c b/mm/mmap.c
> index 2311ae7c2ff45..d5aa8c54f8c1c 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
[ ... ]
> @@ -1846,6 +1847,11 @@ __latent_entropy int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
> }
> /* a new mm has just been created */
> retval = arch_dup_mmap(oldmm, mm);
> +#ifdef CONFIG_HAVE_UNWIND_USER_SFRAME
> + if (!retval) {
> + retval = sframe_dup_mm(mm, oldmm);
> + }
> +#endif
[Severity: Low]
This isn't a bug, but are these preprocessor guards necessary?
Since include/linux/sframe.h already provides static inline dummy versions
of sframe_dup_mm() and sframe_free_mm() when CONFIG_HAVE_UNWIND_USER_SFRAME
is disabled, these conditional blocks could potentially be removed to keep
the C source code cleaner.
> loop_out:
> vma_iter_free(&vmi);
> if (!retval) {
[ ... ]
> @@ -1893,6 +1899,9 @@ __latent_entropy int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
> vm_unacct_memory(charge);
> }
> __mt_destroy(&mm->mm_mt);
> +#ifdef CONFIG_HAVE_UNWIND_USER_SFRAME
> + sframe_free_mm(mm);
> +#endif
[Severity: Low]
This isn't a bug, but similarly, could this block be dropped since the dummy
stub handles the disabled case without needing explicit conditionals?
> /*
> * The mm_struct is going to exit, but the locks will be dropped
> * first. Set the mm_struct as unstable is advisable as it is
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260520154004.3845823-1-jremus@linux.ibm.com?part=18
next prev parent reply other threads:[~2026-05-20 17:01 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-20 15:39 [PATCH v15 00/20] unwind_deferred: Implement sframe handling Jens Remus
2026-05-20 15:39 ` [PATCH v15 01/20] unwind_user: Add generic and arch-specific headers to MAINTAINERS Jens Remus
2026-05-20 15:39 ` [PATCH v15 02/20] unwind_user/sframe: Add support for reading .sframe headers Jens Remus
2026-05-20 16:02 ` sashiko-bot
2026-05-21 7:58 ` Jens Remus
2026-05-20 15:39 ` [PATCH v15 03/20] unwind_user/sframe: Store .sframe section data in per-mm maple tree Jens Remus
2026-05-20 16:29 ` sashiko-bot
2026-05-21 9:39 ` Jens Remus
2026-05-21 16:08 ` Steven Rostedt
2026-05-20 15:39 ` [PATCH v15 04/20] x86/uaccess: Add unsafe_copy_from_user() implementation Jens Remus
2026-05-20 16:13 ` sashiko-bot
2026-05-20 15:39 ` [PATCH v15 05/20] unwind_user/sframe: Add support for reading .sframe contents Jens Remus
2026-05-20 16:33 ` sashiko-bot
2026-05-21 9:40 ` Jens Remus
2026-05-20 15:39 ` [PATCH v15 06/20] unwind_user/sframe: Detect .sframe sections in executables Jens Remus
2026-05-20 15:39 ` [PATCH v15 07/20] unwind_user/sframe: Wire up unwind_user to sframe Jens Remus
2026-05-20 16:23 ` sashiko-bot
2026-05-21 10:44 ` Jens Remus
2026-05-20 15:39 ` [PATCH v15 08/20] unwind_user: Stop when reaching an outermost frame Jens Remus
2026-05-20 16:01 ` sashiko-bot
2026-05-21 10:45 ` Jens Remus
2026-05-20 15:39 ` [PATCH v15 09/20] unwind_user/sframe: Add support for outermost frame indication Jens Remus
2026-05-20 16:01 ` sashiko-bot
2026-05-21 10:46 ` Jens Remus
2026-05-20 15:39 ` [PATCH v15 10/20] unwind_user/sframe: Remove .sframe section on detected corruption Jens Remus
2026-05-20 16:26 ` sashiko-bot
2026-05-20 15:39 ` [PATCH v15 11/20] unwind_user/sframe: Show file name in debug output Jens Remus
2026-05-20 16:14 ` sashiko-bot
2026-05-21 10:55 ` Jens Remus
2026-05-21 16:20 ` Steven Rostedt
2026-05-20 15:39 ` [PATCH v15 12/20] unwind_user/sframe: Add .sframe validation option Jens Remus
2026-05-20 16:15 ` sashiko-bot
2026-05-21 12:51 ` Jens Remus
2026-05-20 15:39 ` [PATCH v15 13/20] unwind_user: Enable archs that pass RA in a register Jens Remus
2026-05-20 16:21 ` sashiko-bot
2026-05-21 13:00 ` Jens Remus
2026-05-20 15:39 ` [PATCH v15 14/20] unwind_user: Flexible FP/RA recovery rules Jens Remus
2026-05-20 15:39 ` [PATCH v15 15/20] unwind_user: Flexible CFA " Jens Remus
2026-05-20 16:22 ` sashiko-bot
2026-05-21 11:33 ` Jens Remus
2026-05-20 15:40 ` [PATCH v15 16/20] unwind_user/sframe: Add support for SFrame V3 flexible FDEs Jens Remus
2026-05-20 17:04 ` sashiko-bot
2026-05-21 11:58 ` Jens Remus
2026-05-20 15:40 ` [PATCH v15 17/20] unwind_user/sframe: Separate reading of FRE from reading of FRE data words Jens Remus
2026-05-20 16:48 ` sashiko-bot
2026-05-20 15:40 ` [PATCH v15 18/20] unwind_user/sframe: Duplicate registered .sframe section data on clone/fork Jens Remus
2026-05-20 17:01 ` sashiko-bot [this message]
2026-05-21 12:05 ` Jens Remus
2026-05-20 15:40 ` [PATCH v15 19/20] unwind_user/sframe/x86: Enable sframe unwinding on x86 Jens Remus
2026-05-20 15:40 ` [PATCH v15 20/20] unwind_user/sframe: Add prctl() interface for registering .sframe sections Jens Remus
2026-05-20 16:52 ` sashiko-bot
2026-05-21 12:08 ` Jens Remus
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=20260520170112.A8AA41F00893@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=jremus@linux.ibm.com \
--cc=sashiko-reviews@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox