105 lines
3.3 KiB
C
105 lines
3.3 KiB
C
/* 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 */
|