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:
committed by
Luca Boccassi
parent
7a18a538ef
commit
28e62e684b
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user