This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.14-264-ga0f33f9


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  a0f33f996f7986dbf37631a4577f8565b42df29e (commit)
      from  762011fe9ffded81448be4dc50a2b27faaafe4c9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a0f33f996f7986dbf37631a4577f8565b42df29e

commit a0f33f996f7986dbf37631a4577f8565b42df29e
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Thu Sep 8 19:48:47 2011 -0400

    Add range checking for FD_SET, FD_CLR, and FD_ISSET

diff --git a/ChangeLog b/ChangeLog
index 347e7e8..dbb5e75 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,19 @@
 2011-09-08  Ulrich Drepper  <drepper@gmail.com>
 
+	* misc/Makefile (headers): Add bits/select2.h.
+	* misc/sys/select.h: Include bits/select2.h for _FORTIFY_SOURCE.
+	* misc/bits/select2.h: New file.
+	* include/bits/select2.h: New file.
+	* debug/Makefile (routines): Add fdelt_chk.
+	* debug/Versions: Export __fdelt_chk and __fdelt_warn for GLIBC_2.15.
+	* debug/tst-chk1.c (do_test): Add tests for FD_SET, FD_CLR, and
+	FD_ISSET.
+	* debug/fdelt_chk.c: New file.
+
 	* wcsmbs/test-wcscmp.c: Moved from string/*.  Adjust.
 	* wcsmbs/test-wmemcmp.c: Likewise.
 	* string/Makefile (strop-tests): Remove wcscmp and wmemcmp.
-	* wcsmbs/Makefile (strop-tests): Add  wcscmp and wmemcmp.
+	* wcsmbs/Makefile (strop-tests): Add wcscmp and wmemcmp.
 
 2011-09-08  Liubov Dmitrieva  <liubov.dmitrieva@gmail.com>
 
diff --git a/NEWS b/NEWS
index 6e2ab66..b4a7045 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes.  2011-9-7
+GNU C Library NEWS -- history of user-visible changes.  2011-9-8
 Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
 See the end for copying conditions.
 
@@ -34,6 +34,9 @@ Version 2.15
 
 * New interfaces: scandirat, scandirat64
   Implemented by Ulrich Drepper.
+
+* Checking versions of FD_SET, FD_CLR, and FD_ISSET added.
+  Implemented by Ulrich Drepper.
 
 Version 2.14
 
diff --git a/debug/Makefile b/debug/Makefile
index d7c51ca..e6842f0 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1998-2001,2004-2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1998-2001,2004-2008, 2009, 2011 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
@@ -44,6 +44,7 @@ routines  = backtrace backtracesyms backtracesymsfd noophooks \
 	    wcstombs_chk asprintf_chk vasprintf_chk dprintf_chk \
 	    vdprintf_chk obprintf_chk \
 	    longjmp_chk ____longjmp_chk \
+	    fdelt_chk \
 	    stack_chk_fail fortify_fail \
 	    $(static-only-routines)
 static-only-routines := warning-nop stack_chk_fail_local
diff --git a/debug/Versions b/debug/Versions
index ff40107..3db4a29 100644
--- a/debug/Versions
+++ b/debug/Versions
@@ -49,6 +49,9 @@ libc {
   GLIBC_2.11 {
     __longjmp_chk;
   }
+  GLIBC_2.15 {
+    __fdelt_chk; __fdelt_warn;
+  }
   GLIBC_PRIVATE {
     __fortify_fail;
   }
diff --git a/debug/fdelt_chk.c b/debug/fdelt_chk.c
new file mode 100644
index 0000000..7d9e4b9
--- /dev/null
+++ b/debug/fdelt_chk.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sys/select.h>
+
+
+unsigned long int
+__fdelt_chk (unsigned long int d)
+{
+  if (d >= FD_SETSIZE)
+    __chk_fail ();
+
+  return d / __NFDBITS;
+}
+strong_alias (__fdelt_chk, __fdelt_warn)
diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c
index e03f3db..0ec8ab0 100644
--- a/debug/tst-chk1.c
+++ b/debug/tst-chk1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2004,2005,2006,2007,2008,2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
 
@@ -29,6 +29,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <wchar.h>
+#include <sys/select.h>
 #include <sys/socket.h>
 #include <sys/un.h>
 
@@ -107,11 +108,11 @@ int num2 = 987654;
       FAIL ();					\
     }
 #if __USE_FORTIFY_LEVEL >= 2 && (!defined __cplusplus || defined __va_arg_pack)
-#define CHK_FAIL2_START CHK_FAIL_START
-#define CHK_FAIL2_END CHK_FAIL_END
+# define CHK_FAIL2_START CHK_FAIL_START
+# define CHK_FAIL2_END CHK_FAIL_END
 #else
-#define CHK_FAIL2_START
-#define CHK_FAIL2_END
+# define CHK_FAIL2_START
+# define CHK_FAIL2_END
 #endif
 
 static int
@@ -1448,5 +1449,26 @@ do_test (void)
   CHK_FAIL_END
 #endif
 
+  fd_set s;
+  FD_ZERO (&s);
+  FD_SET (FD_SETSIZE - 1, &s);
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  FD_SET (FD_SETSIZE, &s);
+  CHK_FAIL_END
+#endif
+  FD_CLR (FD_SETSIZE - 1, &s);
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  FD_CLR (FD_SETSIZE, &s);
+  CHK_FAIL_END
+#endif
+  FD_ISSET (FD_SETSIZE - 1, &s);
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  FD_ISSET (FD_SETSIZE, &s);
+  CHK_FAIL_END
+#endif
+
   return ret;
 }
diff --git a/include/bits/select2.h b/include/bits/select2.h
new file mode 100644
index 0000000..08f7259
--- /dev/null
+++ b/include/bits/select2.h
@@ -0,0 +1 @@
+#include "../../misc/bits/select2.h"
diff --git a/misc/Makefile b/misc/Makefile
index 52b13da..6be2bc7 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -31,7 +31,8 @@ headers	:= sys/uio.h bits/uio.h sys/ioctl.h bits/ioctls.h bits/ioctl-types.h \
 	   sys/select.h ustat.h sys/ustat.h bits/ustat.h sys/sysinfo.h \
 	   regexp.h bits/select.h bits/mman.h sys/xattr.h \
 	   syslog.h sys/syslog.h \
-	   bits/syslog.h bits/syslog-ldbl.h bits/syslog-path.h bits/error.h
+	   bits/syslog.h bits/syslog-ldbl.h bits/syslog-path.h bits/error.h \
+	   bits/select2.h
 
 routines := brk sbrk sstk ioctl \
 	    readv writev preadv preadv64 pwritev pwritev64 \
diff --git a/misc/bits/select2.h b/misc/bits/select2.h
new file mode 100644
index 0000000..27f4201
--- /dev/null
+++ b/misc/bits/select2.h
@@ -0,0 +1,34 @@
+/* Checking macros for select functions.
+   Copyright (C) 2011 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _SYS_SELECT_H
+# error "Never include <bits/select2.h> directly; use <sys/select.h> instead."
+#endif
+
+/* Helper functions to issue warnings and errors when needed.  */
+extern unsigned long int __fdelt_chk (unsigned long int __d);
+extern unsigned long int __fdelt_warn (unsigned long int __d)
+  __warnattr ("bit outside of fd_set selected");
+#undef __FDELT
+#define	__FDELT(d) \
+  ({ unsigned long int __d = d;						    \
+     (__builtin_constant_p (__d)					    \
+      ? (__d >= __FD_SETSIZE						    \
+	 ? __fdelt_warn (__d) : (__d / __NFDBITS))			    \
+      : __fdelt_chk (__d)); })
diff --git a/misc/sys/select.h b/misc/sys/select.h
index f4a37be..295d3bb 100644
--- a/misc/sys/select.h
+++ b/misc/sys/select.h
@@ -1,5 +1,5 @@
 /* `fd_set' type and related macros, and `select'/`pselect' declarations.
-   Copyright (C) 1996-2003, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1996-2003, 2009, 2011 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
@@ -125,6 +125,12 @@ extern int pselect (int __nfds, fd_set *__restrict __readfds,
 		    const __sigset_t *__restrict __sigmask);
 #endif
 
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __GNUC__
+# include <bits/select2.h>
+#endif
+
 __END_DECLS
 
 #endif /* sys/select.h */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |   12 ++++++-
 NEWS                                          |    5 ++-
 debug/Makefile                                |    3 +-
 debug/Versions                                |    3 ++
 sysdeps/x86_64/memmove.c => debug/fdelt_chk.c |   17 +++++----
 debug/tst-chk1.c                              |   32 +++++++++++++++---
 include/bits/select2.h                        |    1 +
 misc/Makefile                                 |    3 +-
 math/test-powl.c => misc/bits/select2.h       |   45 ++++++++-----------------
 misc/sys/select.h                             |    8 ++++-
 10 files changed, 81 insertions(+), 48 deletions(-)
 copy sysdeps/x86_64/memmove.c => debug/fdelt_chk.c (79%)
 create mode 100644 include/bits/select2.h
 copy math/test-powl.c => misc/bits/select2.h (57%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]