diff --git a/[refs] b/[refs] index 48ae8bdb252b..da477acdc4a1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1f033c1a6ec1a6815e9c4507d83eb20161163c37 +refs/heads/master: c8e252586f8d5de906385d8cf6385fee289a825e diff --git a/trunk/fs/binfmt_elf.c b/trunk/fs/binfmt_elf.c index bcb884e2d613..07d096c49920 100644 --- a/trunk/fs/binfmt_elf.c +++ b/trunk/fs/binfmt_elf.c @@ -1421,7 +1421,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; diff --git a/trunk/include/linux/regset.h b/trunk/include/linux/regset.h index 8abee6556223..5150fd16ef93 100644 --- a/trunk/include/linux/regset.h +++ b/trunk/include/linux/regset.h @@ -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; @@ -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;