]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
NDFREE(): Fix unlocking for LOCKPARENT|LOCKLEAF and ndp->ni_dvp == ndp->ni_vp.
authorkib <kib@FreeBSD.org>
Tue, 21 May 2019 15:12:13 +0000 (15:12 +0000)
committerkib <kib@FreeBSD.org>
Tue, 21 May 2019 15:12:13 +0000 (15:12 +0000)
commitc84facbfbdd1babe29792b982ee1dff01f98bcfc
tree899dd93ec7d8d61a723c645eed7361db298acf86
parentb5aa18864962affc0633e63444df6aaa59efbce9
NDFREE(): Fix unlocking for LOCKPARENT|LOCKLEAF and ndp->ni_dvp == ndp->ni_vp.

NDFREE() calculates unlock_dvp after ndp->ni_vp is unlocked and zeroed
out. This makes the comparision of ni_dvp with ni_vp always fail.
Move the calculation of unlock_dvp right after unlock_vp, so that the
code sees correct ni_vp value.

Reproduced by
   chdir("/usr");
   open("/..", O_BENEATH | O_RDONLY);

Reported by: syzkaller
Reviewed by: markj, mckusick
Tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D20304
sys/kern/vfs_lookup.c