diff options
Diffstat (limited to 'include/linux/coredump.h')
-rw-r--r-- | include/linux/coredump.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/include/linux/coredump.h b/include/linux/coredump.h new file mode 100644 index 000000000..08a1d3e7e --- /dev/null +++ b/include/linux/coredump.h @@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_COREDUMP_H +#define _LINUX_COREDUMP_H + +#include <linux/types.h> +#include <linux/mm.h> +#include <linux/fs.h> +#include <asm/siginfo.h> + +#ifdef CONFIG_COREDUMP +struct core_vma_metadata { + unsigned long start, end; + unsigned long flags; + unsigned long dump_size; + unsigned long pgoff; + struct file *file; +}; + +struct coredump_params { + const kernel_siginfo_t *siginfo; + struct pt_regs *regs; + struct file *file; + unsigned long limit; + unsigned long mm_flags; + loff_t written; + loff_t pos; + loff_t to_skip; + int vma_count; + size_t vma_data_size; + struct core_vma_metadata *vma_meta; +}; + +/* + * These are the only things you should do on a core-file: use only these + * functions to write out all the necessary info. + */ +extern void dump_skip_to(struct coredump_params *cprm, unsigned long to); +extern void dump_skip(struct coredump_params *cprm, size_t nr); +extern int dump_emit(struct coredump_params *cprm, const void *addr, int nr); +extern int dump_align(struct coredump_params *cprm, int align); +int dump_user_range(struct coredump_params *cprm, unsigned long start, + unsigned long len); +extern void do_coredump(const kernel_siginfo_t *siginfo); +#else +static inline void do_coredump(const kernel_siginfo_t *siginfo) {} +#endif + +#if defined(CONFIG_COREDUMP) && defined(CONFIG_SYSCTL) +extern void validate_coredump_safety(void); +#else +static inline void validate_coredump_safety(void) {} +#endif + +#endif /* _LINUX_COREDUMP_H */ |