This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[hurd,commited 2/8] hurd: Detect 32bit overflow in value returned by lseek
- From: Samuel Thibault <samuel dot thibault at ens-lyon dot org>
- To: libc-alpha at sourceware dot org
- Cc: Samuel Thibault <samuel dot thibault at ens-lyon dot org>
- Date: Sat, 16 Jun 2018 03:06:21 +0200
- Subject: [hurd,commited 2/8] hurd: Detect 32bit overflow in value returned by lseek
- References: <20180616010627.29577-1-samuel.thibault@ens-lyon.org>
* sysdeps/mach/hurd/lseek.c: Include <errno.h>.
* sysdeps/mach/hurd/lseek.c (__libc_lseek): Check that the value returned
by __lseek64 can fit off_t, return EOVERFLOW otherwise.
---
ChangeLog | 3 +++
sysdeps/mach/hurd/lseek.c | 12 +++++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 74c14d4f84..0a2e082d73 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@
of sendfile.
* sysdeps/mach/hurd/sendfile64.c (sendfile64): Rename to __sendfile64.
(sendfile64): New strong alias.
+ * sysdeps/mach/hurd/lseek.c: Include <errno.h>.
+ * sysdeps/mach/hurd/lseek.c (__libc_lseek): Check that the value
+ returned by __lseek64 can fit off_t, return EOVERFLOW otherwise.
2018-06-15 Joseph Myers <joseph@codesourcery.com>
diff --git a/sysdeps/mach/hurd/lseek.c b/sysdeps/mach/hurd/lseek.c
index 6677e01202..0a4077268a 100644
--- a/sysdeps/mach/hurd/lseek.c
+++ b/sysdeps/mach/hurd/lseek.c
@@ -17,12 +17,22 @@
#include <unistd.h>
#include <sys/types.h>
+#include <errno.h>
/* Seek to OFFSET on FD, starting from WHENCE. */
off_t
__libc_lseek (int fd, off_t offset, int whence)
{
- return __libc_lseek64 (fd, (off64_t) offset, whence);
+ off64_t res64 = __libc_lseek64 (fd, (off64_t) offset, whence);
+ off_t res = (off_t) res64;
+
+ if (sizeof res != sizeof res64 && res != res64)
+ {
+ __set_errno (EOVERFLOW);
+ return (off_t) -1;
+ }
+
+ return res;
}
weak_alias (__libc_lseek, __lseek)
--
2.17.1