summary refs log tree commit diff
path: root/pkgs/development/libraries/glibc
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2017-04-10 11:13:00 +0200
committerVladimír Čunát <vcunat@gmail.com>2017-04-10 11:13:00 +0200
commitc30b12b9a5cc35b658e65b3ff54e9c877f1380ad (patch)
treed0c2a7e0e5719fdcf6177db4496bb9e5f3ea7d94 /pkgs/development/libraries/glibc
parenta05959e191c8bef969fd84a8dce0343ef6dcd7e0 (diff)
downloadnixpkgs-c30b12b9a5cc35b658e65b3ff54e9c877f1380ad.tar
nixpkgs-c30b12b9a5cc35b658e65b3ff54e9c877f1380ad.tar.gz
nixpkgs-c30b12b9a5cc35b658e65b3ff54e9c877f1380ad.tar.bz2
nixpkgs-c30b12b9a5cc35b658e65b3ff54e9c877f1380ad.tar.lz
nixpkgs-c30b12b9a5cc35b658e65b3ff54e9c877f1380ad.tar.xz
nixpkgs-c30b12b9a5cc35b658e65b3ff54e9c877f1380ad.tar.zst
nixpkgs-c30b12b9a5cc35b658e65b3ff54e9c877f1380ad.zip
glibc: fix i686 crashes via an upstream patch
Fixes #23177.
Diffstat (limited to 'pkgs/development/libraries/glibc')
-rw-r--r--pkgs/development/libraries/glibc/common.nix2
-rw-r--r--pkgs/development/libraries/glibc/fix-i686-memchr.patch23
2 files changed, 25 insertions, 0 deletions
diff --git a/pkgs/development/libraries/glibc/common.nix b/pkgs/development/libraries/glibc/common.nix
index 7128f560619..3d146c54398 100644
--- a/pkgs/development/libraries/glibc/common.nix
+++ b/pkgs/development/libraries/glibc/common.nix
@@ -48,6 +48,8 @@ stdenv.mkDerivation ({
          "/bin:/usr/bin", which is inappropriate on NixOS machines. This
          patch extends the search path by "/run/current-system/sw/bin". */
       ./fix_path_attribute_in_getconf.patch
+
+      ./fix-i686-memchr.patch
     ];
 
   postPatch =
diff --git a/pkgs/development/libraries/glibc/fix-i686-memchr.patch b/pkgs/development/libraries/glibc/fix-i686-memchr.patch
new file mode 100644
index 00000000000..32564de9f3a
--- /dev/null
+++ b/pkgs/development/libraries/glibc/fix-i686-memchr.patch
@@ -0,0 +1,23 @@
+Fix i686 memchr overflow calculation (BZ#21182)
+
+https://sourceware.org/git/?p=glibc.git;a=commit;h=3abeeec5f46ff03
+diff --git a/sysdeps/i386/i686/multiarch/memchr-sse2.S b/sysdeps/i386/i686/multiarch/memchr-sse2.S
+index 910679c..e41f324 100644
+--- a/sysdeps/i386/i686/multiarch/memchr-sse2.S
++++ b/sysdeps/i386/i686/multiarch/memchr-sse2.S
+@@ -117,7 +117,6 @@ L(crosscache):
+ 
+ # ifndef USE_AS_RAWMEMCHR
+ 	jnz	L(match_case2_prolog1)
+-	lea	-16(%edx), %edx
+         /* Calculate the last acceptable address and check for possible
+            addition overflow by using satured math:
+            edx = ecx + edx
+@@ -125,6 +124,7 @@ L(crosscache):
+ 	add	%ecx, %edx
+ 	sbb	%eax, %eax
+ 	or	%eax, %edx
++	sub	$16, %edx
+ 	jbe	L(return_null)
+ 	lea	16(%edi), %edi
+ # else