coredump.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _LINUX_COREDUMP_H
  3. #define _LINUX_COREDUMP_H
  4. #include <linux/types.h>
  5. #include <linux/mm.h>
  6. #include <linux/fs.h>
  7. #include <asm/siginfo.h>
  8. #ifdef CONFIG_COREDUMP
  9. struct core_vma_metadata {
  10. unsigned long start, end;
  11. unsigned long flags;
  12. unsigned long dump_size;
  13. unsigned long pgoff;
  14. struct file *file;
  15. };
  16. struct coredump_params {
  17. const kernel_siginfo_t *siginfo;
  18. struct pt_regs *regs;
  19. struct file *file;
  20. unsigned long limit;
  21. unsigned long mm_flags;
  22. loff_t written;
  23. loff_t pos;
  24. loff_t to_skip;
  25. int vma_count;
  26. size_t vma_data_size;
  27. struct core_vma_metadata *vma_meta;
  28. };
  29. /*
  30. * These are the only things you should do on a core-file: use only these
  31. * functions to write out all the necessary info.
  32. */
  33. extern void dump_skip_to(struct coredump_params *cprm, unsigned long to);
  34. extern void dump_skip(struct coredump_params *cprm, size_t nr);
  35. extern int dump_emit(struct coredump_params *cprm, const void *addr, int nr);
  36. extern int dump_align(struct coredump_params *cprm, int align);
  37. int dump_user_range(struct coredump_params *cprm, unsigned long start,
  38. unsigned long len);
  39. extern void do_coredump(const kernel_siginfo_t *siginfo);
  40. #else
  41. static inline void do_coredump(const kernel_siginfo_t *siginfo) {}
  42. #endif
  43. #if defined(CONFIG_COREDUMP) && defined(CONFIG_SYSCTL)
  44. extern void validate_coredump_safety(void);
  45. #else
  46. static inline void validate_coredump_safety(void) {}
  47. #endif
  48. #endif /* _LINUX_COREDUMP_H */