Linux filesystem development
 help / color / mirror / Atom feed
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL 02/14 for v6.17] vfs coredump
Date: Fri, 25 Jul 2025 13:27:16 +0200	[thread overview]
Message-ID: <20250725-vfs-coredump-6c7c0c4edd03@brauner> (raw)
In-Reply-To: <20250725-vfs-617-1bcbd4ae2ea6@brauner>

Hey Linus,

/* Summary */
This contains an extension to the coredump socket and a proper rework
of the coredump code.

- This extends the coredump socket to allow the coredump server to tell
  the kernel how to process individual coredumps. This allows for
  fine-grained coredump management. Userspace can decide to just let the
  kernel write out the coredump, or generate the coredump itself, or
  just reject it.

  * COREDUMP_KERNEL
    The kernel will write the coredump data to the socket.

  * COREDUMP_USERSPACE
    The kernel will not write coredump data but will indicate to the
    parent that a coredump has been generated. This is used when
    userspace generates its own coredumps.

  * COREDUMP_REJECT
    The kernel will skip generating a coredump for this task.

  * COREDUMP_WAIT
    The kernel will prevent the task from exiting until the coredump
    server has shutdown the socket connection.

  The flexible coredump socket can be enabled by using the "@@" prefix
  instead of the single "@" prefix for the regular coredump socket:

    @@/run/systemd/coredump.socket

- Cleanup the coredump code properly while we have to touch it anyway.
  Split out each coredump mode in a separate helper so it's easy to
  grasp what is going on and make the code easier to follow. The core
  coredump function should now be very trivial to follow.

/* Testing */

gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3)

No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

This will have a merge conflict with mainline that can be resolved as follows:

diff --cc tools/testing/selftests/coredump/stackdump_test.c
index 68f8e479ac36,a4ac80bb1003..000000000000
--- a/tools/testing/selftests/coredump/stackdump_test.c
+++ b/tools/testing/selftests/coredump/stackdump_test.c
@@@ -418,59 -430,31 +430,35 @@@ TEST_F(coredump, socket_detect_userspac
                close(ipc_sockets[1]);

                fd_coredump = accept4(fd_server, NULL, NULL, SOCK_CLOEXEC);
-               if (fd_coredump < 0) {
-                       fprintf(stderr, "Failed to accept coredump socket connection\n");
-                       close(fd_server);
-                       _exit(EXIT_FAILURE);
-               }
+               if (fd_coredump < 0)
+                       goto out;

-               fd_peer_pidfd_len = sizeof(fd_peer_pidfd);
-               ret = getsockopt(fd_coredump, SOL_SOCKET, SO_PEERPIDFD,
-                                &fd_peer_pidfd, &fd_peer_pidfd_len);
-               if (ret < 0) {
-                       fprintf(stderr, "%m - Failed to retrieve peer pidfd for coredump socket connection\n");
-                       close(fd_coredump);
-                       close(fd_server);
-                       _exit(EXIT_FAILURE);
-               }
+               fd_peer_pidfd = get_peer_pidfd(fd_coredump);
+               if (fd_peer_pidfd < 0)
+                       goto out;

-               memset(&info, 0, sizeof(info));
-               info.mask = PIDFD_INFO_EXIT | PIDFD_INFO_COREDUMP;
-               ret = ioctl(fd_peer_pidfd, PIDFD_GET_INFO, &info);
-               if (ret < 0) {
-                       fprintf(stderr, "Failed to retrieve pidfd info from peer pidfd for coredump socket connection\n");
-                       close(fd_coredump);
-                       close(fd_server);
-                       close(fd_peer_pidfd);
-                       _exit(EXIT_FAILURE);
-               }
+               if (!get_pidfd_info(fd_peer_pidfd, &info))
+                       goto out;

-               if (!(info.mask & PIDFD_INFO_COREDUMP)) {
-                       fprintf(stderr, "Missing coredump information from coredumping task\n");
-                       close(fd_coredump);
-                       close(fd_server);
-                       close(fd_peer_pidfd);
-                       _exit(EXIT_FAILURE);
-               }
+               if (!(info.mask & PIDFD_INFO_COREDUMP))
+                       goto out;

-               if (info.coredump_mask & PIDFD_COREDUMPED) {
-                       fprintf(stderr, "Received unexpected connection from coredumping task\n");
-                       close(fd_coredump);
-                       close(fd_server);
-                       close(fd_peer_pidfd);
-                       _exit(EXIT_FAILURE);
-               }
+               if (info.coredump_mask & PIDFD_COREDUMPED)
+                       goto out;

 +              ret = read(fd_coredump, &c, 1);
 +
-               close(fd_coredump);
-               close(fd_server);
-               close(fd_peer_pidfd);
-               close(fd_core_file);
-
+               exit_code = EXIT_SUCCESS;
+ out:
+               if (fd_peer_pidfd >= 0)
+                       close(fd_peer_pidfd);
+               if (fd_coredump >= 0)
+                       close(fd_coredump);
+               if (fd_server >= 0)
+                       close(fd_server);
 +              if (ret < 1)
 +                      _exit(EXIT_FAILURE);
-               _exit(EXIT_SUCCESS);
+               _exit(exit_code);
        }
        self->pid_coredump_server = pid_coredump_server;

Merge conflicts with other trees
================================

No known conflicts.

The following changes since commit 19272b37aa4f83ca52bdf9c16d5d81bdd1354494:

  Linux 6.16-rc1 (2025-06-08 13:44:43 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.17-rc1.coredump

for you to fetch changes up to 5c21c5f22d0701ac6c1cafc0e8de4bf42e5c53e5:

  cleanup: add a scoped version of CLASS() (2025-07-11 16:01:07 +0200)

Please consider pulling these changes from the signed vfs-6.17-rc1.coredump tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.17-rc1.coredump

----------------------------------------------------------------
Christian Brauner (33):
      coredump: allow for flexible coredump handling
      selftests/coredump: fix build
      selftests/coredump: cleanup coredump tests
      tools: add coredump.h header
      selftests/coredump: add coredump server selftests
      Merge patch series "coredump: allow for flexible coredump handling"
      coredump: cleanup coredump socket functions
      coredump: rename format_corename()
      coredump: make coredump_parse() return bool
      coredump: fix socket path validation
      coredump: validate that path doesn't exceed UNIX_PATH_MAX
      fs: move name_contains_dotdot() to header
      coredump: don't allow ".." in coredump socket path
      coredump: validate socket path in coredump_parse()
      selftests/coredump: make sure invalid paths are rejected
      coredump: rename do_coredump() to vfs_coredump()
      coredump: split file coredumping into coredump_file()
      coredump: prepare to simplify exit paths
      coredump: move core_pipe_count to global variable
      coredump: split pipe coredumping into coredump_pipe()
      coredump: move pipe specific file check into coredump_pipe()
      coredump: use a single helper for the socket
      coredump: add coredump_write()
      coredump: auto cleanup argv
      coredump: directly return
      cred: add auto cleanup method
      coredump: auto cleanup prepare_creds()
      coredump: add coredump_cleanup()
      coredump: order auto cleanup variables at the top
      coredump: avoid pointless variable
      coredump: add coredump_skip() helper
      Merge patch series "coredump: further cleanups"
      cleanup: add a scoped version of CLASS()

 Documentation/security/credentials.rst             |    2 +-
 .../translations/zh_CN/security/credentials.rst    |    2 +-
 drivers/base/firmware_loader/main.c                |   31 +-
 fs/coredump.c                                      |  868 ++++++----
 include/linux/cleanup.h                            |    8 +
 include/linux/coredump.h                           |    4 +-
 include/linux/cred.h                               |    2 +
 include/linux/fs.h                                 |   16 +
 include/uapi/linux/coredump.h                      |  104 ++
 kernel/signal.c                                    |    2 +-
 tools/include/uapi/linux/coredump.h                |  104 ++
 tools/testing/selftests/coredump/Makefile          |    2 +-
 tools/testing/selftests/coredump/config            |    3 +
 tools/testing/selftests/coredump/stackdump_test.c  | 1689 +++++++++++++++++---
 14 files changed, 2239 insertions(+), 598 deletions(-)
 create mode 100644 include/uapi/linux/coredump.h
 create mode 100644 tools/include/uapi/linux/coredump.h
 create mode 100644 tools/testing/selftests/coredump/config

  parent reply	other threads:[~2025-07-25 11:27 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-25 11:27 [GIT PULL 00/14 for v6.17] vfs 6.17 Christian Brauner
2025-07-25 11:27 ` [GIT PULL 05/14 for v6.17] vfs async dir Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 09/14 for v6.17] vfs bpf Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-29 18:15   ` Alexei Starovoitov
2025-07-31  8:27     ` Christian Brauner
2025-07-31 21:57       ` Alexei Starovoitov
2025-08-04 14:24         ` Christian Brauner
2025-07-25 11:27 ` Christian Brauner [this message]
2025-07-28 18:57   ` [GIT PULL 02/14 for v6.17] vfs coredump Linus Torvalds
2025-07-31  9:37     ` Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 06/14 for v6.17] vfs fallocate Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 12/14 for v6.17] vfs fileattr Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 11/14 for v6.17] vfs integrity Christian Brauner
2025-07-28  1:29   ` Hugh Dickins
2025-07-28 22:21     ` Linus Torvalds
2025-07-29  7:49       ` Christoph Hellwig
2025-07-29  8:39         ` Linus Torvalds
2025-07-31  8:00           ` Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 14/14 for v6.17] vfs iomap Christian Brauner
2025-07-27 13:10   ` Sasha Levin
2025-07-28 16:39     ` Joanne Koong
2025-07-31  8:29       ` Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 01/14 for v6.17] vfs misc Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 07/14 for v6.17] vfs mmap Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 04/14 for v6.17] namespace updates Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 03/14 for v6.17] overlayfs Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 08/14 for v6.17] vfs pidfs Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 10/14 for v6.17] vfs rust Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-25 11:27 ` [GIT PULL 13/14 for v6.17] vfs super Christian Brauner
2025-07-28 23:40   ` pr-tracker-bot
2025-07-31  9:40 ` [GIT PULL 00/14 for v6.17] vfs 6.17 Christian Brauner

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=20250725-vfs-coredump-6c7c0c4edd03@brauner \
    --to=brauner@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.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