Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

regset: Prevent null pointer reference on readonly regsets

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 <hpa@zytor.com>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Roland McGrath <roland@hack.frob.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

H. Peter Anvin and committed by
Linus Torvalds
c8e25258 1f033c1a

+7 -1
+1 -1
fs/binfmt_elf.c
··· 1421 1421 for (i = 1; i < view->n; ++i) { 1422 1422 const struct user_regset *regset = &view->regsets[i]; 1423 1423 do_thread_regset_writeback(t->task, regset); 1424 - if (regset->core_note_type && 1424 + if (regset->core_note_type && regset->get && 1425 1425 (!regset->active || regset->active(t->task, regset))) { 1426 1426 int ret; 1427 1427 size_t size = regset->n * regset->size;
+6
include/linux/regset.h
··· 335 335 { 336 336 const struct user_regset *regset = &view->regsets[setno]; 337 337 338 + if (!regset->get) 339 + return -EOPNOTSUPP; 340 + 338 341 if (!access_ok(VERIFY_WRITE, data, size)) 339 342 return -EIO; 340 343 ··· 360 357 const void __user *data) 361 358 { 362 359 const struct user_regset *regset = &view->regsets[setno]; 360 + 361 + if (!regset->set) 362 + return -EOPNOTSUPP; 363 363 364 364 if (!access_ok(VERIFY_READ, data, size)) 365 365 return -EIO;