History

tools: add coredump.h header

Copy the coredump header so we can rely on it in the selftests.

Christian Brauner committed 1 year ago

Commit be227ba1 parent 474dd091 file · +104 −0Browse files

Showing the changes to tools/include/uapi/linux (1 of 1 file). Show all

Unified · Split

tools/include/uapi/linux/coredump.h+104−0
@@ -0,0 +1,104 @@
1+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2+
3+#ifndef _UAPI_LINUX_COREDUMP_H
4+#define _UAPI_LINUX_COREDUMP_H
5+
6+#include <linux/types.h>
7+
8+/**
9+ * coredump_{req,ack} flags
10+ * @COREDUMP_KERNEL: kernel writes coredump
11+ * @COREDUMP_USERSPACE: userspace writes coredump
12+ * @COREDUMP_REJECT: don't generate coredump
13+ * @COREDUMP_WAIT: wait for coredump server
14+ */
15+enum {
16+ COREDUMP_KERNEL = (1ULL << 0),
17+ COREDUMP_USERSPACE = (1ULL << 1),
18+ COREDUMP_REJECT = (1ULL << 2),
19+ COREDUMP_WAIT = (1ULL << 3),
20+};
21+
22+/**
23+ * struct coredump_req - message kernel sends to userspace
24+ * @size: size of struct coredump_req
25+ * @size_ack: known size of struct coredump_ack on this kernel
26+ * @mask: supported features
27+ *
28+ * When a coredump happens the kernel will connect to the coredump
29+ * socket and send a coredump request to the coredump server. The @size
30+ * member is set to the size of struct coredump_req and provides a hint
31+ * to userspace how much data can be read. Userspace may use MSG_PEEK to
32+ * peek the size of struct coredump_req and then choose to consume it in
33+ * one go. Userspace may also simply read a COREDUMP_ACK_SIZE_VER0
34+ * request. If the size the kernel sends is larger userspace simply
35+ * discards any remaining data.
36+ *
37+ * The coredump_req->mask member is set to the currently know features.
38+ * Userspace may only set coredump_ack->mask to the bits raised by the
39+ * kernel in coredump_req->mask.
40+ *
41+ * The coredump_req->size_ack member is set by the kernel to the size of
42+ * struct coredump_ack the kernel knows. Userspace may only send up to
43+ * coredump_req->size_ack bytes to the kernel and must set
44+ * coredump_ack->size accordingly.
45+ */
46+struct coredump_req {
47+ __u32 size;
48+ __u32 size_ack;
49+ __u64 mask;
50+};
51+
52+enum {
53+ COREDUMP_REQ_SIZE_VER0 = 16U, /* size of first published struct */
54+};
55+
56+/**
57+ * struct coredump_ack - message userspace sends to kernel
58+ * @size: size of the struct
59+ * @spare: unused
60+ * @mask: features kernel is supposed to use
61+ *
62+ * The @size member must be set to the size of struct coredump_ack. It
63+ * may never exceed what the kernel returned in coredump_req->size_ack
64+ * but it may of course be smaller (>= COREDUMP_ACK_SIZE_VER0 and <=
65+ * coredump_req->size_ack).
66+ *
67+ * The @mask member must be set to the features the coredump server
68+ * wants the kernel to use. Only bits the kernel returned in
69+ * coredump_req->mask may be set.
70+ */
71+struct coredump_ack {
72+ __u32 size;
73+ __u32 spare;
74+ __u64 mask;
75+};
76+
77+enum {
78+ COREDUMP_ACK_SIZE_VER0 = 16U, /* size of first published struct */
79+};
80+
81+/**
82+ * enum coredump_mark - Markers for the coredump socket
83+ *
84+ * The kernel will place a single byte on the coredump socket. The
85+ * markers notify userspace whether the coredump ack succeeded or
86+ * failed.
87+ *
88+ * @COREDUMP_MARK_MINSIZE: the provided coredump_ack size was too small
89+ * @COREDUMP_MARK_MAXSIZE: the provided coredump_ack size was too big
90+ * @COREDUMP_MARK_UNSUPPORTED: the provided coredump_ack mask was invalid
91+ * @COREDUMP_MARK_CONFLICTING: the provided coredump_ack mask has conflicting options
92+ * @COREDUMP_MARK_REQACK: the coredump request and ack was successful
93+ * @__COREDUMP_MARK_MAX: the maximum coredump mark value
94+ */
95+enum coredump_mark {
96+ COREDUMP_MARK_REQACK = 0U,
97+ COREDUMP_MARK_MINSIZE = 1U,
98+ COREDUMP_MARK_MAXSIZE = 2U,
99+ COREDUMP_MARK_UNSUPPORTED = 3U,
100+ COREDUMP_MARK_CONFLICTING = 4U,
101+ __COREDUMP_MARK_MAX = (1U << 31),
102+};
103+
104+#endif /* _UAPI_LINUX_COREDUMP_H */