introduction of regset ->get() wrappers, switching ELF coredumps to those

Two new helpers: given a process and regset, dump into a buffer.
regset_get() takes a buffer and size, regset_get_alloc() takes size
and allocates a buffer.

Return value in both cases is the amount of data actually dumped in
case of success or -E...  on error.

In both cases the size is capped by regset->n * regset->size, so
->get() is called with offset 0 and size no more than what regset
expects.

binfmt_elf.c callers of ->get() are switched to using those; the other
caller (copy_regset_to_user()) will need some preparations to switch.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro
2020-06-01 19:42:40 -04:00
parent b3a9e3b962
commit b4e9c9549f
4 changed files with 90 additions and 29 deletions

View File

@@ -353,6 +353,15 @@ static inline int user_regset_copyin_ignore(unsigned int *pos,
return 0;
}
extern int regset_get(struct task_struct *target,
const struct user_regset *regset,
unsigned int size, void *data);
extern int regset_get_alloc(struct task_struct *target,
const struct user_regset *regset,
unsigned int size,
void **data);
/**
* copy_regset_to_user - fetch a thread's user_regset data into user memory
* @target: thread to be examined