s390: fix save and restore of the floating-point-control register
The FPC_VALID_MASK has been used to check the validity of the value to be loaded into the floating-point-control register. With the introduction of the floating-point extension facility and the decimal-floating-point additional bits have been defined which need to be checked in a non straight forward way. So far these bits have been ignored which can cause an incorrect results for decimal- floating-point operations, e.g. an incorrect rounding mode to be set after signal return. The static check with the FPC_VALID_MASK is replaced with a trial load of the floating-point-control value, see test_fp_ctl. In addition an information leak with the padding word between the floating-point-control word and the floating-point registers in the s390_fp_regs is fixed. Reported-by: Heiko Carstens <heiko.carstens@de.ibm.com> Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
#include <math-emu/double.h>
|
||||
#include <math-emu/quad.h>
|
||||
|
||||
#define FPC_VALID_MASK 0xF8F8FF03
|
||||
|
||||
/*
|
||||
* I miss a macro to round a floating point number to the
|
||||
* nearest integer in the same floating point format.
|
||||
|
Reference in New Issue
Block a user