blob: 7d05370e555ee9d9cfe6d4cb61fb39c580f99c08 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Daisuke HATAYAMA088e7af2010-03-05 13:44:06 -08002#ifndef _LINUX_COREDUMP_H
3#define _LINUX_COREDUMP_H
4
5#include <linux/types.h>
6#include <linux/mm.h>
7#include <linux/fs.h>
Richard Weinberger1d46e232012-10-19 13:56:47 -07008#include <asm/siginfo.h>
Daisuke HATAYAMA088e7af2010-03-05 13:44:06 -08009
Al Viroa64b8902021-01-03 20:51:48 -050010#ifdef CONFIG_COREDUMP
Jann Horna07279c2020-10-15 20:12:54 -070011struct core_vma_metadata {
12 unsigned long start, end;
13 unsigned long flags;
14 unsigned long dump_size;
15};
16
Eric W. Biedermana99a3e22022-01-31 11:50:46 -060017struct coredump_params {
18 const kernel_siginfo_t *siginfo;
19 struct pt_regs *regs;
20 struct file *file;
21 unsigned long limit;
22 unsigned long mm_flags;
23 loff_t written;
24 loff_t pos;
25 loff_t to_skip;
Eric W. Biederman95c54362022-03-08 12:55:29 -060026 int vma_count;
27 size_t vma_data_size;
28 struct core_vma_metadata *vma_meta;
Eric W. Biedermana99a3e22022-01-31 11:50:46 -060029};
30
Daisuke HATAYAMA088e7af2010-03-05 13:44:06 -080031/*
32 * These are the only things you should do on a core-file: use only these
33 * functions to write out all the necessary info.
34 */
Al Virod0f10882020-03-08 09:16:37 -040035extern void dump_skip_to(struct coredump_params *cprm, unsigned long to);
36extern void dump_skip(struct coredump_params *cprm, size_t nr);
Al Viroecc8c772013-10-05 15:32:35 -040037extern int dump_emit(struct coredump_params *cprm, const void *addr, int nr);
Al Viro22a8cb82013-10-08 11:05:01 -040038extern int dump_align(struct coredump_params *cprm, int align);
Jann Hornafc63a97b2020-10-15 20:12:46 -070039int dump_user_range(struct coredump_params *cprm, unsigned long start,
40 unsigned long len);
Eric W. Biedermanae7795b2018-09-25 11:27:20 +020041extern void do_coredump(const kernel_siginfo_t *siginfo);
Alex Kelly179899fd2012-10-04 17:15:24 -070042#else
Eric W. Biedermanae7795b2018-09-25 11:27:20 +020043static inline void do_coredump(const kernel_siginfo_t *siginfo) {}
Alex Kelly179899fd2012-10-04 17:15:24 -070044#endif
Daisuke HATAYAMA088e7af2010-03-05 13:44:06 -080045
Xiaoming Nif0bc21b2022-01-21 22:13:38 -080046#if defined(CONFIG_COREDUMP) && defined(CONFIG_SYSCTL)
47extern void validate_coredump_safety(void);
48#else
49static inline void validate_coredump_safety(void) {}
50#endif
51
Daisuke HATAYAMA088e7af2010-03-05 13:44:06 -080052#endif /* _LINUX_COREDUMP_H */