The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/security/mac_alloc.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2007 Apple Inc. All rights reserved.
    3  *
    4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
    5  * 
    6  * This file contains Original Code and/or Modifications of Original Code
    7  * as defined in and that are subject to the Apple Public Source License
    8  * Version 2.0 (the 'License'). You may not use this file except in
    9  * compliance with the License. The rights granted to you under the License
   10  * may not be used to create, or enable the creation or redistribution of,
   11  * unlawful or unlicensed copies of an Apple operating system, or to
   12  * circumvent, violate, or enable the circumvention or violation of, any
   13  * terms of an Apple operating system software license agreement.
   14  * 
   15  * Please obtain a copy of the License at
   16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
   17  * 
   18  * The Original Code and all software distributed under the License are
   19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
   20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
   21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
   22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
   23  * Please see the License for the specific language governing rights and
   24  * limitations under the License.
   25  * 
   26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
   27  */
   28 /*
   29  *
   30  */
   31 
   32 #include <kern/kalloc.h>
   33 #include <kern/zalloc.h>
   34 
   35 #include <sys/param.h>
   36 #include <sys/queue.h>
   37 #include <sys/systm.h>
   38 #include <sys/mbuf.h>
   39 
   40 #include <vm/vm_map.h>
   41 
   42 #include "mac_alloc.h"
   43 
   44 /*
   45  * XXXMAC: We should probably make sure only registered policies can
   46  * call these, otherwise we're effectively changing Apple's plan wrt
   47  * exported allocators.
   48  */
   49 
   50 /*
   51  * Kernel allocator
   52  */
   53 void *
   54 mac_kalloc(vm_size_t size, int how)
   55 {
   56 
   57         if (how == M_WAITOK)
   58                 return kalloc(size);
   59         else
   60                 return kalloc_noblock(size);
   61 }
   62 
   63 /*
   64  * for temporary binary compatibility
   65  */
   66 void *  mac_kalloc_noblock      (vm_size_t size);
   67 void *
   68 mac_kalloc_noblock(vm_size_t size)
   69 {
   70         return kalloc_noblock(size);
   71 }
   72 
   73 void
   74 mac_kfree(void * data, vm_size_t size)
   75 {
   76 
   77         return kfree(data, size);
   78 }
   79 
   80 /*
   81  * MBuf tag allocator.
   82  */
   83 
   84 void *
   85 mac_mbuf_alloc(int len, int wait)
   86 {
   87         struct m_tag *t;
   88 
   89         t = m_tag_alloc(KERNEL_MODULE_TAG_ID, KERNEL_TAG_TYPE_MAC_POLICY_LABEL,
   90                         len, wait);
   91         if (t == NULL)
   92                 return (NULL);
   93 
   94         return ((void *)(t + 1));
   95 }
   96 
   97 void
   98 mac_mbuf_free(void *data)
   99 {
  100         struct m_tag *t;
  101 
  102         t = (struct m_tag *)((char *)data - sizeof(struct m_tag));
  103         m_tag_free(t);
  104 }
  105 
  106 /*
  107  * VM functions
  108  */
  109 
  110 extern vm_map_t kalloc_map;
  111 
  112 int
  113 mac_wire(void *start, void *end)
  114 {
  115 
  116         return (vm_map_wire(kalloc_map, CAST_USER_ADDR_T(start),
  117                 CAST_USER_ADDR_T(end), VM_PROT_READ|VM_PROT_WRITE, FALSE));
  118 }
  119 
  120 int
  121 mac_unwire(void *start, void *end)
  122 {
  123 
  124         return (vm_map_unwire(kalloc_map, CAST_USER_ADDR_T(start),
  125                 CAST_USER_ADDR_T(end), FALSE));
  126 }
  127 
  128 /*
  129  * Zone allocator
  130  */
  131 zone_t
  132 mac_zinit(vm_size_t size, vm_size_t maxmem, vm_size_t alloc, const char *name)
  133 {
  134 
  135         return zinit(size, maxmem, alloc, name);
  136 }
  137 
  138 void
  139 mac_zone_change(zone_t zone, unsigned int item, boolean_t value)
  140 {
  141 
  142         zone_change(zone, item, value);
  143 }
  144 
  145 void *
  146 mac_zalloc(zone_t zone, int how)
  147 {
  148 
  149         if (how == M_WAITOK)
  150                 return zalloc(zone);
  151         else
  152                 return zalloc_noblock(zone);
  153 }
  154 
  155 void
  156 mac_zfree(zone_t zone, void *elem)
  157 {
  158 
  159         zfree(zone, elem);
  160 }

Cache object: c97e8d6dd2995bea9bf5dd7c229f0b4b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.