aboutsummaryrefslogtreecommitdiff
path: root/sys/security
diff options
context:
space:
mode:
authorDoug Moore <dougm@FreeBSD.org>2019-11-20 16:06:48 +0000
committerDoug Moore <dougm@FreeBSD.org>2019-11-20 16:06:48 +0000
commit83704cc2364d19cb0dd2ad7ec4371afece02662b (patch)
treefa4dd61b2cec6c22630e9f4e9dbd25e7fb437c09 /sys/security
parent0cb5357037c0169cb546365878afe601bd2d6c8b (diff)
downloadsrc-83704cc2364d19cb0dd2ad7ec4371afece02662b.tar.gz
src-83704cc2364d19cb0dd2ad7ec4371afece02662b.zip
Instead of looking up a predecessor or successor to the current map
entry, when that entry has been seen already, keep the already-looked-up value in a variable and use that instead of looking it up again. Approved by: alc, markj (earlier version), kib (earlier version) Differential Revision: https://reviews.freebsd.org/D22348
Notes
Notes: svn path=/head/; revision=354895
Diffstat (limited to 'sys/security')
-rw-r--r--sys/security/mac/mac_process.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/security/mac/mac_process.c b/sys/security/mac/mac_process.c
index 64f466e69f80..bc119dbbc7f9 100644
--- a/sys/security/mac/mac_process.c
+++ b/sys/security/mac/mac_process.c
@@ -252,7 +252,7 @@ static void
mac_proc_vm_revoke_recurse(struct thread *td, struct ucred *cred,
struct vm_map *map)
{
- vm_map_entry_t vme;
+ vm_map_entry_t prev, vme;
int result;
vm_prot_t revokeperms;
vm_object_t backing_object, object;
@@ -263,8 +263,10 @@ mac_proc_vm_revoke_recurse(struct thread *td, struct ucred *cred,
if (!mac_mmap_revocation)
return;
+ prev = &map->header;
vm_map_lock(map);
- VM_MAP_ENTRY_FOREACH(vme, map) {
+ for (vme = vm_map_entry_first(map); vme != &map->header;
+ prev = vme, vme = vm_map_entry_succ(prev)) {
if (vme->eflags & MAP_ENTRY_IS_SUB_MAP) {
mac_proc_vm_revoke_recurse(td, cred,
vme->object.sub_map);
@@ -363,8 +365,7 @@ mac_proc_vm_revoke_recurse(struct thread *td, struct ucred *cred,
}
pmap_protect(map->pmap, vme->start, vme->end,
vme->protection & ~revokeperms);
- vm_map_try_merge_entries(map, vm_map_entry_pred(vme),
- vme);
+ vm_map_try_merge_entries(map, prev, vme);
}
}
vm_map_unlock(map);