From nobody Sat Jul 26 21:31:54 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bqHxl646Fz62VxW; Sat, 26 Jul 2025 21:31:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bqHxk2Mtwz3sLX; Sat, 26 Jul 2025 21:31:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1753565514; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=L0uGI6zWjdBSHbW29T9wNIkSMGDB82+Qnyq0AmrIEIM=; b=Iwj4ZYPzDZnczxafWmgtoi/YM3+dq5NlD0xLN3GDGtcjpqt34m3Xw3C9bqa2Lj7MuEMcxm fCoDuIDQoh3eZVtMMmil7Ore6RiF1WXtEL9uQ7Ab32xB+AG2unzonXGzMLWGWzBDRMDzes LrqJPRFsS7jR83T0jtQfCYXfnMk0X0Zxw/6DAqmli5khEUU9iWHVP3EZCByYUXteW9/1z8 pISEiiwStKBAWivq/thiphQB4qSjneZkoiV/Ot4zgHuu6E2hyUopje+xC00+jpDIehCUfj hIZQ0AFYa/Wvbd9a0MnRqYafWWZvRXqZ9/GYy2ryEfLpD9nAsXWnzASxxiWNuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1753565514; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=L0uGI6zWjdBSHbW29T9wNIkSMGDB82+Qnyq0AmrIEIM=; b=yfuFTz5mdGU8HlVX+uZ3lIuzgSWcuRn6g9ObiVB38TtvWJC0CrZbhHaJ5MS5cSIit+KvJb Z+qx1HTgloc9PkyfJfaw2qayla0yY3kwLkcO66Y2m+HyJT7qWjPRQk0Uc2mx3rwbfnk9Au sjiyjg2mpiY0S2ZDxg2RXXrfpz0z8d0aYh1JyLObr6XvKFfJXI573rK1ak529RAfXwRqIQ erJhWMp7sh0KG1iq0qifUGXtDioGwThngsSLYYRYctODeQkcjTuEUpkh4vnzCF/yEqdkyS skT2BfgLffoOGBztNUXN5xQzkScYzfjZAUIF7dv4/osvja7/o9+4Jo2zsKHnMQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1753565514; a=rsa-sha256; cv=none; b=xUNJraeG7VSbSIc0ZyjHcysHH4ZxCJoaRHTxc1e4W5gV9oLAfSm3JiSHF5a94pJBXSqGeI uxPmQERmj8GegTm3HKbHq84m3QlNuqOEyucn8u5rgJz47T66DqWPEu+/RAPpRWvDck0qPw FcH25roTu7A3J/b7BK+CRb3zEug2p7U77rIIeMliPn6+jP3XKw3vIcP338CAtSZQAJnUJJ dGq/TxqRSOsYL2o42aQRkZA5k3loCnF/S82pOEffiTx36GFCTVs1q6Q/oSCZuhKOy8msae KHfJFWwzEYCCtY4RGlMZgbrtHbc9jl//1cV7+tDQwpgp5sVpXJU+iIog9o2LSw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bqHxk1p7VzmZD; Sat, 26 Jul 2025 21:31:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 56QLVsPK065868; Sat, 26 Jul 2025 21:31:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 56QLVsZn065865; Sat, 26 Jul 2025 21:31:54 GMT (envelope-from git) Date: Sat, 26 Jul 2025 21:31:54 GMT Message-Id: <202507262131.56QLVsZn065865@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 3ce3b342db7e - main - kern: add some better error messages for coredump() failures List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3ce3b342db7e5c987e5eee039f7b290a3919ca37 Auto-Submitted: auto-generated The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=3ce3b342db7e5c987e5eee039f7b290a3919ca37 commit 3ce3b342db7e5c987e5eee039f7b290a3919ca37 Author: Kyle Evans AuthorDate: 2025-07-22 16:49:52 +0000 Commit: Kyle Evans CommitDate: 2025-07-26 21:31:42 +0000 kern: add some better error messages for coredump() failures After debugging with a user on discord why their process is not generating coredumps, it became clear that we can use better error messages -- particularly to distinguish between the different EFAULT cases. For those that are denied by system policies, include some more specific pointers to the relevant knob. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D51465 --- sys/kern/kern_ucoredump.c | 57 ++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/sys/kern/kern_ucoredump.c b/sys/kern/kern_ucoredump.c index a2412bf06441..d425596b5f24 100644 --- a/sys/kern/kern_ucoredump.c +++ b/sys/kern/kern_ucoredump.c @@ -51,7 +51,7 @@ #include #include -static int coredump(struct thread *td); +static int coredump(struct thread *td, const char **); int compress_user_cores = 0; @@ -135,7 +135,6 @@ void sigexit(struct thread *td, int sig) { struct proc *p = td->td_proc; - const char *coreinfo; int rv; bool logexit; @@ -158,6 +157,8 @@ sigexit(struct thread *td, int sig) * (e.g. via fork()), we won't get a dump at all. */ if (sig_do_core(sig) && thread_single(p, SINGLE_NO_EXIT) == 0) { + const char *err = NULL; + p->p_sig = sig; /* * Log signals which would cause core dumps @@ -166,32 +167,34 @@ sigexit(struct thread *td, int sig) * XXX : Todo, as well as euid, write out ruid too * Note that coredump() drops proc lock. */ - rv = coredump(td); - switch (rv) { - case 0: + rv = coredump(td, &err); + if (rv == 0) { + MPASS(err == NULL); sig |= WCOREFLAG; - coreinfo = " (core dumped)"; - break; - case EFAULT: - coreinfo = " (no core dump - bad address)"; - break; - case EINVAL: - coreinfo = " (no core dump - invalid argument)"; - break; - case EFBIG: - coreinfo = " (no core dump - too large)"; - break; - default: - coreinfo = " (no core dump - other error)"; - break; + } else if (err == NULL) { + switch (rv) { + case EFAULT: + err = "bad address"; + break; + case EINVAL: + err = "invalild argument"; + break; + case EFBIG: + err = "too large"; + break; + default: + err = "other error"; + break; + } } if (logexit) log(LOG_INFO, "pid %d (%s), jid %d, uid %d: exited on " - "signal %d%s\n", p->p_pid, p->p_comm, + "signal %d (%s%s)\n", p->p_pid, p->p_comm, p->p_ucred->cr_prison->pr_id, - td->td_ucred->cr_uid, - sig &~ WCOREFLAG, coreinfo); + td->td_ucred->cr_uid, sig &~ WCOREFLAG, + err != NULL ? "no core dump - " : "core dumped", + err != NULL ? err : ""); } else PROC_UNLOCK(p); exit1(td, 0, sig); @@ -207,7 +210,7 @@ sigexit(struct thread *td, int sig) * ENOSYS; otherwise it returns the error from the process-specific routine. */ static int -coredump(struct thread *td) +coredump(struct thread *td, const char **errmsg) { struct coredumper *iter, *chosen; struct proc *p = td->td_proc; @@ -221,6 +224,13 @@ coredump(struct thread *td) if (!do_coredump || (!sugid_coredump && (p->p_flag & P_SUGID) != 0) || (p->p_flag2 & P2_NOTRACE) != 0) { PROC_UNLOCK(p); + + if (!do_coredump) + *errmsg = "denied by kern.coredump"; + else if ((p->p_flag2 & P2_NOTRACE) != 0) + *errmsg = "process has trace disabled"; + else + *errmsg = "sugid process denied by kern.sugid_coredump"; return (EFAULT); } @@ -235,6 +245,7 @@ coredump(struct thread *td) limit = (off_t)lim_cur(td, RLIMIT_CORE); if (limit == 0 || racct_get_available(p, RACCT_CORE) == 0) { PROC_UNLOCK(p); + *errmsg = "coredumpsize limit is 0"; return (EFBIG); }