mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
tools: add coredump.h header
Copy the coredump header so we can rely on it in the selftests. Link: https://lore.kernel.org/20250603-work-coredump-socket-protocol-v2-4-05a5f0c18ecc@kernel.org Acked-by: Lennart Poettering <lennart@poettering.net> Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
104
tools/include/uapi/linux/coredump.h
Normal file
104
tools/include/uapi/linux/coredump.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/* 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 */
|
||||
Reference in New Issue
Block a user