]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/sys/vnode_internal.h
xnu-7195.81.3.tar.gz
[apple/xnu.git] / bsd / sys / vnode_internal.h
index 29d6d9f72ca4ffe48a5f6f2c9a67cfb62568770b..a25c11c3e36f3f63b81de0c6761f16a0d52d5c30 100644 (file)
@@ -139,16 +139,16 @@ struct vnode {
        int32_t  v_kusecount;                   /* count of in-kernel refs */
        int32_t  v_usecount;                    /* reference count of users */
        int32_t  v_iocount;                     /* iocounters */
-       void *   v_owner;                       /* act that owns the vnode */
+       void *   XNU_PTRAUTH_SIGNED_PTR("vnode.v_owner") v_owner; /* act that owns the vnode */
        uint16_t v_type;                        /* vnode type */
        uint16_t v_tag;                         /* type of underlying data */
        uint32_t v_id;                          /* identity of vnode contents */
        union {
-               struct mount    *vu_mountedhere;/* ptr to mounted vfs (VDIR) */
-               struct socket   *vu_socket;     /* unix ipc (VSOCK) */
-               struct specinfo *vu_specinfo;   /* device (VCHR, VBLK) */
-               struct fifoinfo *vu_fifoinfo;   /* fifo (VFIFO) */
-               struct ubc_info *vu_ubcinfo;    /* valid for (VREG) */
+               struct mount    * XNU_PTRAUTH_SIGNED_PTR("vnode.v_data") vu_mountedhere;  /* ptr to mounted vfs (VDIR) */
+               struct socket   * XNU_PTRAUTH_SIGNED_PTR("vnode.vu_socket") vu_socket;     /* unix ipc (VSOCK) */
+               struct specinfo * XNU_PTRAUTH_SIGNED_PTR("vnode.vu_specinfo") vu_specinfo;   /* device (VCHR, VBLK) */
+               struct fifoinfo * XNU_PTRAUTH_SIGNED_PTR("vnode.vu_fifoinfo") vu_fifoinfo;   /* fifo (VFIFO) */
+               struct ubc_info * XNU_PTRAUTH_SIGNED_PTR("vnode.vu_ubcinfo") vu_ubcinfo;    /* valid for (VREG) */
        } v_un;
        struct  buflists v_cleanblkhd;          /* clean blocklist head */
        struct  buflists v_dirtyblkhd;          /* dirty blocklist head */
@@ -158,7 +158,7 @@ struct vnode {
         * by the name_cache_lock held in
         * excluive mode
         */
-       kauth_cred_t    v_cred;                 /* last authorized credential */
+       kauth_cred_t    XNU_PTRAUTH_SIGNED_PTR("vnode.v_cred") v_cred; /* last authorized credential */
        kauth_action_t  v_authorized_actions;   /* current authorized actions for v_cred */
        int             v_cred_timestamp;       /* determine if entry is stale for MNTK_AUTH_OPAQUE */
        int             v_nc_generation;        /* changes when nodes are removed from the name cache */
@@ -168,10 +168,10 @@ struct vnode {
        int32_t         v_numoutput;                    /* num of writes in progress */
        int32_t         v_writecount;                   /* reference count of writers */
        const char *v_name;                     /* name component of the vnode */
-       vnode_t v_parent;                       /* pointer to parent vnode */
+       vnode_t XNU_PTRAUTH_SIGNED_PTR("vnode.v_parent") v_parent;                       /* pointer to parent vnode */
        struct lockf    *v_lockf;               /* advisory lock list head */
        int(**v_op)(void *);                    /* vnode operations vector */
-       mount_t v_mount;                        /* ptr to vfs we are in */
+       mount_t XNU_PTRAUTH_SIGNED_PTR("vnode.v_mount") v_mount;                        /* ptr to vfs we are in */
        void *  v_data;                         /* private data for fs */
 #if CONFIG_MACF
        struct label *v_label;                  /* MAC security label */
@@ -458,6 +458,8 @@ int vnode_attr_authorize_dir_clone(struct vnode_attr *vap, kauth_action_t action
     uint32_t flags, vfs_context_t ctx, void *reserved);
 /* End of authorization subroutines */
 
+void vnode_attr_handle_mnt_ignore_ownership(struct vnode_attr *vap, mount_t mp, vfs_context_t ctx);
+
 #define VN_CREATE_NOAUTH                (1<<0)
 #define VN_CREATE_NOINHERIT             (1<<1)
 #define VN_CREATE_UNION                 (1<<2)
@@ -506,11 +508,15 @@ int     vnode_ref_ext(vnode_t, int, int);
 void    vnode_rele_internal(vnode_t, int, int, int);
 #ifdef BSD_KERNEL_PRIVATE
 int     vnode_getalways(vnode_t);
+int     vnode_getalways_from_pager(vnode_t);
 int     vget_internal(vnode_t, int, int);
 errno_t vnode_getiocount(vnode_t, unsigned int, int);
 #endif /* BSD_KERNEL_PRIVATE */
 int     vnode_get_locked(vnode_t);
 int     vnode_put_locked(vnode_t);
+#ifdef BSD_KERNEL_PRIVATE
+int     vnode_put_from_pager(vnode_t);
+#endif /* BSD_KERNEL_PRIVATE */
 
 int     vnode_issock(vnode_t);
 int     vnode_isaliased(vnode_t);
@@ -604,13 +610,17 @@ void vnode_trigger_rearm(vnode_t, vfs_context_t);
 void vfs_nested_trigger_unmounts(mount_t, int, vfs_context_t);
 #endif /* CONFIG_TRIGGERS */
 
-int     build_path_with_parent(vnode_t, vnode_t /* parent */, char *, int, int *, int, vfs_context_t);
+int     build_path_with_parent(vnode_t, vnode_t /* parent */, char *, int, int *, size_t *, int, vfs_context_t);
 
 void    nspace_resolver_init(void);
 void    nspace_resolver_exited(struct proc *);
 
 int     vnode_materialize_dataless_file(vnode_t, uint64_t);
 
+int     vnode_isinuse_locked(vnode_t, int, int );
+
 #endif /* BSD_KERNEL_PRIVATE */
 
+extern bool rootvp_is_ssd;
+
 #endif /* !_SYS_VNODE_INTERNAL_H_ */