| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /* 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 */
|