git: 2cb05fff6692 - stable/12 - Add nameicap_cleanup_from(), to clean tracker list starting from some element
Konstantin Belousov
kib at FreeBSD.org
Sun Mar 21 17:55:17 UTC 2021
The branch stable/12 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=2cb05fff66929296444ee0ff5c1fcbb8419c54d9
commit 2cb05fff66929296444ee0ff5c1fcbb8419c54d9
Author: Konstantin Belousov <kib at FreeBSD.org>
AuthorDate: 2021-02-28 00:14:43 +0000
Commit: Konstantin Belousov <kib at FreeBSD.org>
CommitDate: 2021-03-21 17:54:26 +0000
Add nameicap_cleanup_from(), to clean tracker list starting from some element
Tested by: pho
(cherry picked from commit e8a2862aa0384c75603f801625e309a3dae0ed05)
---
sys/kern/vfs_lookup.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index 84a40d9e8fec..74a5e9cdcfb9 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -189,19 +189,26 @@ nameicap_tracker_add(struct nameidata *ndp, struct vnode *dp)
}
static void
-nameicap_cleanup(struct nameidata *ndp)
+nameicap_cleanup_from(struct nameidata *ndp, struct nameicap_tracker *first)
{
struct nameicap_tracker *nt, *nt1;
- KASSERT(TAILQ_EMPTY(&ndp->ni_cap_tracker) ||
- (ndp->ni_lcf & NI_LCF_CAP_DOTDOT) != 0, ("not strictrelative"));
- TAILQ_FOREACH_SAFE(nt, &ndp->ni_cap_tracker, nm_link, nt1) {
+ nt = first;
+ TAILQ_FOREACH_FROM_SAFE(nt, &ndp->ni_cap_tracker, nm_link, nt1) {
TAILQ_REMOVE(&ndp->ni_cap_tracker, nt, nm_link);
vdrop(nt->dp);
uma_zfree(nt_zone, nt);
}
}
+static void
+nameicap_cleanup(struct nameidata *ndp)
+{
+ KASSERT(TAILQ_EMPTY(&ndp->ni_cap_tracker) ||
+ (ndp->ni_lcf & NI_LCF_CAP_DOTDOT) != 0, ("not strictrelative"));
+ nameicap_cleanup_from(ndp, NULL);
+}
+
/*
* For dotdot lookups in capability mode, only allow the component
* lookup to succeed if the resulting directory was already traversed
More information about the dev-commits-src-all
mailing list