about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--debug/read_chk.c4
-rw-r--r--debug/readlink_chk.c4
3 files changed, 9 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 45915dc6e6..ac79e43fd3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,11 @@
 
 	* posix/bits/unistd.h: Avoid calling __*_chk variants if we can
 	determine the call will never trigger a failure.
+	* debug/read_chk.c (__read_chk): Always fail if the buffer is too
+	small.
+	* debug/readlink_chk.c (__readlink_chk): Likewise.
+	* debug/pread64_chk.c (__pread64_chk): Likewise.
+	* debug/pread_chk.c (__pread_chk): Likewise.
 
 	* sysdeps/i386/i686/memset_chk.S: Remove alias and warning.
 	* sysdeps/x86_64/memset_chk.S: Likewise.
diff --git a/debug/read_chk.c b/debug/read_chk.c
index f738c48d6b..da2bc945b7 100644
--- a/debug/read_chk.c
+++ b/debug/read_chk.c
@@ -31,8 +31,8 @@ __read_chk (int fd, void *buf, size_t nbytes, size_t buflen)
     __chk_fail ();
 
 #ifdef HAVE_INLINED_SYSCALLS
-  return = INLINE_SYSCALL (read, 3, fd, buf, nbytes);
+  return INLINE_SYSCALL (read, 3, fd, buf, nbytes);
 #else
-  return = __read (fd, buf, nbytes);
+  return __read (fd, buf, nbytes);
 #endif
 }
diff --git a/debug/readlink_chk.c b/debug/readlink_chk.c
index d8d61dc699..ac18ee2c29 100644
--- a/debug/readlink_chk.c
+++ b/debug/readlink_chk.c
@@ -31,8 +31,8 @@ __readlink_chk (const char *path, void *buf, size_t len, size_t buflen)
     __chk_fail ();
 
 #ifdef HAVE_INLINED_SYSCALLS
-  return INLINE_SYSCALL (readlink, 3, path, buf, MIN (len, buflen + 1));
+  return INLINE_SYSCALL (readlink, 3, path, buf, len);
 #else
-  return __readlink (path, buf, MIN (len, buflen + 1));
+  return __readlink (path, buf, len);
 #endif
 }