Date: Mon, 22 Dec 2008 17:32:52 +0000 (UTC) From: Alan Cox <alc@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r186397 - head/sys/security/mac Message-ID: <200812221732.mBMHWqRD066914@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: alc Date: Mon Dec 22 17:32:52 2008 New Revision: 186397 URL: http://svn.freebsd.org/changeset/base/186397 Log: Make preparations for resurrecting shared/read locks on vm maps: mac_proc_vm_revoke_recurse() requests a read lock on the vm map at the start but does not handle failure by vm_map_lock_upgrade() when it seeks to modify the vm map. At present, this works because all lock request on a vm map are implemented as exclusive locks. Thus, vm_map_lock_upgrade() is a no-op that always reports success. However, that is about to change, and proc_vm_revoke_recurse() will require substantial modifications to handle vm_map_lock_upgrade() failures. For the time being, I am changing mac_proc_vm_revoke_recurse() to request a write lock on the vm map at the start. Approved by: rwatson MFC after: 3 months Modified: head/sys/security/mac/mac_process.c Modified: head/sys/security/mac/mac_process.c ============================================================================== --- head/sys/security/mac/mac_process.c Mon Dec 22 16:58:47 2008 (r186396) +++ head/sys/security/mac/mac_process.c Mon Dec 22 17:32:52 2008 (r186397) @@ -260,7 +260,7 @@ mac_proc_vm_revoke_recurse(struct thread if (!mac_mmap_revocation) return; - vm_map_lock_read(map); + vm_map_lock(map); for (vme = map->header.next; vme != &map->header; vme = vme->next) { if (vme->eflags & MAP_ENTRY_IS_SUB_MAP) { mac_proc_vm_revoke_recurse(td, cred, @@ -315,7 +315,6 @@ mac_proc_vm_revoke_recurse(struct thread prot2str(revokeperms), (u_long)vme->start, (long)(vme->end - vme->start), prot2str(vme->max_protection), prot2str(vme->protection)); - vm_map_lock_upgrade(map); /* * This is the really simple case: if a map has more * max_protection than is allowed, but it's not being @@ -369,10 +368,9 @@ mac_proc_vm_revoke_recurse(struct thread vme->protection & ~revokeperms); vm_map_simplify_entry(map, vme); } - vm_map_lock_downgrade(map); VFS_UNLOCK_GIANT(vfslocked); } - vm_map_unlock_read(map); + vm_map_unlock(map); } int
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812221732.mBMHWqRD066914>