diff options
| author | H. Peter Anvin <[email protected]> | 2012-03-02 10:43:48 -0800 |
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2012-03-02 11:38:15 -0800 |
| commit | c8e252586f8d5de906385d8cf6385fee289a825e (patch) | |
| tree | 11bf3ac4f0d0b3961fcf1c98ee5cd1824ebd5614 /include/linux | |
| parent | 1f033c1a6ec1a6815e9c4507d83eb20161163c37 (diff) | |
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 <[email protected]>
Reviewed-by: Oleg Nesterov <[email protected]>
Acked-by: Roland McGrath <[email protected]>
Cc: <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/regset.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/regset.h b/include/linux/regset.h index 8abee6556223..5150fd16ef93 100644 --- a/include/linux/regset.h +++ b/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; |