public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Luca Boccassi <luca.boccassi@gmail.com>,
	Oleg Nesterov <oleg@redhat.com>,
	Christian Brauner <brauner@kernel.org>
Subject: [PATCH 6.14 47/73] coredump: hand a pidfd to the usermode coredump helper
Date: Mon,  2 Jun 2025 15:47:33 +0200	[thread overview]
Message-ID: <20250602134243.556436871@linuxfoundation.org> (raw)
In-Reply-To: <20250602134241.673490006@linuxfoundation.org>

6.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Christian Brauner <brauner@kernel.org>

commit b5325b2a270fcaf7b2a9a0f23d422ca8a5a8bdea upstream.

Give userspace a way to instruct the kernel to install a pidfd into the
usermode helper process. This makes coredump handling a lot more
reliable for userspace. In parallel with this commit we already have
systemd adding support for this in [1].

We create a pidfs file for the coredumping process when we process the
corename pattern. When the usermode helper process is forked we then
install the pidfs file as file descriptor three into the usermode
helpers file descriptor table so it's available to the exec'd program.

Since usermode helpers are either children of the system_unbound_wq
workqueue or kthreadd we know that the file descriptor table is empty
and can thus always use three as the file descriptor number.

Note, that we'll install a pidfd for the thread-group leader even if a
subthread is calling do_coredump(). We know that task linkage hasn't
been removed due to delay_group_leader() and even if this @current isn't
the actual thread-group leader we know that the thread-group leader
cannot be reaped until @current has exited.

[brauner: This is a backport for the v6.12 series. The upstream kernel
has changed pidfs_alloc_file() to set O_RDWR implicitly instead of
forcing callers to set it. Let's minimize the churn and just let the
coredump umh handler raise O_RDWR.]

Link: https://github.com/systemd/systemd/pull/37125 [1]
Link: https://lore.kernel.org/20250414-work-coredump-v2-3-685bf231f828@kernel.org
Tested-by: Luca Boccassi <luca.boccassi@gmail.com>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/coredump.c            |   56 +++++++++++++++++++++++++++++++++++++++++++----
 include/linux/coredump.h |    1 
 2 files changed, 53 insertions(+), 4 deletions(-)

--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -43,6 +43,8 @@
 #include <linux/timekeeping.h>
 #include <linux/sysctl.h>
 #include <linux/elf.h>
+#include <linux/pidfs.h>
+#include <uapi/linux/pidfd.h>
 
 #include <linux/uaccess.h>
 #include <asm/mmu_context.h>
@@ -60,6 +62,12 @@ static void free_vma_snapshot(struct cor
 #define CORE_FILE_NOTE_SIZE_DEFAULT (4*1024*1024)
 /* Define a reasonable max cap */
 #define CORE_FILE_NOTE_SIZE_MAX (16*1024*1024)
+/*
+ * File descriptor number for the pidfd for the thread-group leader of
+ * the coredumping task installed into the usermode helper's file
+ * descriptor table.
+ */
+#define COREDUMP_PIDFD_NUMBER 3
 
 static int core_uses_pid;
 static unsigned int core_pipe_limit;
@@ -339,6 +347,27 @@ static int format_corename(struct core_n
 			case 'C':
 				err = cn_printf(cn, "%d", cprm->cpu);
 				break;
+			/* pidfd number */
+			case 'F': {
+				/*
+				 * Installing a pidfd only makes sense if
+				 * we actually spawn a usermode helper.
+				 */
+				if (!ispipe)
+					break;
+
+				/*
+				 * Note that we'll install a pidfd for the
+				 * thread-group leader. We know that task
+				 * linkage hasn't been removed yet and even if
+				 * this @current isn't the actual thread-group
+				 * leader we know that the thread-group leader
+				 * cannot be reaped until @current has exited.
+				 */
+				cprm->pid = task_tgid(current);
+				err = cn_printf(cn, "%d", COREDUMP_PIDFD_NUMBER);
+				break;
+			}
 			default:
 				break;
 			}
@@ -493,7 +522,7 @@ static void wait_for_dump_helpers(struct
 }
 
 /*
- * umh_pipe_setup
+ * umh_coredump_setup
  * helper function to customize the process used
  * to collect the core in userspace.  Specifically
  * it sets up a pipe and installs it as fd 0 (stdin)
@@ -503,12 +532,31 @@ static void wait_for_dump_helpers(struct
  * is a special value that we use to trap recursive
  * core dumps
  */
-static int umh_pipe_setup(struct subprocess_info *info, struct cred *new)
+static int umh_coredump_setup(struct subprocess_info *info, struct cred *new)
 {
 	struct file *files[2];
 	struct coredump_params *cp = (struct coredump_params *)info->data;
 	int err;
 
+	if (cp->pid) {
+		struct file *pidfs_file __free(fput) = NULL;
+
+		pidfs_file = pidfs_alloc_file(cp->pid, O_RDWR);
+		if (IS_ERR(pidfs_file))
+			return PTR_ERR(pidfs_file);
+
+		/*
+		 * Usermode helpers are childen of either
+		 * system_unbound_wq or of kthreadd. So we know that
+		 * we're starting off with a clean file descriptor
+		 * table. So we should always be able to use
+		 * COREDUMP_PIDFD_NUMBER as our file descriptor value.
+		 */
+		err = replace_fd(COREDUMP_PIDFD_NUMBER, pidfs_file, 0);
+		if (err < 0)
+			return err;
+	}
+
 	err = create_pipe_files(files, 0);
 	if (err)
 		return err;
@@ -598,7 +646,7 @@ void do_coredump(const kernel_siginfo_t
 		}
 
 		if (cprm.limit == 1) {
-			/* See umh_pipe_setup() which sets RLIMIT_CORE = 1.
+			/* See umh_coredump_setup() which sets RLIMIT_CORE = 1.
 			 *
 			 * Normally core limits are irrelevant to pipes, since
 			 * we're not writing to the file system, but we use
@@ -637,7 +685,7 @@ void do_coredump(const kernel_siginfo_t
 		retval = -ENOMEM;
 		sub_info = call_usermodehelper_setup(helper_argv[0],
 						helper_argv, NULL, GFP_KERNEL,
-						umh_pipe_setup, NULL, &cprm);
+						umh_coredump_setup, NULL, &cprm);
 		if (sub_info)
 			retval = call_usermodehelper_exec(sub_info,
 							  UMH_WAIT_EXEC);
--- a/include/linux/coredump.h
+++ b/include/linux/coredump.h
@@ -28,6 +28,7 @@ struct coredump_params {
 	int vma_count;
 	size_t vma_data_size;
 	struct core_vma_metadata *vma_meta;
+	struct pid *pid;
 };
 
 extern unsigned int core_file_note_size_limit;



  parent reply	other threads:[~2025-06-02 13:58 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-02 13:46 [PATCH 6.14 00/73] 6.14.10-rc1 review Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 01/73] can: kvaser_pciefd: Force IRQ edge in case of nested IRQ Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 02/73] arm64: dts: socfpga: agilex5: fix gpio0 address Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 03/73] arm64: dts: rockchip: fix internal USB hub instability on RK3399 Puma Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 04/73] arm64: dts: qcom: ipq9574: Add missing properties for cryptobam Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 05/73] arm64: dts: qcom: sa8775p: " Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 06/73] arm64: dts: qcom: sa8775p: Remove extra entries from the iommus property Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 07/73] arm64: dts: qcom: sa8775p: Remove cdsp compute-cb@10 Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 08/73] arm64: dts: qcom: sm8350: Fix typo in pil_camera_mem node Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 09/73] arm64: dts: qcom: sm8450: Add missing properties for cryptobam Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 10/73] arm64: dts: qcom: sm8550: " Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 11/73] arm64: dts: qcom: sm8650: " Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 12/73] arm64: dts: qcom: x1e001de-devkit: Fix vreg_l2j_1p2 voltage Greg Kroah-Hartman
2025-06-02 13:46 ` [PATCH 6.14 13/73] arm64: dts: qcom: x1e001de-devkit: mark l12b and l15b always-on Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 14/73] arm64: dts: qcom: x1e80100-asus-vivobook-s15: Fix vreg_l2j_1p2 voltage Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 15/73] arm64: dts: qcom: x1e80100-dell-xps13-9345: mark l12b and l15b always-on Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 16/73] arm64: dts: qcom: x1e80100-hp-omnibook-x14: Enable SMB2360 0 and 1 Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 17/73] arm64: dts: qcom: x1e80100-hp-omnibook-x14: Fix vreg_l2j_1p2 voltage Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 18/73] arm64: dts: qcom: x1e80100-hp-x14: mark l12b and l15b always-on Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 19/73] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Fix vreg_l2j_1p2 voltage Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 20/73] arm64: dts: qcom: x1e80100-qcp: " Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 21/73] arm64: dts: qcom: x1e80100-qcp: mark l12b and l15b always-on Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 22/73] arm64: dts: qcom: x1e80100-yoga-slim7x: " Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 23/73] arm64: dts: qcom: x1e80100: Fix video thermal zone Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 24/73] arm64: dts: qcom: x1e80100: Apply consistent critical thermal shutdown Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 25/73] arm64: dts: qcom: x1e80100: Add GPU cooling Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 26/73] arm64: dts: qcom: x1e80100: Fix PCIe 3rd controller DBI size Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 27/73] arm64: dts: ti: k3-am62-main: Set eMMC clock parent to default Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 28/73] arm64: dts: ti: k3-am62a-main: " Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 29/73] arm64: dts: ti: k3-am62p-j722s-common-main: " Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 30/73] arm64: dts: ti: k3-am62x: Remove clock-names property from IMX219 overlay Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 31/73] arm64: dts: ti: k3-am62x: Rename I2C switch to I2C mux in " Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 32/73] arm64: dts: ti: k3-am62x: Rename I2C switch to I2C mux in OV5640 overlay Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 33/73] arm64: dts: ti: k3-am65-main: Add missing taps to sdhci0 Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 34/73] arm64: dts: ti: k3-am68-sk: Fix regulator hierarchy Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 35/73] arm64: dts: ti: k3-j721e-sk: Add DT nodes for power regulators Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 36/73] arm64: dts: ti: k3-j721e-sk: Remove clock-names property from IMX219 overlay Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 37/73] arm64: dts: ti: k3-j721e-sk: Add requiried voltage supplies for IMX219 Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 38/73] arm64: dts: ti: k3-j722s-evm: Enable "serdes_wiz0" and "serdes_wiz1" Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 39/73] arm64: dts: ti: k3-j722s-main: Disable " Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 40/73] arm64: dts: ti: k3-j784s4-j742s2-main-common: Fix length of serdes_ln_ctrl Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 41/73] net_sched: hfsc: Address reentrant enqueue adding class to eltree twice Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 42/73] perf/arm-cmn: Fix REQ2/SNP2 mixup Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 43/73] perf/arm-cmn: Initialise cmn->cpu earlier Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 44/73] perf/arm-cmn: Add CMN S3 ACPI binding Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 45/73] iommu: Handle yet another race around registration Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 46/73] coredump: fix error handling for replace_fd() Greg Kroah-Hartman
2025-06-02 13:47 ` Greg Kroah-Hartman [this message]
2025-06-02 13:47 ` [PATCH 6.14 48/73] dmaengine: idxd: cdev: Fix uninitialized use of sva in idxd_cdev_open Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 49/73] HID: amd_sfh: Avoid clearing reports for SRA sensor Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 50/73] HID: quirks: Add ADATA XPG alpha wireless mouse support Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 51/73] nfs: dont share pNFS DS connections between net namespaces Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 52/73] platform/x86: thinkpad_acpi: Support also NEC Lavie X1475JAS Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 53/73] kbuild: Require pahole <v1.28 or >v1.29 with GENDWARFKSYMS on X86 Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 54/73] um: let make clean properly clean underlying SUBARCH as well Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 55/73] nvmet: pci-epf: cleanup nvmet_pci_epf_raise_irq() Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 56/73] gpio: virtuser: fix potential out-of-bound write Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 57/73] drm/amd/display: fix link_set_dpms_off multi-display MST corner case Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 58/73] drm/amd/display: check stream id dml21 wrapper to get plane_id Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 59/73] nvme: multipath: enable BLK_FEAT_ATOMIC_WRITES for multipathing Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 60/73] phy: starfive: jh7110-usb: Fix USB 2.0 host occasional detection failure Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 61/73] phy: phy-rockchip-samsung-hdptx: Fix PHY PLL output 50.25MHz error Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 62/73] spi: spi-sun4i: fix early activation Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 63/73] nvme: all namespaces in a subsystem must adhere to a common atomic write size Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 64/73] nvme-pci: add NVME_QUIRK_NO_DEEPEST_PS quirk for SOLIDIGM P44 Pro Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 65/73] drm/xe/xe2hpg: Add Wa_22021007897 Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 66/73] drm/xe: Save the gt pointer in lrc and drop the tile Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 67/73] char: tpm: tpm-buf: Add sanity check fallback in read helpers Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 68/73] NFS: Avoid flushing data while holding directory locks in nfs_rename() Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 69/73] platform/x86: fujitsu-laptop: Support Lifebook S2110 hotkeys Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 70/73] ALSA: hda/realtek - restore auto-mute mode for Dell Chrome platform Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 71/73] platform/x86: thinkpad_acpi: Ignore battery threshold change event notification Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 72/73] net: ethernet: ti: am65-cpsw: Lower random mac address error print to info Greg Kroah-Hartman
2025-06-02 13:47 ` [PATCH 6.14 73/73] ksmbd: use list_first_entry_or_null for opinfo_get_list() Greg Kroah-Hartman
2025-06-02 17:52 ` [PATCH 6.14 00/73] 6.14.10-rc1 review Florian Fainelli
2025-06-02 18:46 ` Peter Schneider
2025-06-02 20:11 ` Ronald Warsow
2025-06-03  7:29 ` Ron Economos
2025-06-03  9:19 ` Mark Brown
2025-06-03 12:30 ` Naresh Kamboju
2025-06-03 17:10 ` Shuah Khan

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=20250602134243.556436871@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=brauner@kernel.org \
    --cc=luca.boccassi@gmail.com \
    --cc=oleg@redhat.com \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox