The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=156745b42d9e6dfa3d9c6dc480db7836683850cf

commit 156745b42d9e6dfa3d9c6dc480db7836683850cf
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2022-06-05 18:49:09 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2022-06-06 19:27:36 +0000

    fdescfs: allow chown/utime etc on fdescfs fd for underlying files opened 
with O_PATH
    
    Reported and tested by: dchagin
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D35410
---
 sys/fs/fdescfs/fdesc_vnops.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/sys/fs/fdescfs/fdesc_vnops.c b/sys/fs/fdescfs/fdesc_vnops.c
index 2fbdcac34583..ae6d60d0fc55 100644
--- a/sys/fs/fdescfs/fdesc_vnops.c
+++ b/sys/fs/fdescfs/fdesc_vnops.c
@@ -492,9 +492,15 @@ fdesc_setattr(struct vop_setattr_args *ap)
 
        /*
         * Allow setattr where there is an underlying vnode.
+        * For O_PATH descriptors, disallow truncate.
         */
-       error = getvnode(td, fd,
-           cap_rights_init_one(&rights, CAP_EXTATTR_SET), &fp);
+       if (vap->va_size != VNOVAL) {
+               error = getvnode(td, fd,
+                   cap_rights_init_one(&rights, CAP_EXTATTR_SET), &fp);
+       } else {
+               error = getvnode_path(td, fd,
+                   cap_rights_init_one(&rights, CAP_EXTATTR_SET), &fp);
+       }
        if (error) {
                /*
                 * getvnode() returns EINVAL if the file descriptor is not

Reply via email to