rkmem.h File Reference

#include <linux/init.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/timer.h>

Go to the source code of this file.

Defines

#define RSBAC_MAX_KMALLOC   1048576
#define rsbac_vmalloc(x)   kmalloc(x, GFP_ATOMIC)
#define rsbac_vfree(x)   kfree(x)

Functions

void __init rsbac_kmem_cache_sizes_init (void)
void * rsbac_kmalloc (size_t size)
void * rsbac_vkmalloc (size_t size, rsbac_boolean_t *vmalloc_used_p)
void rsbac_kfree (const void *objp)
void rsbac_delayed_kfree (void *objp, rsbac_time_t delay)
void rsbac_vkfree (void *objp, rsbac_boolean_t vmalloc_used)


Define Documentation

#define RSBAC_MAX_KMALLOC   1048576
 

Definition at line 30 of file rkmem.h.

Referenced by rsbac_kmalloc().

#define rsbac_vfree  )     kfree(x)
 

Definition at line 37 of file rkmem.h.

Referenced by copy_fp_cap_set_item(), copy_fp_tru_set_item(), copy_new_uids(), copy_pp_cap_set_item_handle(), copy_pp_tru_set_item_handle(), rsbac_acl_check_right(), rsbac_acl_check_super(), rsbac_acl_get_group_members(), rsbac_acl_list_groups(), rsbac_acl_remove_user(), rsbac_acl_sys_get_rights(), rsbac_acl_sys_group(), rsbac_check_acl(), rsbac_init_rc(), rsbac_pm_pp_intersec(), rsbac_pm_pp_subset(), rsbac_pm_pp_superset(), rsbac_pm_pp_union(), rsbac_rc_copy_role(), rsbac_rc_copy_type(), rsbac_ta_list_all_dev(), rsbac_ta_list_all_group(), rsbac_ta_list_all_user(), rsbac_um_get_gm_user_list(), rsbac_um_get_group_list(), rsbac_um_get_user_list(), sys_rsbac_acl_get_tlist(), sys_rsbac_acl_get_tlist_n(), sys_rsbac_acl_list_all_dev(), sys_rsbac_acl_list_all_group(), sys_rsbac_acl_list_all_user(), sys_rsbac_auth_get_f_caplist(), sys_rsbac_auth_get_p_caplist(), sys_rsbac_list_all_dev(), sys_rsbac_list_all_group(), sys_rsbac_list_all_user(), sys_rsbac_mac_get_f_trulist(), sys_rsbac_mac_get_p_trulist(), sys_rsbac_net_list_all_netdev(), sys_rsbac_net_list_all_template(), sys_rsbac_rc_get_list(), sys_rsbac_um_get_gm_list(), sys_rsbac_um_get_gm_user_list(), sys_rsbac_um_get_group_list(), and sys_rsbac_um_get_user_list().

#define rsbac_vmalloc  )     kmalloc(x, GFP_ATOMIC)
 

Definition at line 36 of file rkmem.h.

Referenced by rsbac_acl_list_groups(), rsbac_acl_sys_group(), rsbac_ta_list_all_dev(), rsbac_ta_list_all_group(), rsbac_ta_list_all_user(), rsbac_ta_list_get_all_data(), rsbac_ta_list_get_all_desc(), rsbac_ta_list_get_all_items_ttl(), rsbac_ta_list_lol_get_all_data(), rsbac_ta_list_lol_get_all_desc(), rsbac_ta_list_lol_get_all_items(), rsbac_ta_list_lol_get_all_subdata(), rsbac_ta_list_lol_get_all_subdesc_ttl(), rsbac_ta_list_lol_get_all_subitems_ttl(), rsbac_um_get_gm_user_list(), rsbac_um_get_group_list(), and rsbac_um_get_user_list().


Function Documentation

void rsbac_delayed_kfree void *  objp,
rsbac_time_t  delay
 

Definition at line 181 of file rkmem.c.

References rsbac_kmalloc(), and wakeup_kfree().

00182   {
00183     struct rsbac_delayed_kfree_t * dk_p;
00184 
00185     if(!objp)
00186       return;
00187     dk_p = rsbac_kmalloc(sizeof(*dk_p));
00188     if(!dk_p)
00189       return;
00190 
00191     dk_p->objp = objp;
00192     init_timer(&dk_p->timer);
00193     dk_p->timer.function = wakeup_kfree;
00194     dk_p->timer.data = (u_long) dk_p;
00195     dk_p->timer.expires = jiffies + delay * HZ;
00196     add_timer(&dk_p->timer);
00197   }

void rsbac_kfree const void *  objp  ) 
 

rsbac_kfree - free previously allocated memory : pointer returned by kmalloc.

Don't free memory not originally allocated by rsbac_kmalloc() or you will run into trouble.

We simply call general kfree, which does everything

Definition at line 165 of file rkmem.c.

Referenced by aci_detach_fd_lists(), acl_detach_fd_lists(), acl_register_fd_lists(), auth_detach_fd_lists(), auth_register_fd_lists(), auto_read_attr(), auto_read_write_attr(), auto_write_attr(), check_comp_rc(), check_comp_rc_scd(), clear_device_item(), clear_lol_reg(), clear_reg(), create_lol_reg(), create_reg(), do_remove_item(), do_remove_lol_item(), do_remove_lol_subitem(), fill_buffer(), fill_lol_buffer(), get_attribute_value_name(), get_target_name(), mac_detach_fd_lists(), mac_register_fd_lists(), read_list(), read_lol_list(), register_dev_lists(), register_fd_lists(), register_ipc_lists(), register_process_lists(), register_user_lists(), registration_error(), remove_all_items(), remove_all_lol_items(), remove_all_lol_subitems(), remove_item(), remove_sc_item(), rsbac_acl_check_forward(), rsbac_acl_check_right(), rsbac_acl_check_super(), rsbac_acl_sys_add_to_acl_entry(), rsbac_acl_sys_get_mask(), rsbac_acl_sys_get_rights(), rsbac_acl_sys_get_tlist(), rsbac_acl_sys_group(), rsbac_acl_sys_remove_acl(), rsbac_acl_sys_remove_acl_entry(), rsbac_acl_sys_remove_from_acl_entry(), rsbac_acl_sys_remove_user(), rsbac_acl_sys_set_acl_entry(), rsbac_acl_sys_set_mask(), rsbac_adf_request_int(), rsbac_adf_request_rc(), rsbac_adf_set_attr(), rsbac_do_init(), rsbac_get_full_path(), rsbac_init_auth(), rsbac_init_debug(), rsbac_init_mac(), rsbac_init_rc(), rsbac_jail_sys_jail(), rsbac_list_lol_register(), rsbac_list_register(), rsbac_list_write_buffers(), rsbac_list_write_lol_buffers(), rsbac_mac_set_curr_level(), rsbac_mount(), rsbac_mount_acl(), rsbac_rc_check_type_comp(), rsbac_rc_get_item(), rsbac_rc_sys_copy_type(), rsbac_read_open(), rsbac_um_check_account(), rsbac_um_check_pass(), rsbac_um_get_group_item(), rsbac_um_get_user_item(), rsbac_um_hash(), rsbac_um_mod_group(), rsbac_um_mod_user(), rsbac_um_set_group_pass(), rsbac_um_set_pass(), rsbac_write_open(), sys_rsbac_adf_log_switch(), sys_rsbac_get_adf_log(), sys_rsbac_switch(), sys_rsbac_um_add_group(), sys_rsbac_um_add_user(), sys_rsbac_um_auth_name(), sys_rsbac_um_auth_uid(), sys_rsbac_um_get_group_item(), sys_rsbac_um_get_user_item(), sys_rsbac_um_mod_group(), sys_rsbac_um_mod_user(), sys_rsbac_um_set_group_pass(), sys_rsbac_um_set_pass(), and sys_rsbac_um_set_pass_name().

00166   {
00167     kfree(objp);
00168   }

void* rsbac_kmalloc size_t  size  ) 
 

rsbac_kmalloc - allocate memory : how many bytes of memory are required.

rsbac_kmalloc is the normal method of allocating memory for RSBAC in the kernel. It will always be of type GFP_KERNEL in 2.4 and GFP_ATOMIC in 2.6.

rsbac_kmalloc'd memory is freed by rsbac_kfree

Definition at line 97 of file rkmem.c.

References rsbac_cache_sizes::cs_cachep, rsbac_cache_sizes::cs_size, NULL, RSBAC_MAX_KMALLOC, and rsbac_printk().

Referenced by aci_detach_fd_lists(), acl_detach_fd_lists(), acl_register_fd_lists(), add_item(), add_lol_item(), add_lol_subitem(), add_sc_item(), auth_detach_fd_lists(), auth_register_fd_lists(), auto_read_attr(), auto_read_write_attr(), auto_write_attr(), check_comp_rc(), check_comp_rc_scd(), create_device_item(), create_lol_reg(), create_reg(), fill_buffer(), fill_lol_buffer(), get_attribute_value_name(), get_target_name(), mac_detach_fd_lists(), mac_register_fd_lists(), read_list(), read_lol_list(), register_fd_lists(), registration_error(), rsbac_acl_check_forward(), rsbac_acl_check_right(), rsbac_acl_check_super(), rsbac_acl_sys_add_to_acl_entry(), rsbac_acl_sys_get_mask(), rsbac_acl_sys_get_rights(), rsbac_acl_sys_get_tlist(), rsbac_acl_sys_group(), rsbac_acl_sys_remove_acl(), rsbac_acl_sys_remove_acl_entry(), rsbac_acl_sys_remove_from_acl_entry(), rsbac_acl_sys_remove_user(), rsbac_acl_sys_set_acl_entry(), rsbac_acl_sys_set_mask(), rsbac_adf_request_int(), rsbac_adf_request_rc(), rsbac_adf_set_attr(), rsbac_delayed_kfree(), rsbac_do_init(), rsbac_get_full_path(), rsbac_init_auth(), rsbac_init_debug(), rsbac_init_mac(), rsbac_init_rc(), rsbac_init_um(), rsbac_jail_sys_jail(), rsbac_list_lol_register(), rsbac_list_register(), rsbac_list_write_buffers(), rsbac_list_write_lol_buffers(), rsbac_mac_set_curr_level(), rsbac_mount(), rsbac_mount_acl(), rsbac_rc_check_type_comp(), rsbac_rc_get_item(), rsbac_rc_sys_copy_type(), rsbac_read_open(), rsbac_um_check_account(), rsbac_um_check_pass(), rsbac_um_get_group_item(), rsbac_um_get_user_item(), rsbac_um_hash(), rsbac_um_mod_group(), rsbac_um_mod_user(), rsbac_um_set_group_pass(), rsbac_um_set_pass(), rsbac_write_open(), sys_rsbac_adf_log_switch(), sys_rsbac_get_adf_log(), sys_rsbac_switch(), sys_rsbac_um_add_group(), sys_rsbac_um_add_user(), sys_rsbac_um_auth_name(), sys_rsbac_um_auth_uid(), sys_rsbac_um_get_group_item(), sys_rsbac_um_get_user_item(), sys_rsbac_um_mod_group(), sys_rsbac_um_mod_user(), sys_rsbac_um_set_group_pass(), sys_rsbac_um_set_pass(), sys_rsbac_um_set_pass_name(), and xp_malloc().

00098 {
00099         rsbac_cache_sizes_t *csizep = rsbac_cache_sizes;
00100 
00101         if(!size)
00102           return NULL;
00103         for (; csizep->cs_size; csizep++) {
00104                 if (size > csizep->cs_size)
00105                         continue;
00106 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
00107                 return kmem_cache_alloc(csizep->cs_cachep, GFP_ATOMIC);
00108 #else
00109                 return kmem_cache_alloc(csizep->cs_cachep, GFP_KERNEL);
00110 #endif
00111         }
00112         rsbac_printk(KERN_WARNING
00113                "rsbac_kmalloc: size %u requested, max size is %u!\n",
00114                size, RSBAC_MAX_KMALLOC);
00115         BUG();
00116         return NULL;
00117 }

void __init rsbac_kmem_cache_sizes_init void   ) 
 

Definition at line 67 of file rkmem.c.

References rsbac_cache_sizes::cs_cachep, rsbac_cache_sizes::cs_size, rsbac_cache_sizes::name, and NULL.

Referenced by rsbac_do_init().

00069 {
00070         rsbac_cache_sizes_t *sizes = rsbac_cache_sizes;
00071 
00072         while (sizes->cs_size) {
00073                 sizes->cs_cachep = kmem_cache_create(
00074                         sizes->name, sizes->cs_size,
00075                         0, SLAB_HWCACHE_ALIGN, NULL, NULL);
00076                 if (!sizes->cs_cachep)
00077                         BUG();
00078 
00079                 sizes++;
00080         }
00081 }

void rsbac_vkfree void *  objp,
rsbac_boolean_t  vmalloc_used
 

Definition at line 202 of file rkmem.c.

Referenced by rsbac_list_write_buffers(), and rsbac_list_write_lol_buffers().

00203   {
00204     if(vmalloc_used)
00205       vfree(objp);
00206     else
00207       kfree(objp);
00208   }

void* rsbac_vkmalloc size_t  size,
rsbac_boolean_t vmalloc_used_p
 

Definition at line 122 of file rkmem.c.

References rsbac_cache_sizes::cs_cachep, rsbac_cache_sizes::cs_size, FALSE, NULL, and TRUE.

Referenced by fill_buffer(), and fill_lol_buffer().

00123 {
00124         rsbac_cache_sizes_t *csizep = rsbac_cache_sizes;
00125         void * result;
00126 
00127         if(!size)
00128           return NULL;
00129         for (; csizep->cs_size; csizep++) {
00130                 if (size > csizep->cs_size)
00131                         continue;
00132 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
00133                 result = kmem_cache_alloc(csizep->cs_cachep, GFP_ATOMIC);
00134 #else
00135                 result = kmem_cache_alloc(csizep->cs_cachep, GFP_KERNEL);
00136 #endif
00137                 if(result)
00138                   {
00139                     if(vmalloc_used_p)
00140                       *vmalloc_used_p = FALSE;
00141                     return result;
00142                   }
00143         }
00144 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
00145         return NULL;
00146 #else
00147         if(vmalloc_used_p)
00148           *vmalloc_used_p = TRUE;
00149         return vmalloc(size);
00150 #endif
00151 }


Generated on Sun May 21 14:30:59 2006 for RSBAC by  doxygen 1.4.2