mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-13 05:41:26 +01:00
ino64: Remove 'forward compat' code for this
Forward compatibility code was added for running newer ino64 binaries on older kernels as a transition aide. Now that ino64 has been in the tree 6 years, this code is no longer useful and should have been removed long ago. Remove it now. Should be no user-visible changes at this point as all the 'upgrade' scenarios it was intended for are long since past. Also need to remove this stuff from rtld since the _foo versions no longer exist. Sponsored by: Netflix Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D42382
This commit is contained in:
parent
1fc478fb48
commit
0527c9bdc7
12
UPDATING
12
UPDATING
@ -27,6 +27,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 15.x IS SLOW:
|
||||
world, or to merely disable the most expensive debugging functionality
|
||||
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||
|
||||
20231027:
|
||||
Forward compatibility (running the new code on old kernels) for the
|
||||
"ino64" project have been removed. The need for it has passed long ago.
|
||||
|
||||
20231018:
|
||||
Commit 57ce37f9dcd0 changed the internal KAPI between the
|
||||
nfscommon and nfscl modules. Both must be rebuilt from sources.
|
||||
@ -1573,6 +1577,14 @@ https://lists.freebsd.org/archives/freebsd-current/2021-June/000153.html
|
||||
Switch back to the BSDL dtc (Device Tree Compiler). Set WITH_GPL_DTC
|
||||
if you require the GPL compiler.
|
||||
|
||||
20170619:
|
||||
Forward compatibility for the "ino64" project have been committed. This
|
||||
will allow most new binaries to run on older kernels in a limited
|
||||
fashion. This prevents many of the common foot-shooting actions in the
|
||||
upgrade as well as the limited ability to roll back the kernel across
|
||||
the ino64 upgrade. Complicated use cases may not work properly, though
|
||||
enough simpler ones work to allow recovery in most situations.
|
||||
|
||||
20170618:
|
||||
The internal ABI used for communication between the NFS kernel modules
|
||||
was changed by r320085, so __FreeBSD_version was bumped to
|
||||
|
@ -38,14 +38,6 @@ SRCS+= getdents.c lstat.c mknod.c stat.c
|
||||
NOASM+= sched_getcpu.o
|
||||
PSEUDO+= _sched_getcpu.o
|
||||
|
||||
SRCS+= fstat.c fstatat.c fstatfs.c getfsstat.c statfs.c
|
||||
NOASM+= fstat.o fstatat.o fstatfs.o getfsstat.o statfs.o
|
||||
PSEUDO+= _fstat.o _fstatat.o _fstatfs.o _getfsstat.o _statfs.o
|
||||
|
||||
SRCS+= getdirentries.c
|
||||
NOASM+= getdirentries.o
|
||||
PSEUDO+= _getdirentries.o
|
||||
|
||||
SRCS+= brk.c
|
||||
SRCS+= closefrom.c
|
||||
SRCS+= pipe.c
|
||||
|
@ -1,99 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Forward compatibility shim to convert old stat buffer to
|
||||
* new so we can call the old system call, but return data in
|
||||
* the new system call's format.
|
||||
*/
|
||||
#define _WANT_FREEBSD11_STATFS
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/mount.h>
|
||||
|
||||
#define _WANT_FREEBSD11_STAT
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#define INO64_FIRST 1200031
|
||||
|
||||
static __inline void
|
||||
__stat11_to_stat(const struct freebsd11_stat *sb11, struct stat *sb)
|
||||
{
|
||||
|
||||
sb->st_dev = sb11->st_dev;
|
||||
sb->st_ino = sb11->st_ino;
|
||||
sb->st_nlink = sb11->st_nlink;
|
||||
sb->st_mode = sb11->st_mode;
|
||||
sb->st_uid = sb11->st_uid;
|
||||
sb->st_gid = sb11->st_gid;
|
||||
sb->st_rdev = sb11->st_rdev;
|
||||
sb->st_atim = sb11->st_atim;
|
||||
sb->st_mtim = sb11->st_mtim;
|
||||
sb->st_ctim = sb11->st_ctim;
|
||||
#ifdef __STAT_TIME_T_EXT
|
||||
sb->st_atim_ext = 0;
|
||||
sb->st_mtim_ext = 0;
|
||||
sb->st_ctim_ext = 0;
|
||||
sb->st_btim_ext = 0;
|
||||
#endif
|
||||
sb->st_birthtim = sb11->st_birthtim;
|
||||
sb->st_size = sb11->st_size;
|
||||
sb->st_blocks = sb11->st_blocks;
|
||||
sb->st_blksize = sb11->st_blksize;
|
||||
sb->st_flags = sb11->st_flags;
|
||||
sb->st_gen = sb11->st_gen;
|
||||
sb->st_padding0 = 0;
|
||||
sb->st_padding1 = 0;
|
||||
memset(sb->st_spare, 0, sizeof(sb->st_spare));
|
||||
}
|
||||
|
||||
static __inline void
|
||||
__statfs11_to_statfs(const struct freebsd11_statfs *sf11, struct statfs *sf)
|
||||
{
|
||||
|
||||
sf->f_version = STATFS_VERSION;
|
||||
sf->f_type = sf11->f_type;
|
||||
sf->f_flags = sf11->f_flags;
|
||||
sf->f_bsize = sf11->f_bsize;
|
||||
sf->f_iosize = sf11->f_iosize;
|
||||
sf->f_blocks = sf11->f_blocks;
|
||||
sf->f_bfree = sf11->f_bfree;
|
||||
sf->f_bavail = sf11->f_bavail;
|
||||
sf->f_files = sf11->f_files;
|
||||
sf->f_ffree = sf11->f_ffree;
|
||||
sf->f_syncwrites = sf11->f_syncwrites;
|
||||
sf->f_asyncwrites = sf11->f_asyncwrites;
|
||||
sf->f_syncreads = sf11->f_syncreads;
|
||||
sf->f_asyncreads = sf11->f_asyncreads;
|
||||
sf->f_namemax = sf11->f_namemax;
|
||||
sf->f_owner = sf11->f_owner;
|
||||
sf->f_fsid = sf11->f_fsid;
|
||||
memset(sf->f_spare, 0, sizeof(sf->f_spare));
|
||||
memset(sf->f_charspare, 0, sizeof(sf->f_charspare));
|
||||
strlcpy(sf->f_fstypename, sf11->f_fstypename, sizeof(sf->f_fstypename));
|
||||
strlcpy(sf->f_mntfromname, sf11->f_mntfromname, sizeof(sf->f_mntfromname));
|
||||
strlcpy(sf->f_mntonname, sf11->f_mntonname, sizeof(sf->f_mntonname));
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
#undef fstat
|
||||
__weak_reference(_fstat, fstat);
|
||||
|
||||
#pragma weak _fstat
|
||||
int
|
||||
_fstat(int fd, struct stat *sb)
|
||||
{
|
||||
struct freebsd11_stat stat11;
|
||||
int rv;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_fstat(fd, sb));
|
||||
rv = syscall(SYS_freebsd11_fstat, fd, &stat11);
|
||||
if (rv == 0)
|
||||
__stat11_to_stat(&stat11, sb);
|
||||
return (rv);
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
fstatat(int fd, const char *path, struct stat *sb, int flag)
|
||||
{
|
||||
struct freebsd11_stat stat11;
|
||||
int rv;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_fstatat(fd, path, sb, flag));
|
||||
rv = syscall(SYS_freebsd11_fstatat, fd, path, &stat11, flag);
|
||||
if (rv == 0)
|
||||
__stat11_to_stat(&stat11, sb);
|
||||
return (rv);
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
#undef fstatfs
|
||||
__weak_reference(_fstatfs, fstatfs);
|
||||
|
||||
#pragma weak _fstatfs
|
||||
int
|
||||
_fstatfs(int fd, struct statfs *buf)
|
||||
{
|
||||
struct freebsd11_statfs statfs11;
|
||||
int rv;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_fstatfs(fd, buf));
|
||||
rv = syscall(SYS_freebsd11_fstatfs, fd, &statfs11);
|
||||
if (rv == 0)
|
||||
__statfs11_to_statfs(&statfs11, buf);
|
||||
return (rv);
|
||||
}
|
@ -34,11 +34,6 @@
|
||||
ssize_t
|
||||
getdents(int fd, char *buf, size_t nbytes)
|
||||
{
|
||||
/*
|
||||
* _getdirentries knows how to call the right thing and
|
||||
* return it in the new format. It assumes that the entire
|
||||
* libc expecting the new format.
|
||||
*/
|
||||
|
||||
return (_getdirentries(fd, buf, nbytes, NULL));
|
||||
return (__sys_getdirentries(fd, buf, nbytes, NULL));
|
||||
}
|
||||
|
@ -1,114 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#define _WANT_FREEBSD11_DIRENT
|
||||
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "libc_private.h"
|
||||
|
||||
static ssize_t
|
||||
__cvt_dirents_from11(const char *de11, ssize_t len11, char *de, ssize_t len)
|
||||
{
|
||||
struct dirent *dst;
|
||||
const struct freebsd11_dirent *src;
|
||||
const char *edst, *esrc;
|
||||
ssize_t rlen;
|
||||
|
||||
src = (const struct freebsd11_dirent *)de11;
|
||||
dst = (struct dirent *)de;
|
||||
esrc = de11 + len11;
|
||||
edst = de + len;
|
||||
while ((const char *)src < esrc && (const char *)dst < edst) {
|
||||
rlen = roundup(offsetof(struct dirent, d_name) + src->d_namlen + 1, 8);
|
||||
if ((const char *)dst + rlen >= edst)
|
||||
break;
|
||||
dst->d_fileno = src->d_fileno;
|
||||
dst->d_off = 0; /* nothing uses it yet, so safe for now */
|
||||
dst->d_reclen = rlen;
|
||||
dst->d_type = src->d_type;
|
||||
dst->d_pad0 = 0;
|
||||
dst->d_namlen = src->d_namlen;
|
||||
dst->d_pad1 = 0;
|
||||
memset(dst->d_name, 0, roundup(src->d_namlen + 1, 8));
|
||||
memcpy(dst->d_name, src->d_name, src->d_namlen);
|
||||
dst = (struct dirent *)((char *)dst + rlen);
|
||||
src = (const struct freebsd11_dirent *)((const char *)src + src->d_reclen);
|
||||
}
|
||||
return ((char *)dst - de);
|
||||
}
|
||||
|
||||
#undef getdirentries
|
||||
__weak_reference(_getdirentries, getdirentries);
|
||||
|
||||
#pragma weak _getdirentries
|
||||
ssize_t
|
||||
_getdirentries(int fd, char *buf, size_t nbytes, off_t *basep)
|
||||
{
|
||||
char *oldbuf;
|
||||
size_t len;
|
||||
ssize_t rv;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_getdirentries(fd, buf, nbytes, basep));
|
||||
|
||||
/*
|
||||
* Because the old system call returns entries that are smaller than the
|
||||
* new, we could wind up in a situation where we have too many to fit in
|
||||
* the buffer with the new encoding. So sacrifice a small bit of
|
||||
* efficiency to ensure that never happens. We pick 1/4 the size round
|
||||
* up to the next DIRBLKSIZ. This will guarnatee enough room exists in
|
||||
* the dst buffer due to changes in efficiency in packing dirent
|
||||
* entries. We don't check against minimum block size to avoid a lot of
|
||||
* stat calls, we'll see if that's wise or not.
|
||||
* TBD: Will this difference matter to lseek?
|
||||
*/
|
||||
len = roundup(nbytes / 4, DIRBLKSIZ);
|
||||
oldbuf = malloc(len);
|
||||
if (oldbuf == NULL) {
|
||||
errno = EINVAL; /* ENOMEM not in possible list */
|
||||
return (-1);
|
||||
}
|
||||
rv = syscall(SYS_freebsd11_getdirentries, fd, oldbuf, len, basep);
|
||||
if (rv == -1) {
|
||||
free(oldbuf);
|
||||
return (rv);
|
||||
}
|
||||
if (rv > 0)
|
||||
rv = __cvt_dirents_from11(oldbuf, rv, buf, nbytes);
|
||||
free(oldbuf);
|
||||
|
||||
return (rv);
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <sys/errno.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
getfsstat(struct statfs *buf, long bufsize, int flags)
|
||||
{
|
||||
struct freebsd11_statfs *statfs11 = NULL;
|
||||
ssize_t len = 0;
|
||||
int rv, i;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_getfsstat(buf, bufsize, flags));
|
||||
if (buf != NULL) {
|
||||
len = sizeof(struct freebsd11_statfs) * /* Round down on purpose to avoid */
|
||||
(bufsize / sizeof(struct statfs)); /* overflow on translation. */
|
||||
statfs11 = malloc(len);
|
||||
if (statfs11 == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
rv = syscall(SYS_freebsd11_getfsstat, statfs11, len, flags);
|
||||
if (rv != -1 && buf != NULL) {
|
||||
for (i = 0; i < rv; i++)
|
||||
__statfs11_to_statfs(&statfs11[i], &buf[i]);
|
||||
}
|
||||
free(statfs11);
|
||||
return (rv);
|
||||
}
|
@ -27,22 +27,15 @@
|
||||
#include <sys/cdefs.h>
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
lstat(const char *path, struct stat *sb)
|
||||
{
|
||||
struct freebsd11_stat stat11;
|
||||
int rv;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_fstatat(AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW));
|
||||
rv = syscall(SYS_freebsd11_lstat, path, &stat11);
|
||||
if (rv == 0)
|
||||
__stat11_to_stat(&stat11, sb);
|
||||
return (rv);
|
||||
return (__sys_fstatat(AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW));
|
||||
}
|
||||
|
@ -27,22 +27,15 @@
|
||||
#include <sys/cdefs.h>
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
stat(const char *path, struct stat *sb)
|
||||
{
|
||||
struct freebsd11_stat stat11;
|
||||
int rv;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_fstatat(AT_FDCWD, path, sb, 0));
|
||||
rv = syscall(SYS_freebsd11_stat, path, &stat11);
|
||||
if (rv == 0)
|
||||
__stat11_to_stat(&stat11, sb);
|
||||
return (rv);
|
||||
return (__sys_fstatat(AT_FDCWD, path, sb, 0));
|
||||
}
|
||||
|
@ -1,47 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include "namespace.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "compat-ino64.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
statfs(const char *path, struct statfs *buf)
|
||||
{
|
||||
struct freebsd11_statfs statfs11;
|
||||
int rv;
|
||||
|
||||
if (__getosreldate() >= INO64_FIRST)
|
||||
return (__sys_statfs(path, buf));
|
||||
rv = syscall(SYS_freebsd11_statfs, path, &statfs11);
|
||||
if (rv == 0)
|
||||
__statfs11_to_statfs(&statfs11, buf);
|
||||
return (rv);
|
||||
}
|
@ -56,8 +56,8 @@ CFLAGS.strtok.c+=-Wno-cast-qual
|
||||
_libc_other_objects= sigsetjmp lstat stat fstat fstatat fstatfs syscall \
|
||||
cerror geteuid getegid sigfastblock munmap mprotect \
|
||||
sysarch __sysctl issetugid __getcwd utrace getpid \
|
||||
thr_self thr_kill pread mmap lseek _exit _fstat _fstatat _fstatfs \
|
||||
getdirentries _getdirentries _close _fcntl _open _openat _read \
|
||||
thr_self thr_kill pread mmap lseek _exit \
|
||||
getdirentries _close _fcntl _open _openat _read \
|
||||
_sigprocmask _write readlink __realpathat _setjmp setjmp setjmperr
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user