| From bcf4dd5f9ee096bd1510f838dd4750c35df4e38b Mon Sep 17 00:00:00 2001 |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Date: Mon, 27 Jun 2016 17:06:45 +0200 |
| Subject: s390: fix test_fp_ctl inline assembly contraints |
| |
| From: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| |
| commit bcf4dd5f9ee096bd1510f838dd4750c35df4e38b upstream. |
| |
| The test_fp_ctl function is used to test if a given value is a valid |
| floating-point control. The inline assembly in test_fp_ctl uses an |
| incorrect constraint for the 'orig_fpc' variable. If the compiler |
| chooses the same register for 'fpc' and 'orig_fpc' the test_fp_ctl() |
| function always returns true. This allows user space to trigger |
| kernel oopses with invalid floating-point control values on the |
| signal stack. |
| |
| This problem has been introduced with git commit 4725c86055f5bbdcdf |
| "s390: fix save and restore of the floating-point-control register" |
| |
| Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/s390/include/asm/fpu/api.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/s390/include/asm/fpu/api.h |
| +++ b/arch/s390/include/asm/fpu/api.h |
| @@ -22,7 +22,7 @@ static inline int test_fp_ctl(u32 fpc) |
| " la %0,0\n" |
| "1:\n" |
| EX_TABLE(0b,1b) |
| - : "=d" (rc), "=d" (orig_fpc) |
| + : "=d" (rc), "=&d" (orig_fpc) |
| : "d" (fpc), "0" (-EINVAL)); |
| return rc; |
| } |