From 711109fef3db5156ce06a90123ea7a32c98ebef5 Mon Sep 17 00:00:00 2001 From: Michal Sekletar Date: Fri, 24 Oct 2025 12:55:20 +0200 Subject: [PATCH] coredump: handle ENOBUFS and EMSGSIZE the same way Depending on the runtime configuration, e.g. sysctls net.core.wmem_default= and net.core.rmem_default and on the actual message size, sendmsg() can fail also with ENOBUFS. E.g. alloc_skb() failure caused by net.core.[rw]mem_default=64MiB and huge fdinfo list from process that has 90k opened FDs. We should handle this case in the same way as EMSGSIZE and drop part of the message. (cherry picked from commit 28e62e684b631f928f1d857b04f45f0d34441675) --- src/coredump/coredump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c index 7fd96ac542e..84adea609d2 100644 --- a/src/coredump/coredump.c +++ b/src/coredump/coredump.c @@ -1294,7 +1294,7 @@ static int send_iovec(const struct iovec_wrapper *iovw, int input_fd, PidRef *pi if (sendmsg(fd, &mh, MSG_NOSIGNAL) >= 0) break; - if (errno == EMSGSIZE && mh.msg_iov[0].iov_len > 0) { + if (IN_SET(errno, EMSGSIZE, ENOBUFS) && mh.msg_iov[0].iov_len > 0) { /* This field didn't fit? That's a pity. Given that this is * just metadata, let's truncate the field at half, and try * again. We append three dots, in order to show that this is -- 2.47.3