Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153445277
D33404.id100079.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
15 KB
Referenced Files
None
Subscribers
None
D33404.id100079.diff
View Options
Index: share/man/man9/VOP_READDIR.9
===================================================================
--- share/man/man9/VOP_READDIR.9
+++ share/man/man9/VOP_READDIR.9
@@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 30, 2020
+.Dd December 13, 2021
.Dt VOP_READDIR 9
.Os
.Sh NAME
@@ -39,7 +39,7 @@
.In sys/dirent.h
.In sys/vnode.h
.Ft int
-.Fn VOP_READDIR "struct vnode *vp" "struct uio *uio" "struct ucred *cred" "int *eofflag" "int *ncookies" "u_long **cookies"
+.Fn VOP_READDIR "struct vnode *vp" "struct uio *uio" "struct ucred *cred" "int *eofflag" "int *ncookies" "uint64_t **cookies"
.Sh DESCRIPTION
Read directory entries.
.Bl -tag -width ncookies
@@ -92,7 +92,7 @@
.Bd -literal
...;
*ncookies = number of entries read;
- *cookies = malloc(*ncookies * sizeof(u_long), M_TEMP, M_WAITOK);
+ *cookies = malloc(*ncookies * sizeof(**cookies), M_TEMP, M_WAITOK);
.Ed
.Sh ERRORS
.Bl -tag -width Er
Index: sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c
===================================================================
--- sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c
+++ sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c
@@ -1665,7 +1665,7 @@
/* ARGSUSED */
static int
zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
- int *ncookies, ulong_t **cookies)
+ int *ncookies, uint64_t **cookies)
{
znode_t *zp = VTOZ(vp);
iovec_t *iovp;
@@ -1687,7 +1687,7 @@
boolean_t check_sysattrs;
uint8_t type;
int ncooks;
- ulong_t *cooks = NULL;
+ uint64_t *cooks = NULL;
int flags = 0;
ZFS_ENTER(zfsvfs);
@@ -1764,7 +1764,7 @@
*/
ncooks = zfs_uio_resid(uio) / (sizeof (struct dirent) -
sizeof (((struct dirent *)NULL)->d_name) + 1);
- cooks = malloc(ncooks * sizeof (ulong_t), M_TEMP, M_WAITOK);
+ cooks = malloc(ncooks * sizeof (*cooks), M_TEMP, M_WAITOK);
*cookies = cooks;
*ncookies = ncooks;
}
@@ -4720,7 +4720,7 @@
struct ucred *a_cred;
int *a_eofflag;
int *a_ncookies;
- ulong_t **a_cookies;
+ uint64_t **a_cookies;
};
#endif
Index: sys/fs/cd9660/cd9660_vnops.c
===================================================================
--- sys/fs/cd9660/cd9660_vnops.c
+++ sys/fs/cd9660/cd9660_vnops.c
@@ -367,7 +367,7 @@
struct uio *uio;
off_t uio_off;
int eofflag;
- u_long *cookies;
+ uint64_t *cookies;
int ncookies;
};
@@ -464,7 +464,7 @@
struct ucred *a_cred;
int *a_eofflag;
int *a_ncookies;
- u_long **a_cookies;
+ uint64_t **a_cookies;
} */ *ap;
{
struct uio *uio = ap->a_uio;
@@ -481,7 +481,7 @@
int reclen;
u_short namelen;
u_int ncookies = 0;
- u_long *cookies = NULL;
+ uint64_t *cookies = NULL;
cd_ino_t ino;
dp = VTOI(vdp);
@@ -504,8 +504,7 @@
* Guess the number of cookies needed.
*/
ncookies = uio->uio_resid / 16;
- cookies = malloc(ncookies * sizeof(u_long),
- M_TEMP, M_WAITOK);
+ cookies = malloc(ncookies * sizeof(*cookies), M_TEMP, M_WAITOK);
idp->cookies = cookies;
idp->ncookies = ncookies;
}
Index: sys/fs/ext2fs/ext2_lookup.c
===================================================================
--- sys/fs/ext2fs/ext2_lookup.c
+++ sys/fs/ext2fs/ext2_lookup.c
@@ -155,7 +155,7 @@
struct buf *bp;
struct inode *ip;
struct ext2fs_direct_2 *dp, *edp;
- u_long *cookies;
+ uint64_t *cookies;
struct dirent dstdp;
off_t offset, startoffset;
size_t readcnt, skipcnt;
Index: sys/fs/fuse/fuse_internal.h
===================================================================
--- sys/fs/fuse/fuse_internal.h
+++ sys/fs/fuse/fuse_internal.h
@@ -252,10 +252,10 @@
};
int fuse_internal_readdir(struct vnode *vp, struct uio *uio, off_t startoff,
struct fuse_filehandle *fufh, struct fuse_iov *cookediov, int *ncookies,
- u_long *cookies);
+ uint64_t *cookies);
int fuse_internal_readdir_processdata(struct uio *uio, off_t startoff,
int *fnd_start, size_t reqsize, void *buf, size_t bufsize,
- struct fuse_iov *cookediov, int *ncookies, u_long **cookiesp);
+ struct fuse_iov *cookediov, int *ncookies, uint64_t **cookiesp);
/* remove */
Index: sys/fs/fuse/fuse_internal.c
===================================================================
--- sys/fs/fuse/fuse_internal.c
+++ sys/fs/fuse/fuse_internal.c
@@ -559,7 +559,7 @@
struct fuse_filehandle *fufh,
struct fuse_iov *cookediov,
int *ncookies,
- u_long *cookies)
+ uint64_t *cookies)
{
int err = 0;
struct fuse_dispatcher fdi;
@@ -625,7 +625,7 @@
size_t bufsize,
struct fuse_iov *cookediov,
int *ncookies,
- u_long **cookiesp)
+ uint64_t **cookiesp)
{
int err = 0;
int oreclen;
@@ -633,7 +633,7 @@
struct dirent *de;
struct fuse_dirent *fudge;
- u_long *cookies;
+ uint64_t *cookies;
cookies = *cookiesp;
if (bufsize < FUSE_NAME_OFFSET)
Index: sys/fs/fuse/fuse_vnops.c
===================================================================
--- sys/fs/fuse/fuse_vnops.c
+++ sys/fs/fuse/fuse_vnops.c
@@ -1730,7 +1730,7 @@
struct ucred *a_cred;
int *a_eofflag;
int *a_ncookies;
- u_long **a_cookies;
+ uint64_t **a_cookies;
};
*/
static int
@@ -1742,7 +1742,7 @@
struct fuse_filehandle *fufh = NULL;
struct fuse_iov cookediov;
int err = 0;
- u_long *cookies;
+ uint64_t *cookies;
off_t startoff;
ssize_t tresid;
int ncookies;
Index: sys/fs/msdosfs/msdosfs_vnops.c
===================================================================
--- sys/fs/msdosfs/msdosfs_vnops.c
+++ sys/fs/msdosfs/msdosfs_vnops.c
@@ -1517,7 +1517,7 @@
struct direntry *dentp;
struct dirent dirbuf;
struct uio *uio = ap->a_uio;
- u_long *cookies = NULL;
+ uint64_t *cookies = NULL;
int ncookies = 0;
off_t offset, off;
int chksum = -1;
@@ -1553,7 +1553,7 @@
if (ap->a_ncookies) {
ncookies = uio->uio_resid / 16;
- cookies = malloc(ncookies * sizeof(u_long), M_TEMP,
+ cookies = malloc(ncookies * sizeof(*cookies), M_TEMP,
M_WAITOK);
*ap->a_cookies = cookies;
*ap->a_ncookies = ncookies;
Index: sys/fs/nfs/xdr_subs.h
===================================================================
--- sys/fs/nfs/xdr_subs.h
+++ sys/fs/nfs/xdr_subs.h
@@ -93,9 +93,11 @@
((((u_quad_t)ntohl(((u_int32_t *)(f))[0])) << 32) | \
(u_quad_t)(ntohl(((u_int32_t *)(f))[1])))
-#define txdr_hyper(f, t) do { \
- ((u_int32_t *)(t))[0] = htonl((u_int32_t)((f) >> 32)); \
- ((u_int32_t *)(t))[1] = htonl((u_int32_t)((f) & 0xffffffff)); \
- } while (0)
+static inline void
+txdr_hyper(uint64_t f, uint32_t* t)
+{
+ t[0] = htonl((u_int32_t)(f >> 32));
+ t[1] = htonl((u_int32_t)(f & 0xffffffff));
+}
#endif /* _NFS_XDR_SUBS_H_ */
Index: sys/fs/nfsserver/nfs_nfsdport.c
===================================================================
--- sys/fs/nfsserver/nfs_nfsdport.c
+++ sys/fs/nfsserver/nfs_nfsdport.c
@@ -2047,7 +2047,7 @@
int nlen, error = 0, getret = 1;
int siz, cnt, fullsiz, eofflag, ncookies;
u_int64_t off, toff, verf __unused;
- u_long *cookies = NULL, *cookiep;
+ uint64_t *cookies = NULL, *cookiep;
struct uio io;
struct iovec iv;
int is_ufs;
@@ -2258,10 +2258,11 @@
(void) nfsm_strtom(nd, dp->d_name, nlen);
if (nd->nd_flag & ND_NFSV3) {
NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
- *tl++ = 0;
- } else
+ txdr_hyper(*cookiep, tl);
+ } else {
NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
- *tl = txdr_unsigned(*cookiep);
+ *tl = txdr_unsigned(*cookiep);
+ }
}
cpos += dp->d_reclen;
dp = (struct dirent *)cpos;
@@ -2308,7 +2309,7 @@
int siz, cnt, fullsiz, eofflag, ncookies, entrycnt;
caddr_t bpos0, bpos1;
u_int64_t off, toff, verf __unused;
- u_long *cookies = NULL, *cookiep;
+ uint64_t *cookies = NULL, *cookiep;
nfsattrbit_t attrbits, rderrbits, savbits;
struct uio io;
struct iovec iv;
@@ -2747,8 +2748,7 @@
*tl = txdr_unsigned(dp->d_fileno);
dirlen += nfsm_strtom(nd, dp->d_name, nlen);
NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
- *tl++ = 0;
- *tl = txdr_unsigned(*cookiep);
+ txdr_hyper(*cookiep, tl);
nfsrv_postopattr(nd, 0, nvap);
dirlen += nfsm_fhtom(nd,(u_int8_t *)&nfh,0,1);
dirlen += (5*NFSX_UNSIGNED+NFSX_V3POSTOPATTR);
@@ -2757,8 +2757,7 @@
} else {
NFSM_BUILD(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
*tl++ = newnfs_true;
- *tl++ = 0;
- *tl = txdr_unsigned(*cookiep);
+ txdr_hyper(*cookiep, tl);
dirlen += nfsm_strtom(nd, dp->d_name, nlen);
if (nvp != NULL) {
supports_nfsv4acls =
Index: sys/fs/nfsserver/nfs_nfsdsubs.c
===================================================================
--- sys/fs/nfsserver/nfs_nfsdsubs.c
+++ sys/fs/nfsserver/nfs_nfsdsubs.c
@@ -1433,13 +1433,13 @@
if (nd->nd_flag & ND_NFSV3) {
fp->fa_type = vtonfsv34_type(nvap->na_type);
fp->fa_mode = vtonfsv34_mode(nvap->na_mode);
- txdr_hyper(nvap->na_size, &fp->fa3_size);
- txdr_hyper(nvap->na_bytes, &fp->fa3_used);
+ txdr_hyper(nvap->na_size, (uint32_t*)&fp->fa3_size);
+ txdr_hyper(nvap->na_bytes, (uint32_t*)&fp->fa3_used);
fp->fa3_rdev.specdata1 = txdr_unsigned(NFSMAJOR(nvap->na_rdev));
fp->fa3_rdev.specdata2 = txdr_unsigned(NFSMINOR(nvap->na_rdev));
fp->fa3_fsid.nfsuquad[0] = 0;
fp->fa3_fsid.nfsuquad[1] = txdr_unsigned(nvap->na_fsid);
- txdr_hyper(nvap->na_fileid, &fp->fa3_fileid);
+ txdr_hyper(nvap->na_fileid, (uint32_t*)&fp->fa3_fileid);
txdr_nfsv3time(&nvap->na_atime, &fp->fa3_atime);
txdr_nfsv3time(&nvap->na_mtime, &fp->fa3_mtime);
txdr_nfsv3time(&nvap->na_ctime, &fp->fa3_ctime);
Index: sys/fs/smbfs/smbfs_vnops.c
===================================================================
--- sys/fs/smbfs/smbfs_vnops.c
+++ sys/fs/smbfs/smbfs_vnops.c
@@ -831,7 +831,7 @@
struct uio *a_uio;
struct ucred *a_cred;
int *a_eofflag;
- u_long *a_cookies;
+ uint64_t *a_cookies;
int a_ncookies;
} */ *ap;
{
Index: sys/fs/tmpfs/tmpfs.h
===================================================================
--- sys/fs/tmpfs/tmpfs.h
+++ sys/fs/tmpfs/tmpfs.h
@@ -455,7 +455,7 @@
struct tmpfs_node *f,
struct componentname *cnp);
int tmpfs_dir_getdents(struct tmpfs_mount *, struct tmpfs_node *,
- struct uio *, int, u_long *, int *);
+ struct uio *, int, uint64_t *, int *);
int tmpfs_dir_whiteout_add(struct vnode *, struct componentname *);
void tmpfs_dir_whiteout_remove(struct vnode *, struct componentname *);
int tmpfs_reg_resize(struct vnode *, off_t, boolean_t);
Index: sys/fs/tmpfs/tmpfs_subr.c
===================================================================
--- sys/fs/tmpfs/tmpfs_subr.c
+++ sys/fs/tmpfs/tmpfs_subr.c
@@ -1527,7 +1527,7 @@
*/
int
tmpfs_dir_getdents(struct tmpfs_mount *tm, struct tmpfs_node *node,
- struct uio *uio, int maxcookies, u_long *cookies, int *ncookies)
+ struct uio *uio, int maxcookies, uint64_t *cookies, int *ncookies)
{
struct tmpfs_dir_cursor dc;
struct tmpfs_dirent *de, *nde;
Index: sys/fs/tmpfs/tmpfs_vnops.c
===================================================================
--- sys/fs/tmpfs/tmpfs_vnops.c
+++ sys/fs/tmpfs/tmpfs_vnops.c
@@ -1389,7 +1389,7 @@
struct uio *uio;
struct tmpfs_mount *tm;
struct tmpfs_node *node;
- u_long **cookies;
+ uint64_t **cookies;
int *eofflag, *ncookies;
ssize_t startresid;
int error, maxcookies;
Index: sys/fs/udf/udf_vnops.c
===================================================================
--- sys/fs/udf/udf_vnops.c
+++ sys/fs/udf/udf_vnops.c
@@ -607,7 +607,7 @@
struct udf_uiodir {
struct dirent *dirent;
- u_long *cookies;
+ uint64_t *cookies;
int ncookies;
int acookies;
int eofflag;
@@ -787,7 +787,7 @@
struct fileid_desc *fid;
struct udf_uiodir uiodir;
struct udf_dirstream *ds;
- u_long *cookies = NULL;
+ uint64_t *cookies = NULL;
int ncookies;
int error = 0;
@@ -804,8 +804,7 @@
* it left off.
*/
ncookies = uio->uio_resid / 8;
- cookies = malloc(sizeof(u_long) * ncookies,
- M_TEMP, M_WAITOK);
+ cookies = malloc(sizeof(*cookies) * ncookies, M_TEMP, M_WAITOK);
if (cookies == NULL)
return (ENOMEM);
uiodir.ncookies = ncookies;
Index: sys/fs/unionfs/union_vnops.c
===================================================================
--- sys/fs/unionfs/union_vnops.c
+++ sys/fs/unionfs/union_vnops.c
@@ -1509,7 +1509,7 @@
struct thread *td;
struct vattr va;
- u_long *cookies_bk;
+ uint64_t *cookies_bk;
int error;
int eofflag;
int locked;
@@ -1660,17 +1660,17 @@
if (cookies_bk != NULL) {
/* merge cookies */
int size;
- u_long *newcookies, *pos;
+ uint64_t *newcookies, *pos;
size = *(ap->a_ncookies) + ncookies_bk;
- newcookies = (u_long *) malloc(size * sizeof(u_long),
+ newcookies = (uint64_t *) malloc(size * sizeof(*newcookies),
M_TEMP, M_WAITOK);
pos = newcookies;
- memcpy(pos, cookies_bk, ncookies_bk * sizeof(u_long));
+ memcpy(pos, cookies_bk, ncookies_bk * sizeof(*newcookies));
pos += ncookies_bk;
memcpy(pos, *(ap->a_cookies),
- *(ap->a_ncookies) * sizeof(u_long));
+ *(ap->a_ncookies) * sizeof(*newcookies));
free(cookies_bk, M_TEMP);
free(*(ap->a_cookies), M_TEMP);
*(ap->a_ncookies) = size;
Index: sys/kern/uipc_mqueue.c
===================================================================
--- sys/kern/uipc_mqueue.c
+++ sys/kern/uipc_mqueue.c
@@ -1369,7 +1369,7 @@
struct ucred *a_cred;
int *a_eofflag;
int *a_ncookies;
- u_long **a_cookies;
+ uint64_t **a_cookies;
};
#endif
Index: sys/kern/vfs_subr.c
===================================================================
--- sys/kern/vfs_subr.c
+++ sys/kern/vfs_subr.c
@@ -6419,7 +6419,7 @@
("NULL ap->a_cookies value with non-NULL ap->a_ncookies!"));
*ap->a_cookies = realloc(*ap->a_cookies,
- (*ap->a_ncookies + 1) * sizeof(u_long), M_TEMP, M_WAITOK | M_ZERO);
+ (*ap->a_ncookies + 1) * sizeof(uint64_t), M_TEMP, M_WAITOK | M_ZERO);
(*ap->a_cookies)[*ap->a_ncookies] = off;
*ap->a_ncookies += 1;
return (0);
Index: sys/kern/vnode_if.src
===================================================================
--- sys/kern/vnode_if.src
+++ sys/kern/vnode_if.src
@@ -392,7 +392,7 @@
IN struct ucred *cred;
INOUT int *eofflag;
OUT int *ncookies;
- INOUT u_long **cookies;
+ INOUT uint64_t **cookies;
};
Index: sys/nfs/xdr_subs.h
===================================================================
--- sys/nfs/xdr_subs.h
+++ sys/nfs/xdr_subs.h
@@ -83,10 +83,12 @@
#define fxdr_hyper(f) \
((((u_quad_t)ntohl(((u_int32_t *)(f))[0])) << 32) | \
(u_quad_t)(ntohl(((u_int32_t *)(f))[1])))
-#define txdr_hyper(f, t) \
-do { \
- ((u_int32_t *)(t))[0] = htonl((u_int32_t)((f) >> 32)); \
- ((u_int32_t *)(t))[1] = htonl((u_int32_t)((f) & 0xffffffff)); \
-} while (0)
+
+static inline void
+txdr_hyper(uint64_t f, uint32_t* t)
+{
+ t[0] = htonl((u_int32_t)(f >> 32));
+ t[1] = htonl((u_int32_t)(f & 0xffffffff));
+}
#endif
Index: sys/sys/param.h
===================================================================
--- sys/sys/param.h
+++ sys/sys/param.h
@@ -76,7 +76,7 @@
* cannot include sys/param.h and should only be updated here.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1400044
+#define __FreeBSD_version 1400045
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
Index: sys/ufs/ufs/ufs_vnops.c
===================================================================
--- sys/ufs/ufs/ufs_vnops.c
+++ sys/ufs/ufs/ufs_vnops.c
@@ -2336,7 +2336,7 @@
struct ucred *a_cred;
int *a_eofflag;
int *a_ncookies;
- u_long **a_cookies;
+ uint64_t **a_cookies;
} */ *ap;
{
struct vnode *vp = ap->a_vp;
@@ -2344,7 +2344,7 @@
struct buf *bp;
struct inode *ip;
struct direct *dp, *edp;
- u_long *cookies;
+ uint64_t *cookies;
struct dirent dstdp;
off_t offset, startoffset;
size_t readcnt, skipcnt;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 22, 5:28 AM (13 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31955743
Default Alt Text
D33404.id100079.diff (15 KB)
Attached To
Mode
D33404: nfs: don't truncate directory cookies to 32-bits in the NFS server
Attached
Detach File
Event Timeline
Log In to Comment