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.
This commit is contained in:
Michal Sekletar
2025-10-24 15:23:09 +01:00
committed by Luca Boccassi
parent 7a18a538ef
commit 28e62e684b
+1 -1
View File
@@ -45,7 +45,7 @@ int coredump_send(const struct iovec_wrapper *iovw, int input_fd, PidRef *pidref
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