mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
hppa: Fix undefined behaviour in feclearexcept (BZ 30983)
The expression (excepts & FE_ALL_EXCEPT) << 27 produces a signed integer overflow when 'excepts' is specified as FE_INVALID (= 0x10), because - excepts is of type 'int', - FE_ALL_EXCEPT is of type 'int', - thus (excepts & FE_ALL_EXCEPT) is (int) 0x10, - 'int' is 32 bits wide. The patched code produces the same instruction sequence as previosuly. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
parent
80a40a9e14
commit
d082930272
@ -26,7 +26,7 @@ feclearexcept (int excepts)
|
||||
/* Get the current status word. */
|
||||
__asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0");
|
||||
/* Clear all the relevant bits. */
|
||||
s.sw[0] &= ~((excepts & FE_ALL_EXCEPT) << 27);
|
||||
s.sw[0] &= ~(((unsigned int) excepts & FE_ALL_EXCEPT) << 27);
|
||||
__asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0");
|
||||
|
||||
/* Success. */
|
||||
|
Loading…
Reference in New Issue
Block a user