[PATCH] eal: support including mapped memory in core dump
Stephen Hemminger
stephen at networkplumber.org
Thu Oct 24 18:38:14 CEST 2024
On Thu, 24 Oct 2024 02:18:59 +0300
Dmitry Kozlyuk <dmitry.kozliuk at gmail.com> wrote:
> +static int
> +enable_shared_hugepage_coredump(void)
> +{
> + const char *path = "/proc/self/coredump_filter";
> + const unsigned long shared_hugepage_flag = RTE_BIT64(6);
> +
> + FILE *f;
> + uint64_t coredump_filter;
> +
> + f = fopen(path, "r");
> + if (f == NULL) {
> + rte_errno = errno;
> + EAL_LOG(ERR, "Failed to open %s for reading: %s", path, strerror(errno));
> + return -1;
> + }
> +
> + if (fscanf(f, "%"SCNx64, &coredump_filter) != 1) {
> + rte_errno = errno;
> + EAL_LOG(ERR, "Failed to parse %s: %s", path, strerror(errno));
> + fclose(f);
> + return -1;
> + }
> +
> + fclose(f);
> +
> + if (coredump_filter & shared_hugepage_flag)
> + return 0;
> +
> + f = fopen(path, "w");
> + if (f == NULL) {
> + rte_errno = errno;
> + EAL_LOG(ERR, "Failed to open %s for writing: %s", path, strerror(errno));
> + return -1;
> + }
> +
> + coredump_filter |= shared_hugepage_flag;
> + if (fprintf(f, "%"PRIx64, coredump_filter) <= 0) {
> + rte_errno = EIO;
> + EAL_LOG(ERR, "Failed to write %"PRIx64" to %s", coredump_filter, path);
> + fclose(f);
> + return -1;
> + }
> +
> + fclose(f);
> + return 0;
> +}
> +
Having a process set a system global value like coredump_filter via an internal
call seems like a potential problem. What about other processes on the system?
It may not even be allowed if using a hardened kernel.
I would prefer that madvise() be used, and document the required change to
coredump_filter.
More information about the dev
mailing list