hurd: Detect 32bit overflow in value returned by lseek

* 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.
This commit is contained in:
Samuel Thibault 2018-06-16 01:00:00 +02:00
parent 298a8b59d4
commit faf7bbc2d0
2 changed files with 14 additions and 1 deletions

View File

@ -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>

View File

@ -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)