frexpl math library function is showing wrong output when value slightly smaller than a power of two is passed
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
eglibc (Ubuntu) |
Invalid
|
Undecided
|
Unassigned | ||
Trusty |
New
|
Undecided
|
Adam Conrad | ||
glibc (Ubuntu) |
Fix Released
|
Undecided
|
Adam Conrad | ||
Trusty |
Invalid
|
Undecided
|
Unassigned |
Bug Description
Description:
============
Install a Power 8 machine with Ubuntu LE guest VM.
Then compile and execute the below test case code.
root@ubuntu:~# cat frexpl_example.c
#include <stdio.h>
#include <math.h>
int main(void)
{
union { long double ld; double d[2]; int i[4]; long long l[2]; } x;
int expon;
x.d[0] = 0x1p0;
x.d[1] = -0x1p-106;
printf ("%La %13a %13a 0x%16llx 0x%16llx\n",
x.ld, x.d[0], x.d[1], x.l[0], x.l[1]);
x.ld = frexpl (x.ld, &expon);
printf ("%La %13a %13a 0x%16llx 0x%16llx\n",
x.ld, x.d[0], x.d[1], x.l[0], x.l[1]);
printf ("expon = %d\n", expon);
return 0;
}
root@ubuntu:~# gcc frexpl_example.c -lm
root@ubuntu:~# ./a.out
0x1.fffffffffff
0x1.fffffffffff
expon = 1
root@ubuntu:~# uname -a
Linux ubuntu 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:09:21 UTC 2014 ppc64le ppc64le ppc64le GNU/Linux
root@ubuntu:~#
root@ubuntu:~# dpkg --list | grep libc6
ii libc6:ppc64el 2.19-0ubuntu6 ppc64el Embedded GNU C Library: Shared libraries
ii libc6-dbg:ppc64el 2.19-0ubuntu6 ppc64el Embedded GNU C Library: detached debugging symbols
ii libc6-dev:ppc64el 2.19-0ubuntu6 ppc64el Embedded GNU C Library: Development Libraries and Header Files
root@ubuntu:~#
The fix is available at the upstream commit: https:/
Related branches
CVE References
Changed in eglibc (Ubuntu): | |
status: | New → Invalid |
Changed in glibc (Ubuntu Trusty): | |
status: | New → Invalid |
tags: | added: ppc64el |
Changed in eglibc (Ubuntu Trusty): | |
assignee: | nobody → Adam Conrad (adconrad) |
Changed in glibc (Ubuntu): | |
assignee: | nobody → Adam Conrad (adconrad) |
This bug was fixed in the package glibc - 2.19-4ubuntu1
---------------
glibc (2.19-4ubuntu1) utopic; urgency=medium
* Merge with Debian unstable, switching us to glibc and fixing bugs: patches/ powerpc/ local-tune- power8. diff: When configured for cpu=power7, adjust -mtune for power8 instead (LP: #1333524)
- Fix invalid fd reuse while sending DNS queries (LP: #1328975)
- Avoid Freescale 8xx dcbz workaround on ppc64el (LP: #1333499)
- Remove wrong ibm long double assembly routines (LP: #1294588)
- Fix incorrect frexpl results with long doubles (LP: #1333506)
* debian/
--with-
glibc (2.19-4) unstable; urgency=medium
[ Aurelien Jarno ] debhelper. in/libc. {preinst, postrm, postinst} : correctly remove
* debian/
old ld.so configuration if more than one libc6 package is installed
(multiarch case). Closes: #752389, #752404.
[ Samuel Thibault ] hurd-i386/ tg-tls- threadvar. diff: Update to fix gcc-4.9 build.
* patches/
[ Adam Conrad ] control. in/main: glibc-source Conflics/Replaces eglibc-source. patches/ powerpc/ local-powerpc8x x-dcbz. diff: Restrict the trap
* debian/
* debian/
to 32-bit builds, since the Freescale 8xx CPUs aren't 64-bit capable.
glibc (2.19-3experime ntal0) experimental; urgency=medium
[ Aurelien Jarno] control. in/*: replace eglibc by glibc, update descriptions. debhelper. in/eglibc- source. install into source. install. debhelper. in/eglibc- source. lintian- overrides into source. lintian- overrides. eglibc- source. filelist into glibc-source. filelist lintian- overrides: replace eglibc by glibc. rules.d/ tarball. mk: rewrite to generate the orig tarball and any/submitted- nl_langinfo- static. diff: refresh. any/submitted- ldsodefs_ rtld_debug. diff: drop. any/local- dynamic- resolvconf. diff: new patch from the eglibc powerpc/ local-powerpc8x x-dcbz. diff: new patch from the eglibc sh4/local- fpscr_values. diff: new patch from eglibc tree to any/local- libpic. diff: new patch from eglibc tree to install any/local- bootstrap- headers. diff: new patch from eglibc tree
* Switch back to glibc sources:
- debian/
- rename debian/
glibc-
- rename debian/
glibc-
- rename debian/
- debian/copyright: update.
- debian/rules, debian/rules.d/*: replace eglibc by glibc.
- source/
- debian/sysdeps/*: replace eglibc by glibc.
- debian/po/*: update using debconf-updatepo.
- debian/
to fetch the branch updates through git.
- patches/
- patches/
- patches/
tree to dynamically take into account changes in resolv.conf.
- patches/
tree to workaround dcbz issues on PowerPC 8XX CPUs.
- patches/
export the ___fpscr_values symbol on SH4.
- patches/
*_pic.a files.
- patches/
to ease header installation when bootstrapping.
eglibc (2.19-3) unstable; urgency=medium
[ Aurelien Jarno ] control. in/libc: fix libtirpc1 breaks. Closes: #751852. rules.d/ build.mk: generate ld.so configuration file using HOST_MULTIARCH instead of DEB_HOST_GNU_TYPE to have a stable debhelper. in/libc. {preinst, postrm, postinst} : remove old
* debian/
* debian/
DEB_
path even when the GNU triplet change.
* debian/
ld.so configuration file on hurd-i386, i386 and k...