summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/vfs_syscalls.c')
-rw-r--r--sys/kern/vfs_syscalls.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 9d5380a..1406e0f 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -1578,7 +1578,15 @@ again:
vrele(nd.ni_vp);
error = EEXIST;
} else if ((error = vn_lock(vp, LK_EXCLUSIVE)) == 0) {
- error = can_hardlink(vp, td->td_ucred);
+ /*
+ * Check for cross-device links. No need to
+ * recheck vp->v_type, since it cannot change
+ * for non-doomed vnode.
+ */
+ if (nd.ni_dvp->v_mount != vp->v_mount)
+ error = EXDEV;
+ else
+ error = can_hardlink(vp, td->td_ucred);
if (error == 0)
#ifdef MAC
error = mac_vnode_check_link(td->td_ucred,
OpenPOWER on IntegriCloud