Skip to content

Commit be227ba

Browse files
committed
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>
1 parent 474dd09 commit be227ba

1 file changed

Lines changed: 104 additions & 0 deletions

File tree

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 */

0 commit comments

Comments
 (0)