Skip to content

Commit

Permalink
regset: Prevent null pointer reference on readonly regsets
Browse files Browse the repository at this point in the history
commit c8e2525 upstream.

The regset common infrastructure assumed that regsets would always
have .get and .set methods, but not necessarily .active methods.
Unfortunately people have since written regsets without .set methods.

Rather than putting in stub functions everywhere, handle regsets with
null .get or .set methods explicitly.

Signed-off-by: H. Peter Anvin <[email protected]>
Reviewed-by: Oleg Nesterov <[email protected]>
Acked-by: Roland McGrath <[email protected]>
Cc: <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
H. Peter Anvin authored and debian-kernel-patches-to-git committed Apr 3, 2012
1 parent 6f9edd2 commit aad87f0
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
2 changes: 1 addition & 1 deletion fs/binfmt_elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1452,7 +1452,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
for (i = 1; i < view->n; ++i) {
const struct user_regset *regset = &view->regsets[i];
do_thread_regset_writeback(t->task, regset);
if (regset->core_note_type &&
if (regset->core_note_type && regset->get &&
(!regset->active || regset->active(t->task, regset))) {
int ret;
size_t size = regset->n * regset->size;
Expand Down
6 changes: 6 additions & 0 deletions include/linux/regset.h
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,9 @@ static inline int copy_regset_to_user(struct task_struct *target,
{
const struct user_regset *regset = &view->regsets[setno];

if (!regset->get)
return -EOPNOTSUPP;

if (!access_ok(VERIFY_WRITE, data, size))
return -EIO;

Expand All @@ -358,6 +361,9 @@ static inline int copy_regset_from_user(struct task_struct *target,
{
const struct user_regset *regset = &view->regsets[setno];

if (!regset->set)
return -EOPNOTSUPP;

if (!access_ok(VERIFY_READ, data, size))
return -EIO;

Expand Down

0 comments on commit aad87f0

Please sign in to comment.