| /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | |
| #ifndef _UAPI_LINUX_COREDUMP_H | |
| #define _UAPI_LINUX_COREDUMP_H | |
| #include <linux/types.h> | |
| /** | |
| * coredump_{req,ack} flags | |
| * @COREDUMP_KERNEL: kernel writes coredump | |
| * @COREDUMP_USERSPACE: userspace writes coredump | |
| * @COREDUMP_REJECT: don't generate coredump | |
| * @COREDUMP_WAIT: wait for coredump server | |
| */ | |
| enum { | |
| COREDUMP_KERNEL = (1ULL << 0), | |
| COREDUMP_USERSPACE = (1ULL << 1), | |
| COREDUMP_REJECT = (1ULL << 2), | |
| COREDUMP_WAIT = (1ULL << 3), | |
| }; | |
| /** | |
| * struct coredump_req - message kernel sends to userspace | |
| * @size: size of struct coredump_req | |
| * @size_ack: known size of struct coredump_ack on this kernel | |
| * @mask: supported features | |
| * | |
| * When a coredump happens the kernel will connect to the coredump | |
| * socket and send a coredump request to the coredump server. The @size | |
| * member is set to the size of struct coredump_req and provides a hint | |
| * to userspace how much data can be read. Userspace may use MSG_PEEK to | |
| * peek the size of struct coredump_req and then choose to consume it in | |
| * one go. Userspace may also simply read a COREDUMP_ACK_SIZE_VER0 | |
| * request. If the size the kernel sends is larger userspace simply | |
| * discards any remaining data. | |
| * | |
| * The coredump_req->mask member is set to the currently know features. | |
| * Userspace may only set coredump_ack->mask to the bits raised by the | |
| * kernel in coredump_req->mask. | |
| * | |
| * The coredump_req->size_ack member is set by the kernel to the size of | |
| * struct coredump_ack the kernel knows. Userspace may only send up to | |
| * coredump_req->size_ack bytes to the kernel and must set | |
| * coredump_ack->size accordingly. | |
| */ | |
| struct coredump_req { | |
| __u32 size; | |
| __u32 size_ack; | |
| __u64 mask; | |
| }; | |
| enum { | |
| COREDUMP_REQ_SIZE_VER0 = 16U, /* size of first published struct */ | |
| }; | |
| /** | |
| * struct coredump_ack - message userspace sends to kernel | |
| * @size: size of the struct | |
| * @spare: unused | |
| * @mask: features kernel is supposed to use | |
| * | |
| * The @size member must be set to the size of struct coredump_ack. It | |
| * may never exceed what the kernel returned in coredump_req->size_ack | |
| * but it may of course be smaller (>= COREDUMP_ACK_SIZE_VER0 and <= | |
| * coredump_req->size_ack). | |
| * | |
| * The @mask member must be set to the features the coredump server | |
| * wants the kernel to use. Only bits the kernel returned in | |
| * coredump_req->mask may be set. | |
| */ | |
| struct coredump_ack { | |
| __u32 size; | |
| __u32 spare; | |
| __u64 mask; | |
| }; | |
| enum { | |
| COREDUMP_ACK_SIZE_VER0 = 16U, /* size of first published struct */ | |
| }; | |
| /** | |
| * enum coredump_mark - Markers for the coredump socket | |
| * | |
| * The kernel will place a single byte on the coredump socket. The | |
| * markers notify userspace whether the coredump ack succeeded or | |
| * failed. | |
| * | |
| * @COREDUMP_MARK_MINSIZE: the provided coredump_ack size was too small | |
| * @COREDUMP_MARK_MAXSIZE: the provided coredump_ack size was too big | |
| * @COREDUMP_MARK_UNSUPPORTED: the provided coredump_ack mask was invalid | |
| * @COREDUMP_MARK_CONFLICTING: the provided coredump_ack mask has conflicting options | |
| * @COREDUMP_MARK_REQACK: the coredump request and ack was successful | |
| * @__COREDUMP_MARK_MAX: the maximum coredump mark value | |
| */ | |
| enum coredump_mark { | |
| COREDUMP_MARK_REQACK = 0U, | |
| COREDUMP_MARK_MINSIZE = 1U, | |
| COREDUMP_MARK_MAXSIZE = 2U, | |
| COREDUMP_MARK_UNSUPPORTED = 3U, | |
| COREDUMP_MARK_CONFLICTING = 4U, | |
| __COREDUMP_MARK_MAX = (1U << 31), | |
| }; | |
| #endif /* _UAPI_LINUX_COREDUMP_H */ |