]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
coredump: add coredump_cleanup()
authorChristian Brauner <brauner@kernel.org>
Thu, 12 Jun 2025 13:25:35 +0000 (15:25 +0200)
committerChristian Brauner <brauner@kernel.org>
Mon, 7 Jul 2025 10:24:51 +0000 (12:24 +0200)
Link: https://lore.kernel.org/20250612-work-coredump-massage-v1-21-315c0c34ba94@kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/coredump.c

index e9c8696283f6eb45f2f9a0e989123622ab22a852..9c028ef087d4ce9c9fc07dbf70cde3eeaea02e3a 100644 (file)
@@ -1067,6 +1067,18 @@ static bool coredump_write(struct core_name *cn,
        return true;
 }
 
+static void coredump_cleanup(struct core_name *cn, struct coredump_params *cprm)
+{
+       if (cprm->file)
+               filp_close(cprm->file, NULL);
+       if (cn->core_pipe_limit) {
+               VFS_WARN_ON_ONCE(cn->core_type != COREDUMP_PIPE);
+               atomic_dec(&core_pipe_count);
+       }
+       kfree(cn->corename);
+       coredump_finish(cn->core_dumped);
+}
+
 void vfs_coredump(const kernel_siginfo_t *siginfo)
 {
        struct core_state core_state;
@@ -1119,7 +1131,7 @@ void vfs_coredump(const kernel_siginfo_t *siginfo)
 
        if (!coredump_parse(&cn, &cprm, &argv, &argc)) {
                coredump_report_failure("format_corename failed, aborting core");
-               goto fail_unlock;
+               goto close_fail;
        }
 
        switch (cn.core_type) {
@@ -1182,15 +1194,7 @@ void vfs_coredump(const kernel_siginfo_t *siginfo)
        }
 
 close_fail:
-       if (cprm.file)
-               filp_close(cprm.file, NULL);
-       if (cn.core_pipe_limit) {
-               VFS_WARN_ON_ONCE(cn.core_type != COREDUMP_PIPE);
-               atomic_dec(&core_pipe_count);
-       }
-fail_unlock:
-       kfree(cn.corename);
-       coredump_finish(cn.core_dumped);
+       coredump_cleanup(&cn, &cprm);
        revert_creds(old_cred);
        return;
 }