[glibc/f19] backport multiple fixes from 2.18

Siddhesh Poyarekar siddhesh at fedoraproject.org
Tue Jun 25 14:54:10 UTC 2013


commit 901d7989466218970e7e8364ab73dd5cd10c6e08
Author: Siddhesh Poyarekar <siddhesh.poyarekar at gmail.com>
Date:   Tue Jun 25 19:51:23 2013 +0530

    backport multiple fixes from 2.18
    
      - Preserve errno across _PC_CHOWN_RESTRICTED call on XFS (#977870).
      - Remove PIPE_BUF Linux-specific code (#977872).
      - Fix FPE in memusagestat when malloc utilization is zero (#977874).
      - Accept leading and trailing spaces in getdate input string (#977875).

 glibc-rh977870.patch |   67 +++++++++++++
 glibc-rh977872.patch |  268 ++++++++++++++++++++++++++++++++++++++++++++++++++
 glibc-rh977874.patch |  148 +++++++++++++++++++++++++++
 glibc-rh977875.patch |   96 ++++++++++++++++++
 glibc.spec           |   16 +++-
 5 files changed, 594 insertions(+), 1 deletions(-)
---
diff --git a/glibc-rh977870.patch b/glibc-rh977870.patch
new file mode 100644
index 0000000..5f441db
--- /dev/null
+++ b/glibc-rh977870.patch
@@ -0,0 +1,67 @@
+commit d755bba40f880c01ced8740a26fecc85534454b9
+Author: Siddhesh Poyarekar <siddhesh at redhat.com>
+Date:   Wed Apr 3 10:56:45 2013 +0530
+
+    Preserve errno across _PC_CHOWN_RESTRICTED call on XFS
+    
+    Fix BZ #15305.
+    
+    On kernel versions earlier than 2.6.29, the Linux kernel exported a
+    sysctl called restrict_chown for xfs, which could be used to allow
+    chown to users other than the owner.  2.6.29 removed this support,
+    causing the open_not_cancel_2 to fail and thus modify errno.  The fix
+    is to save and restore errno so that the caller sees it as unmodified.
+    
+    Additionally, since the code to check the sysctl is not useful on
+    newer kernels, we add an ifdef so that in future the code block gets
+    rmeoved completely.
+
+diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
+index 8fdff7e..ccd4c59 100644
+--- a/sysdeps/unix/sysv/linux/kernel-features.h
++++ b/sysdeps/unix/sysv/linux/kernel-features.h
+@@ -221,3 +221,9 @@
+ #if defined __x86_64__ && __LINUX_KERNEL_VERSION >= 0x030100
+ # define __ASSUME_GETCPU_SYSCALL	1
+ #endif
++
++/* 2.6.29 removed the XFS restricted_chown sysctl, so it is pointless looking
++   for it in newer kernels.  */
++#if __LINUX_KERNEL_VERSION >= 0x02061d
++# define __ASSUME_XFS_RESTRICTED_CHOWN 1
++#endif
+diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c
+index de91a45..723d234 100644
+--- a/sysdeps/unix/sysv/linux/pathconf.c
++++ b/sysdeps/unix/sysv/linux/pathconf.c
+@@ -289,11 +289,16 @@ __statfs_chown_restricted (int result, const struct statfs *fsbuf)
+       return -1;
+     }
+ 
++#if __ASSUME_XFS_RESTRICTED_CHOWN
++  return 1;
++#else
+   int fd;
++  int save_errno;
+   long int retval = 1;
+   switch (fsbuf->f_type)
+     {
+     case XFS_SUPER_MAGIC:
++      save_errno = errno;
+       /* Read the value from /proc/sys/fs/xfs/restrict_chown.  If we cannot
+ 	 read it default to assume the restriction is in place.  */
+       fd = open_not_cancel_2 ("/proc/sys/fs/xfs/restrict_chown", O_RDONLY);
+@@ -306,6 +311,7 @@ __statfs_chown_restricted (int result, const struct statfs *fsbuf)
+ 
+ 	  close_not_cancel_no_status (fd);
+ 	}
++      __set_errno (save_errno);
+       break;
+ 
+     default:
+@@ -313,4 +319,5 @@ __statfs_chown_restricted (int result, const struct statfs *fsbuf)
+     }
+ 
+   return retval;
++#endif
+ }
diff --git a/glibc-rh977872.patch b/glibc-rh977872.patch
new file mode 100644
index 0000000..f1c50ff
--- /dev/null
+++ b/glibc-rh977872.patch
@@ -0,0 +1,268 @@
+commit adbb8027be47b3295367019b2f45863ea3d6c727
+Author: Siddhesh Poyarekar <siddhesh at redhat.com>
+Date:   Thu Mar 7 12:15:08 2013 +0530
+
+    Remove PIPE_BUF Linux-specific code
+    
+    Fixes BZ #12723
+    
+    The variable pipe buffer size does nothing to the value of PIPE_BUF,
+    since the number of bytes that are atomically written is still
+    PIPE_BUF on Linux.
+
+diff --git a/posix/Makefile b/posix/Makefile
+index 2cacd21..658c47e 100644
+--- a/posix/Makefile
++++ b/posix/Makefile
+@@ -86,7 +86,8 @@ tests		:= tstgetopt testfnm runtests runptests	     \
+ 		   tst-rfc3484-3 \
+ 		   tst-getaddrinfo3 tst-fnmatch2 tst-cpucount tst-cpuset \
+ 		   bug-getopt1 bug-getopt2 bug-getopt3 bug-getopt4 \
+-		   bug-getopt5 tst-getopt_long1 bug-regex34
++		   bug-getopt5 tst-getopt_long1 bug-regex34 \
++		   tst-pathconf
+ xtests		:= bug-ga2
+ ifeq (yes,$(build-shared))
+ test-srcs	:= globtest
+diff --git a/posix/tst-pathconf.c b/posix/tst-pathconf.c
+new file mode 100644
+index 0000000..7627a24
+--- /dev/null
++++ b/posix/tst-pathconf.c
+@@ -0,0 +1,176 @@
++/* Test that values of pathconf and fpathconf are consistent for a file.
++   Copyright (C) 2013 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <fcntl.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++
++static void prepare (void);
++#define PREPARE(argc, argv) prepare ()
++
++static int do_test (void);
++#define TEST_FUNCTION do_test ()
++
++#include "../test-skeleton.c"
++
++static int dir_fd;
++static char *dirbuf;
++
++static void
++prepare (void)
++{
++  size_t test_dir_len = strlen (test_dir);
++  static const char dir_name[] = "/tst-pathconf.XXXXXX";
++
++  size_t dirbuflen = test_dir_len + sizeof (dir_name);
++  dirbuf = malloc (dirbuflen);
++  if (dirbuf == NULL)
++    {
++      puts ("Out of memory");
++      exit (1);
++    }
++
++  snprintf (dirbuf, dirbuflen, "%s%s", test_dir, dir_name);
++  if (mkdtemp (dirbuf) == NULL)
++    {
++      printf ("Cannot create temporary directory: %s\n", strerror (errno));
++      exit (1);
++    }
++
++  add_temp_file (dirbuf);
++
++  dir_fd = open (dirbuf, O_RDONLY);
++  if (dir_fd == -1)
++    {
++      printf ("Cannot open directory: %s\n", strerror (errno));
++      exit (1);
++    }
++}
++
++
++static int
++do_test (void)
++{
++  int ret = 0;
++  static const char *fifo_name = "some-fifo";
++
++  size_t filenamelen = strlen (dirbuf) + strlen (fifo_name) + 2;
++  char *filename = malloc (filenamelen);
++
++  snprintf (filename, filenamelen, "%s/%s", dirbuf, fifo_name);
++
++  /* Create a fifo in the directory.  */
++  int e = mkfifo (filename, 0777);
++  if (e == -1)
++    {
++      printf ("fifo creation failed (%s)\n", strerror (errno));
++      ret = 1;
++      goto out_nofifo;
++    }
++
++  long dir_pathconf = pathconf (dirbuf, _PC_PIPE_BUF);
++
++  if (dir_pathconf < 0)
++    {
++      printf ("pathconf on directory failed: %s\n", strerror (errno));
++      ret = 1;
++      goto out_nofifo;
++    }
++
++  long fifo_pathconf = pathconf (filename, _PC_PIPE_BUF);
++
++  if (fifo_pathconf < 0)
++    {
++      printf ("pathconf on file failed: %s\n", strerror (errno));
++      ret = 1;
++      goto out_nofifo;
++    }
++
++  int fifo = open (filename, O_RDONLY | O_NONBLOCK);
++
++  if (fifo < 0)
++    {
++      printf ("fifo open failed (%s)\n", strerror (errno));
++      ret = 1;
++      goto out_nofifo;
++    }
++
++  long dir_fpathconf = fpathconf (dir_fd, _PC_PIPE_BUF);
++
++  if (dir_fpathconf < 0)
++    {
++      printf ("fpathconf on directory failed: %s\n", strerror (errno));
++      ret = 1;
++      goto out;
++    }
++
++  long fifo_fpathconf = fpathconf (fifo, _PC_PIPE_BUF);
++
++  if (fifo_fpathconf < 0)
++    {
++      printf ("fpathconf on file failed: %s\n", strerror (errno));
++      ret = 1;
++      goto out;
++    }
++
++  if (fifo_pathconf != fifo_fpathconf)
++    {
++      printf ("fifo pathconf (%ld) != fifo fpathconf (%ld)\n", fifo_pathconf,
++	      fifo_fpathconf);
++      ret = 1;
++      goto out;
++    }
++
++  if (dir_pathconf != fifo_pathconf)
++    {
++      printf ("directory pathconf (%ld) != fifo pathconf (%ld)\n",
++	      dir_pathconf, fifo_pathconf);
++      ret = 1;
++      goto out;
++    }
++
++  if (dir_fpathconf != fifo_fpathconf)
++    {
++      printf ("directory fpathconf (%ld) != fifo fpathconf (%ld)\n",
++	      dir_fpathconf, fifo_fpathconf);
++      ret = 1;
++      goto out;
++    }
++
++out:
++  close (fifo);
++out_nofifo:
++  close (dir_fd);
++
++  if (unlink (filename) != 0)
++    {
++      printf ("Could not remove fifo (%s)\n", strerror (errno));
++      ret = 1;
++    }
++
++  if (rmdir (dirbuf) != 0)
++    {
++      printf ("Could not remove directory (%s)\n", strerror (errno));
++      ret = 1;
++    }
++
++  return ret;
++}
+diff --git a/sysdeps/unix/sysv/linux/fpathconf.c b/sysdeps/unix/sysv/linux/fpathconf.c
+index c971644..e8c4dc9 100644
+--- a/sysdeps/unix/sysv/linux/fpathconf.c
++++ b/sysdeps/unix/sysv/linux/fpathconf.c
+@@ -33,7 +33,6 @@ __fpathconf (fd, name)
+      int name;
+ {
+   struct statfs fsbuf;
+-  int r;
+ 
+   switch (name)
+     {
+@@ -49,12 +48,6 @@ __fpathconf (fd, name)
+     case _PC_CHOWN_RESTRICTED:
+       return __statfs_chown_restricted (__fstatfs (fd, &fsbuf), &fsbuf);
+ 
+-    case _PC_PIPE_BUF:
+-      r = __fcntl (fd, F_GETPIPE_SZ);
+-      if (r > 0)
+-	return r;
+-      /* FALLTHROUGH */
+-
+     default:
+       return posix_fpathconf (fd, name);
+     }
+diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c
+index edc691e..de91a45 100644
+--- a/sysdeps/unix/sysv/linux/pathconf.c
++++ b/sysdeps/unix/sysv/linux/pathconf.c
+@@ -39,8 +39,6 @@ long int
+ __pathconf (const char *file, int name)
+ {
+   struct statfs fsbuf;
+-  int fd;
+-  int flags;
+ 
+   switch (name)
+     {
+@@ -56,21 +54,6 @@ __pathconf (const char *file, int name)
+     case _PC_CHOWN_RESTRICTED:
+       return __statfs_chown_restricted (__statfs (file, &fsbuf), &fsbuf);
+ 
+-    case _PC_PIPE_BUF:
+-      flags = O_RDONLY|O_NONBLOCK|O_NOCTTY;
+-#ifdef O_CLOEXEC
+-      flags |= O_CLOEXEC;
+-#endif
+-      fd = open_not_cancel_2 (file, flags);
+-      if (fd >= 0)
+-	{
+-	  long int r = __fcntl (fd, F_GETPIPE_SZ);
+-	  close_not_cancel_no_status (fd);
+-	  if (r > 0)
+-	    return r;
+-	}
+-      /* FALLTHROUGH */
+-
+     default:
+       return posix_pathconf (file, name);
+     }
diff --git a/glibc-rh977874.patch b/glibc-rh977874.patch
new file mode 100644
index 0000000..1624d9d
--- /dev/null
+++ b/glibc-rh977874.patch
@@ -0,0 +1,148 @@
+commit 7da6d9ed266105e0ebefd01a4b6bf08bf56257c3
+Author: Siddhesh Poyarekar <siddhesh at redhat.com>
+Date:   Tue Feb 26 14:24:40 2013 +0530
+
+    Fix FPE in memusagestat when malloc utilization is zero
+    
+    [BZ #15160]
+    
+    Draw graphs for heap and stack only if MAXSIZE_HEAP and MAXSIZE_STACK
+    are non-zero.
+
+diff --git a/malloc/memusagestat.c b/malloc/memusagestat.c
+index f561e0d..7bbd009 100644
+--- a/malloc/memusagestat.c
++++ b/malloc/memusagestat.c
+@@ -319,17 +319,26 @@ main (int argc, char *argv[])
+ 
+   for (line = 1; line <= 3; ++line)
+     {
+-      cnt = ((ysize - 40) * (maxsize_heap / 4 * line / heap_scale)) /
+-	(maxsize_heap / heap_scale);
+-      gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
+-			 ysize - 20 - cnt, red);
+-      snprintf (buf, sizeof (buf), heap_format, maxsize_heap / 4 * line /
+-		heap_scale);
+-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
+-		     ysize - 26 - cnt, (unsigned char *) buf, red);
+-
+-      cnt2 = ((ysize - 40) * (maxsize_stack / 4 * line / stack_scale)) /
+-	(maxsize_stack / stack_scale);
++      if (maxsize_heap > 0)
++	{
++	  cnt = (((ysize - 40) * (maxsize_heap / 4 * line / heap_scale))
++		 / (maxsize_heap / heap_scale));
++	  gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
++			     ysize - 20 - cnt, red);
++	  snprintf (buf, sizeof (buf), heap_format,
++		    maxsize_heap / 4 * line / heap_scale);
++	  gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
++			 ysize - 26 - cnt, (unsigned char *) buf, red);
++	}
++      else
++	cnt = 0;
++
++      if (maxsize_stack > 0)
++	cnt2 = (((ysize - 40) * (maxsize_stack / 4 * line / stack_scale))
++		/ (maxsize_stack / stack_scale));
++      else
++	cnt2 = 0;
++
+       if (cnt != cnt2)
+ 	gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40,
+ 			   ysize - 20 - cnt2, green);
+@@ -372,7 +381,7 @@ main (int argc, char *argv[])
+ 				    ysize - 14, yellow);
+ 	  previously = now;
+ 
+-	  if (also_total)
++	  if (also_total && maxsize_heap > 0)
+ 	    {
+ 	      size_t new3;
+ 
+@@ -386,21 +395,27 @@ main (int argc, char *argv[])
+ 	      last_total = new3;
+ 	    }
+ 
+-	  // assert (entry.heap <= maxsize_heap);
+-	  new[0] = (ysize - 20) - ((((unsigned long long int) (ysize - 40))
+-				    * entry.heap) / maxsize_heap);
+-	  gdImageLine (im_out, 40 + ((xsize - 80) * (cnt - 1)) / total,
+-		       last_heap, 40 + ((xsize - 80) * cnt) / total, new[0],
+-		       red);
+-	  last_heap = new[0];
+-
+-	  // assert (entry.stack <= maxsize_stack);
+-	  new[1] = (ysize - 20) - ((((unsigned long long int) (ysize - 40))
+-				    * entry.stack) / maxsize_stack);
+-	  gdImageLine (im_out, 40 + ((xsize - 80) * (cnt - 1)) / total,
+-		       last_stack, 40 + ((xsize - 80) * cnt) / total, new[1],
+-		       green);
+-	  last_stack = new[1];
++	  if (maxsize_heap > 0)
++	    {
++	      new[0] = ((ysize - 20)
++			- ((((unsigned long long int) (ysize - 40))
++			    * entry.heap) / maxsize_heap));
++	      gdImageLine (im_out, 40 + ((xsize - 80) * (cnt - 1)) / total,
++			   last_heap, 40 + ((xsize - 80) * cnt) / total,
++			   new[0], red);
++	      last_heap = new[0];
++	    }
++
++	  if (maxsize_stack > 0)
++	    {
++	      new[1] = ((ysize - 20)
++			- ((((unsigned long long int) (ysize - 40))
++			    * entry.stack) / maxsize_stack));
++	      gdImageLine (im_out, 40 + ((xsize - 80) * (cnt - 1)) / total,
++			   last_stack, 40 + ((xsize - 80) * cnt) / total,
++			   new[1], green);
++	      last_stack = new[1];
++	    }
+ 	}
+ 
+       cnt = 0;
+@@ -448,7 +463,7 @@ main (int argc, char *argv[])
+ 	      next_tick += MAX (1, total / 20);
+ 	    }
+ 
+-	  if (also_total)
++	  if (also_total && maxsize_heap > 0)
+ 	    {
+ 	      size_t new3;
+ 
+@@ -459,16 +474,24 @@ main (int argc, char *argv[])
+ 	      last_total = new3;
+ 	    }
+ 
+-	  new[0] = (ysize - 20) - ((((unsigned long long int) (ysize - 40))
+-				    * entry.heap) / maxsize_heap);
+-	  gdImageLine (im_out, last_xpos, last_heap, xpos, new[0], red);
+-	  last_heap = new[0];
++	  if (maxsize_heap > 0)
++	    {
++	      new[0] = ((ysize - 20)
++			- ((((unsigned long long int) (ysize - 40))
++			    * entry.heap) / maxsize_heap));
++	      gdImageLine (im_out, last_xpos, last_heap, xpos, new[0], red);
++	      last_heap = new[0];
++	    }
+ 
+-	  // assert (entry.stack <= maxsize_stack);
+-	  new[1] = (ysize - 20) - ((((unsigned long long int) (ysize - 40))
+-				    * entry.stack) / maxsize_stack);
+-	  gdImageLine (im_out, last_xpos, last_stack, xpos, new[1], green);
+-	  last_stack = new[1];
++	  if (maxsize_stack > 0)
++	    {
++	      new[1] = ((ysize - 20)
++			- ((((unsigned long long int) (ysize - 40))
++			    * entry.stack) / maxsize_stack));
++	      gdImageLine (im_out, last_xpos, last_stack, xpos, new[1],
++			   green);
++	      last_stack = new[1];
++	    }
+ 
+ 	  last_xpos = xpos;
+ 	}
diff --git a/glibc-rh977875.patch b/glibc-rh977875.patch
new file mode 100644
index 0000000..9cbcb3d
--- /dev/null
+++ b/glibc-rh977875.patch
@@ -0,0 +1,96 @@
+commit abe7f530bf5c741fe6f0658da7be59d8db168f7f
+Author: Siddhesh Poyarekar <siddhesh at redhat.com>
+Date:   Wed Apr 10 11:31:46 2013 +0530
+
+    Accept leading and trailing spaces in getdate input string
+    
+    Fixes #15346.
+    
+    The POSIX description of getdate allows for extra spaces in the
+    getdate input string.  __getdate_r uses strptime internally, which
+    works fine with extra spaces between format strings (and hence within
+    an input string) but not with leading and trailing spaces.  So we trim
+    off the leading and trailing spaces before we pass it on to strptime.
+
+diff --git a/time/getdate.c b/time/getdate.c
+index 637dd18..eadebc3 100644
+--- a/time/getdate.c
++++ b/time/getdate.c
+@@ -25,6 +25,8 @@
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
++#include <ctype.h>
++#include <alloca.h>
+ 
+ #define TM_YEAR_BASE 1900
+ 
+@@ -135,6 +137,44 @@ __getdate_r (const char *string, struct tm *tp)
+   /* No threads reading this stream.  */
+   __fsetlocking (fp, FSETLOCKING_BYCALLER);
+ 
++  /* Skip leading whitespace.  */
++  while (isspace (*string))
++    string++;
++
++  size_t inlen, oldlen;
++
++  oldlen = inlen = strlen (string);
++
++  /* Skip trailing whitespace.  */
++  while (inlen > 0 && isspace (string[inlen - 1]))
++    inlen--;
++
++  char *instr = NULL;
++
++  if (inlen < oldlen)
++    {
++      bool using_malloc = false;
++
++      if (__libc_use_alloca (inlen + 1))
++	instr = alloca (inlen + 1);
++      else
++	{
++	  instr = malloc (inlen + 1);
++	  if (instr == NULL)
++	    {
++	      fclose (fp);
++	      return 6;
++	    }
++	  using_malloc = true;
++	}
++      memcpy (instr, string, inlen);
++      instr[inlen] = '\0';
++      string = instr;
++
++      if (!using_malloc)
++	instr = NULL;
++    }
++
+   line = NULL;
+   len = 0;
+   do
+@@ -159,6 +199,8 @@ __getdate_r (const char *string, struct tm *tp)
+     }
+   while (!feof_unlocked (fp));
+ 
++  free (instr);
++
+   /* Free the buffer.  */
+   free (line);
+ 
+diff --git a/time/tst-getdate.c b/time/tst-getdate.c
+index 7604e83..dc8ecf4 100644
+--- a/time/tst-getdate.c
++++ b/time/tst-getdate.c
+@@ -31,6 +31,10 @@ static const struct
+ } tests [] =
+ {
+   {"21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
++  {"21:01:10    1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
++  {"   21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
++  {"21:01:10 1999-1-31   ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
++  {"    21:01:10 1999-1-31   ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
+   {"21:01:10 1999-2-28", "Universal", 0, {10, 1, 21, 28, 1, 99, 0, 0, 0}},
+   {"16:30:46 2000-2-29", "Universal", 0, {46, 30,16, 29, 1, 100, 0, 0, 0}},
+   {"01-08-2000 05:06:07", "Europe/Berlin", 0, {7, 6, 5, 1, 7, 100, 0, 0, 0}}
diff --git a/glibc.spec b/glibc.spec
index cb6a92c..d3566c5 100644
--- a/glibc.spec
+++ b/glibc.spec
@@ -27,7 +27,7 @@
 Summary: The GNU libc libraries
 Name: glibc
 Version: %{glibcversion}
-Release: 9%{?dist}
+Release: 10%{?dist}
 # GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
 # Things that are linked directly into dynamically linked programs
 # and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
@@ -116,6 +116,10 @@ Patch0038: %{name}-rh959034.patch
 #
 Patch1000: %{name}-rh905877.patch
 Patch1001: %{name}-rh958652.patch
+Patch1002: %{name}-rh977870.patch
+Patch1003: %{name}-rh977872.patch
+Patch1004: %{name}-rh977874.patch
+Patch1005: %{name}-rh977875.patch
 
 #
 # Patches submitted, but not yet approved upstream.
@@ -415,6 +419,10 @@ package or when debugging this package.
 %patch0038 -p1
 %patch2039 -p1
 %patch1001 -p1
+%patch1002 -p1
+%patch1003 -p1
+%patch1004 -p1
+%patch1005 -p1
 
 # On powerpc32, hp timing is only available in power4/power6
 # libs, not in base, so pre-power4 dynamic linker is incompatible
@@ -1210,6 +1218,12 @@ rm -f *.filelist*
 %endif
 
 %changelog
+* Tue Jun 25 2013 Siddhesh Poyarekar <siddhesh at redhat.com> - 2.17-10
+  - Preserve errno across _PC_CHOWN_RESTRICTED call on XFS (#977870).
+  - Remove PIPE_BUF Linux-specific code (#977872).
+  - Fix FPE in memusagestat when malloc utilization is zero (#977874).
+  - Accept leading and trailing spaces in getdate input string (#977875).
+
 * Thu Jun 20 2013 Siddhesh Poyarekar <siddhesh at redhat.com> - 2.17-9
   - Set EAI_SYSTEM only when h_errno is NETDB_INTERNAL (#958652).
 


More information about the scm-commits mailing list