mac_process.c (150923) | mac_process.c (151115) |
---|---|
1/*- 2 * Copyright (c) 1999-2002 Robert N. M. Watson 3 * Copyright (c) 2001 Ilmar S. Habibulin 4 * Copyright (c) 2001-2003 Networks Associates Technology, Inc. 5 * Copyright (c) 2005 Samy Al Bahra 6 * All rights reserved. 7 * 8 * This software was developed by Robert Watson and Ilmar Habibulin for the --- 22 unchanged lines hidden (view full) --- 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 */ 37 38#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1999-2002 Robert N. M. Watson 3 * Copyright (c) 2001 Ilmar S. Habibulin 4 * Copyright (c) 2001-2003 Networks Associates Technology, Inc. 5 * Copyright (c) 2005 Samy Al Bahra 6 * All rights reserved. 7 * 8 * This software was developed by Robert Watson and Ilmar Habibulin for the --- 22 unchanged lines hidden (view full) --- 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 */ 37 38#include <sys/cdefs.h> |
39__FBSDID("$FreeBSD: head/sys/security/mac/mac_process.c 150923 2005-10-04 14:47:47Z csjp $"); | 39__FBSDID("$FreeBSD: head/sys/security/mac/mac_process.c 151115 2005-10-09 02:37:27Z csjp $"); |
40 41#include "opt_mac.h" 42 43#include <sys/param.h> 44#include <sys/condvar.h> 45#include <sys/imgact.h> 46#include <sys/kernel.h> 47#include <sys/lock.h> --- 274 unchanged lines hidden (view full) --- 322 323static void 324mac_cred_mmapped_drop_perms_recurse(struct thread *td, struct ucred *cred, 325 struct vm_map *map) 326{ 327 struct vm_map_entry *vme; 328 int vfslocked, result; 329 vm_prot_t revokeperms; | 40 41#include "opt_mac.h" 42 43#include <sys/param.h> 44#include <sys/condvar.h> 45#include <sys/imgact.h> 46#include <sys/kernel.h> 47#include <sys/lock.h> --- 274 unchanged lines hidden (view full) --- 322 323static void 324mac_cred_mmapped_drop_perms_recurse(struct thread *td, struct ucred *cred, 325 struct vm_map *map) 326{ 327 struct vm_map_entry *vme; 328 int vfslocked, result; 329 vm_prot_t revokeperms; |
330 vm_object_t object; | 330 vm_object_t backing_object, object; |
331 vm_ooffset_t offset; 332 struct vnode *vp; 333 334 if (!mac_mmap_revocation) 335 return; 336 337 vm_map_lock_read(map); 338 for (vme = map->header.next; vme != &map->header; vme = vme->next) { --- 10 unchanged lines hidden (view full) --- 349 continue; 350 /* 351 * Drill down to the deepest backing object. 352 */ 353 offset = vme->offset; 354 object = vme->object.vm_object; 355 if (object == NULL) 356 continue; | 331 vm_ooffset_t offset; 332 struct vnode *vp; 333 334 if (!mac_mmap_revocation) 335 return; 336 337 vm_map_lock_read(map); 338 for (vme = map->header.next; vme != &map->header; vme = vme->next) { --- 10 unchanged lines hidden (view full) --- 349 continue; 350 /* 351 * Drill down to the deepest backing object. 352 */ 353 offset = vme->offset; 354 object = vme->object.vm_object; 355 if (object == NULL) 356 continue; |
357 /* XXXCSJP We need to lock the object before walking 358 * the backing object list. 359 */ 360 while (object->backing_object != NULL) { | 357 VM_OBJECT_LOCK(object); 358 while ((backing_object = object->backing_object) != NULL) { 359 VM_OBJECT_LOCK(backing_object); |
361 offset += object->backing_object_offset; | 360 offset += object->backing_object_offset; |
362 object = object->backing_object; | 361 VM_OBJECT_UNLOCK(object); 362 object = backing_object; |
363 } | 363 } |
364 VM_OBJECT_UNLOCK(object); |
|
364 /* 365 * At the moment, vm_maps and objects aren't considered 366 * by the MAC system, so only things with backing by a 367 * normal object (read: vnodes) are checked. 368 */ 369 if (object->type != OBJT_VNODE) 370 continue; 371 vp = (struct vnode *)object->handle; --- 303 unchanged lines hidden --- | 365 /* 366 * At the moment, vm_maps and objects aren't considered 367 * by the MAC system, so only things with backing by a 368 * normal object (read: vnodes) are checked. 369 */ 370 if (object->type != OBJT_VNODE) 371 continue; 372 vp = (struct vnode *)object->handle; --- 303 unchanged lines hidden --- |