aci_data_structures.c File Reference

#include <linux/types.h>
#include <linux/version.h>
#include <linux/fs.h>
#include <linux/sched.h>
#include <linux/quotaops.h>
#include <linux/proc_fs.h>
#include <linux/msdos_fs.h>
#include <linux/iso_fs.h>
#include <linux/nfs_fs.h>
#include <linux/ext2_fs.h>
#include <linux/coda.h>
#include <linux/initrd.h>
#include <linux/security.h>
#include <linux/syscalls.h>
#include <linux/coda_psdev.h>
#include <linux/ncp_fs.h>
#include <linux/smb.h>
#include <linux/dnotify.h>
#include <linux/mm.h>
#include <linux/blkdev.h>
#include <linux/init.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/inetdevice.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <rsbac/types.h>
#include <rsbac/aci.h>
#include <rsbac/aci_data_structures.h>
#include <rsbac/error.h>
#include <rsbac/helpers.h>
#include <rsbac/fs.h>
#include <rsbac/getname.h>
#include <rsbac/net_getname.h>
#include <rsbac/adf.h>
#include <rsbac/adf_main.h>
#include <rsbac/reg.h>
#include <rsbac/rkmem.h>
#include <rsbac/gen_lists.h>
#include <linux/string.h>
#include <linux/kdev_t.h>
#include <linux/smp_lock.h>

Go to the source code of this file.

Defines

#define check_parent(dir, dentry)   ((dir) == (dentry)->d_parent && !list_empty(&dentry->d_bucket))

Functions

 DECLARE_MUTEX (rsbac_write_sem)
static struct rsbac_device_list_item_t * lookup_device (kdev_t)
static int gen_fd_hash (u_long inode)
static int gen_p_hash (rsbac_pid_t pid)
rsbac_boolean_t writable (struct super_block *sb_p)
static int lookup_aci_path_dentry (struct super_block *sb_p, struct dentry **dir_dentry_pp, rsbac_boolean_t create_dir, kdev_t kdev)
static int dev_compare (void *desc1, void *desc2)
static int dev_major_compare (void *desc1, void *desc2)
static int ipc_compare (void *desc1, void *desc2)
static int gen_fd_conv (void *old_desc, void *old_data, void *new_desc, void *new_data)
static int gen_fd_old_conv (void *old_desc, void *old_data, void *new_desc, void *new_data)
static int gen_fd_old_old_conv (void *old_desc, void *old_data, void *new_desc, void *new_data)
rsbac_list_conv_function_tgen_fd_get_conv (rsbac_version_t old_version)
static int gen_dev_conv (void *old_desc, void *old_data, void *new_desc, void *new_data)
rsbac_list_conv_function_tgen_dev_get_conv (rsbac_version_t old_version)
static int register_fd_lists (struct rsbac_device_list_item_t *device_p, kdev_t kdev)
static int aci_detach_fd_lists (struct rsbac_device_list_item_t *device_p)
static struct rsbac_device_list_item_t * create_device_item (struct super_block *sb_p, struct dentry *d_covers)
static struct rsbac_device_list_item_t * add_device_item (struct rsbac_device_list_item_t *device_p)
static void clear_device_item (struct rsbac_device_list_item_t *item_p)
static void remove_device_item (kdev_t kdev)
static int rsbac_clear_file (struct dentry *dentry)
static void wakeup_auto (u_long dummy)
super_block * rsbac_get_super_block (kdev_t kdev)
int rsbac_read_open (char *name, struct file *file_p, kdev_t kdev)
int rsbac_write_open (char *name, struct file *file_p, kdev_t kdev)
void rsbac_read_close (struct file *file_p)
void rsbac_write_close (struct file *file_p)
int rsbac_get_full_path (struct dentry *dentry_p, char path[], int maxlen)
int rsbac_get_full_path_length (struct dentry *dentry_p)
static void __init registration_error (int err, char *listname)
static int __init register_dev_lists (void)
static int __init register_ipc_lists (void)
static int __init register_user_lists (void)
static int __init register_process_lists (void)
static int __init rsbac_do_init (void)
int __init rsbac_init (kdev_t root_dev)
rsbac_boolean_t rsbac_is_initialized (void)
int rsbac_kthread_notify (rsbac_pid_t pid)
int rsbac_mount (struct super_block *sb_p, struct dentry *d_covers)
int rsbac_umount (struct super_block *sb_p, struct dentry *d_covers)
int rsbac_free_dat_dentries (void)
int rsbac_stats (void)
int rsbac_check_inode (struct super_block *sb_p, rsbac_inode_nr_t inode)
int rsbac_get_parent (enum rsbac_target_t target, union rsbac_target_id_t tid, enum rsbac_target_t *parent_target_p, union rsbac_target_id_t *parent_tid_p)
static int get_attr_fd (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value, rsbac_boolean_t inherit)
static int get_attr_dev (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, struct rsbac_dev_desc_t dev, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value, rsbac_boolean_t inherit)
static int get_attr_ipc (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value, rsbac_boolean_t inherit)
static int get_attr_user (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value, rsbac_boolean_t inherit)
static int get_attr_process (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value, rsbac_boolean_t inherit)
int rsbac_ta_get_attr (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t tid, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value, rsbac_boolean_t inherit)
static int set_attr_fd (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value_p)
static int set_attr_dev (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, struct rsbac_dev_desc_t dev, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value_p)
static int set_attr_ipc (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value_p)
static int set_attr_user (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value_p)
static int set_attr_process (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t *tid_p, enum rsbac_attribute_t attr, union rsbac_attribute_value_t *value_p)
int rsbac_ta_set_attr (rsbac_list_ta_number_t ta_number, enum rsbac_switch_target_t module, enum rsbac_target_t target, union rsbac_target_id_t tid, enum rsbac_attribute_t attr, union rsbac_attribute_value_t value)
int rsbac_ta_remove_target (rsbac_list_ta_number_t ta_number, enum rsbac_target_t target, union rsbac_target_id_t tid)
int rsbac_ta_list_all_dev (rsbac_list_ta_number_t ta_number, struct rsbac_dev_desc_t **id_pp)
static int copy_new_uids (rsbac_list_handle_t list, rsbac_list_ta_number_t ta_number, int *count_p, int *i_count_p, rsbac_uid_t *res_id_p)
int rsbac_ta_list_all_user (rsbac_list_ta_number_t ta_number, rsbac_uid_t **id_pp)
int rsbac_ta_list_all_group (rsbac_list_ta_number_t ta_number, rsbac_gid_t **id_pp)

Variables

static rsbac_boolean_t rsbac_initialized = FALSE
static char compiled_modules [80]
kdev_t rsbac_root_dev
static struct rsbac_device_list_head_t device_list_head
static struct rsbac_dev_handles_t dev_handles
static struct rsbac_dev_handles_t dev_major_handles
static struct rsbac_ipc_handles_t ipc_handles
static struct rsbac_user_handles_t user_handles
static struct rsbac_process_handles_t process_handles
static struct rsbac_gen_fd_aci_t def_gen_root_dir_aci = DEFAULT_GEN_ROOT_DIR_ACI
static struct rsbac_gen_fd_aci_t def_gen_fd_aci = DEFAULT_GEN_FD_ACI
static struct dentry * sysfs_covered_p = NULL
static struct super_block * sysfs_sb_p = NULL


Define Documentation

#define check_parent dir,
dentry   )     ((dir) == (dentry)->d_parent && !list_empty(&dentry->d_bucket))
 

Definition at line 2262 of file aci_data_structures.c.

Referenced by rsbac_write_open().


Function Documentation

static int aci_detach_fd_lists struct rsbac_device_list_item_t *  device_p  )  [static]
 

Definition at line 1630 of file aci_data_structures.c.

References get_error_name(), RSBAC_EINVALIDPOINTER, RSBAC_GEN_FD_ACI_KEY, rsbac_kfree(), rsbac_kmalloc(), rsbac_list_detach(), RSBAC_MAXNAMELEN, and rsbac_printk().

Referenced by remove_device_item().

01631   {
01632     int                             err = 0;
01633     int                             tmperr;
01634     u_int                           file_no;
01635 
01636     if(!device_p)
01637       return(-RSBAC_EINVALIDPOINTER);
01638 
01639     /* detach all general lists */
01640     for (file_no = 0; file_no < RSBAC_GEN_NR_FD_LISTS; file_no++)
01641       {
01642         tmperr = rsbac_list_detach(&device_p->handles.gen[file_no],
01643                                    RSBAC_GEN_FD_ACI_KEY);
01644         if(tmperr)
01645           {
01646             char * tmp;
01647 
01648             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01649             if(tmp)
01650               {
01651                 rsbac_printk(KERN_WARNING
01652                        "detach_fd_lists(): detaching from general list %u for device %02u:%02u failed with error %s!\n",
01653                        file_no,
01654                        RSBAC_MAJOR(device_p->id),
01655                        RSBAC_MINOR(device_p->id),
01656                        get_error_name(tmp, tmperr));
01657                 rsbac_kfree(tmp);
01658               }
01659             err = tmperr;
01660           }
01661       }
01662 
01663 #if defined(CONFIG_RSBAC_MAC)
01664     /* detach all MAC lists */
01665     for (file_no = 0; file_no < RSBAC_MAC_NR_FD_LISTS; file_no++)
01666       {
01667         tmperr = rsbac_list_detach(&device_p->handles.mac[file_no],
01668                                    RSBAC_MAC_FD_ACI_KEY);
01669         if(tmperr)
01670           {
01671             char * tmp;
01672 
01673             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01674             if(tmp)
01675               {
01676                 rsbac_printk(KERN_WARNING
01677                        "detach_fd_lists(): detaching from MAC list %u for device %02u:%02u failed with error %s!\n",
01678                        file_no,
01679                        RSBAC_MAJOR(device_p->id),
01680                        RSBAC_MINOR(device_p->id),
01681                        get_error_name(tmp, tmperr));
01682                 rsbac_kfree(tmp);
01683               }
01684             err = tmperr;
01685           }
01686       }
01687 #endif
01688 
01689 #if defined(CONFIG_RSBAC_PM)
01690     /* detach all PM lists */
01691     for (file_no = 0; file_no < RSBAC_PM_NR_FD_LISTS; file_no++)
01692       {
01693         tmperr = rsbac_list_detach(&device_p->handles.pm[file_no],
01694                                    RSBAC_PM_FD_ACI_KEY);
01695         if(tmperr)
01696           {
01697             char * tmp;
01698 
01699             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01700             if(tmp)
01701               {
01702                 rsbac_printk(KERN_WARNING
01703                        "detach_fd_lists(): detaching from PM list %u for device %02u:%02u failed with error %s!\n",
01704                        file_no,
01705                        RSBAC_MAJOR(device_p->id),
01706                        RSBAC_MINOR(device_p->id),
01707                        get_error_name(tmp, tmperr));
01708                 rsbac_kfree(tmp);
01709               }
01710             err = tmperr;
01711           }
01712       }
01713 #endif
01714 
01715 #if defined(CONFIG_RSBAC_DAZ)
01716     /* detach all DAZ lists */
01717     for (file_no = 0; file_no < RSBAC_DAZ_NR_FD_LISTS; file_no++)
01718       {
01719         tmperr = rsbac_list_detach(&device_p->handles.daz[file_no],
01720                                    RSBAC_DAZ_FD_ACI_KEY);
01721         if(tmperr)
01722           {
01723             char * tmp;
01724 
01725             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01726             if(tmp)
01727               {
01728                 rsbac_printk(KERN_WARNING
01729                        "detach_fd_lists(): detaching from DAZ list %u for device %02u:%02u failed with error %s!\n",
01730                        file_no,
01731                        RSBAC_MAJOR(device_p->id),
01732                        RSBAC_MINOR(device_p->id),
01733                        get_error_name(tmp, tmperr));
01734                 rsbac_kfree(tmp);
01735               }
01736             err = tmperr;
01737           }
01738       }
01739 #if defined(CONFIG_RSBAC_DAZ_CACHE)
01740     /* detach all DAZ scanned lists */
01741     for (file_no = 0; file_no < RSBAC_DAZ_SCANNED_NR_FD_LISTS; file_no++)
01742       {
01743         tmperr = rsbac_list_detach(&device_p->handles.dazs[file_no],
01744                                    RSBAC_DAZ_FD_ACI_KEY);
01745         if(tmperr)
01746           {
01747             char * tmp;
01748 
01749             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01750             if(tmp)
01751               {
01752                 rsbac_printk(KERN_WARNING
01753                        "detach_fd_lists(): detaching from DAZ scanned list %u for device %02u:%02u failed with error %s!\n",
01754                        file_no,
01755                        RSBAC_MAJOR(device_p->id),
01756                        RSBAC_MINOR(device_p->id),
01757                        get_error_name(tmp, tmperr));
01758                 rsbac_kfree(tmp);
01759               }
01760             err = tmperr;
01761           }
01762       }
01763 #endif
01764 #endif
01765 
01766 #if defined(CONFIG_RSBAC_FF)
01767     /* detach all FF lists */
01768     for (file_no = 0; file_no < RSBAC_FF_NR_FD_LISTS; file_no++)
01769       {
01770         tmperr = rsbac_list_detach(&device_p->handles.ff[file_no],
01771                                    RSBAC_FF_FD_ACI_KEY);
01772         if(tmperr)
01773           {
01774             char * tmp;
01775 
01776             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01777             if(tmp)
01778               {
01779                 rsbac_printk(KERN_WARNING
01780                        "detach_fd_lists(): detaching from FF list %u for device %02u:%02u failed with error %s!\n",
01781                        file_no,
01782                        RSBAC_MAJOR(device_p->id),
01783                        RSBAC_MINOR(device_p->id),
01784                        get_error_name(tmp, tmperr));
01785                 rsbac_kfree(tmp);
01786               }
01787             err = tmperr;
01788           }
01789       }
01790 #endif
01791 
01792 #if defined(CONFIG_RSBAC_RC)
01793     /* detach all RC lists */
01794     for (file_no = 0; file_no < RSBAC_RC_NR_FD_LISTS; file_no++)
01795       {
01796         tmperr = rsbac_list_detach(&device_p->handles.rc[file_no],
01797                                    RSBAC_RC_FD_ACI_KEY);
01798         if(tmperr)
01799           {
01800             char * tmp;
01801 
01802             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01803             if(tmp)
01804               {
01805                 rsbac_printk(KERN_WARNING
01806                        "detach_fd_lists(): detaching from RC list %u for device %02u:%02u failed with error %s!\n",
01807                        file_no,
01808                        RSBAC_MAJOR(device_p->id),
01809                        RSBAC_MINOR(device_p->id),
01810                        get_error_name(tmp, tmperr));
01811                 rsbac_kfree(tmp);
01812               }
01813             err = tmperr;
01814           }
01815       }
01816 #endif
01817 
01818 #if defined(CONFIG_RSBAC_AUTH)
01819     /* detach all AUTH lists */
01820     for (file_no = 0; file_no < RSBAC_AUTH_NR_FD_LISTS; file_no++)
01821       {
01822         tmperr = rsbac_list_detach(&device_p->handles.auth[file_no],
01823                                    RSBAC_AUTH_FD_ACI_KEY);
01824         if(tmperr)
01825           {
01826             char * tmp;
01827 
01828             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01829             if(tmp)
01830               {
01831                 rsbac_printk(KERN_WARNING
01832                        "detach_fd_lists(): detaching from AUTH list %u for device %02u:%02u failed with error %s!\n",
01833                        file_no,
01834                        RSBAC_MAJOR(device_p->id),
01835                        RSBAC_MINOR(device_p->id),
01836                        get_error_name(tmp, tmperr));
01837                 rsbac_kfree(tmp);
01838               }
01839             err = tmperr;
01840           }
01841       }
01842 #endif
01843 
01844 #if defined(CONFIG_RSBAC_CAP)
01845     /* detach all CAP lists */
01846     for (file_no = 0; file_no < RSBAC_CAP_NR_FD_LISTS; file_no++)
01847       {
01848         tmperr = rsbac_list_detach(&device_p->handles.cap[file_no],
01849                                    RSBAC_CAP_FD_ACI_KEY);
01850         if(tmperr)
01851           {
01852             char * tmp;
01853 
01854             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01855             if(tmp)
01856               {
01857                 rsbac_printk(KERN_WARNING
01858                        "detach_fd_lists(): detaching from CAP list %u for device %02u:%02u failed with error %s!\n",
01859                        file_no,
01860                        RSBAC_MAJOR(device_p->id),
01861                        RSBAC_MINOR(device_p->id),
01862                        get_error_name(tmp, tmperr));
01863                 rsbac_kfree(tmp);
01864               }
01865             err = tmperr;
01866           }
01867       }
01868 #endif
01869 
01870 #if defined(CONFIG_RSBAC_PAX)
01871     /* detach all PAX lists */
01872     for (file_no = 0; file_no < RSBAC_PAX_NR_FD_LISTS; file_no++)
01873       {
01874         tmperr = rsbac_list_detach(&device_p->handles.pax[file_no],
01875                                    RSBAC_PAX_FD_ACI_KEY);
01876         if(tmperr)
01877           {
01878             char * tmp;
01879 
01880             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01881             if(tmp)
01882               {
01883                 rsbac_printk(KERN_WARNING
01884                        "detach_fd_lists(): detaching from PAX list %u for device %02u:%02u failed with error %s!\n",
01885                        file_no,
01886                        RSBAC_MAJOR(device_p->id),
01887                        RSBAC_MINOR(device_p->id),
01888                        get_error_name(tmp, tmperr));
01889                 rsbac_kfree(tmp);
01890               }
01891             err = tmperr;
01892           }
01893       }
01894 #endif
01895 
01896 #if defined(CONFIG_RSBAC_RES)
01897     /* detach all RES lists */
01898     for (file_no = 0; file_no < RSBAC_RES_NR_FD_LISTS; file_no++)
01899       {
01900         tmperr = rsbac_list_detach(&device_p->handles.res[file_no],
01901                                    RSBAC_RES_FD_ACI_KEY);
01902         if(tmperr)
01903           {
01904             char * tmp;
01905 
01906             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01907             if(tmp)
01908               {
01909                 rsbac_printk(KERN_WARNING
01910                        "detach_fd_lists(): detaching from RES list %u for device %02u:%02u failed with error %s!\n",
01911                        file_no,
01912                        RSBAC_MAJOR(device_p->id),
01913                        RSBAC_MINOR(device_p->id),
01914                        get_error_name(tmp, tmperr));
01915                 rsbac_kfree(tmp);
01916               }
01917             err = tmperr;
01918           }
01919       }
01920 #endif
01921 
01922     return err;
01923   }

static struct rsbac_device_list_item_t* add_device_item struct rsbac_device_list_item_t *  device_p  )  [static]
 

Definition at line 1950 of file aci_data_structures.c.

References device_list_head, and NULL.

Referenced by rsbac_do_init(), rsbac_init_acl(), rsbac_init_auth(), rsbac_init_mac(), rsbac_mount(), rsbac_mount_acl(), rsbac_mount_auth(), and rsbac_mount_mac().

01951     {
01952       if (!device_p)
01953          return(NULL);
01954          
01955       /* add new device to device list */
01956       if (!device_list_head.head)
01957         { /* first device */
01958           device_list_head.head=device_p;
01959           device_list_head.tail=device_p;
01960           device_list_head.curr=device_p;
01961           device_list_head.count=1;
01962           device_p->prev=NULL;
01963           device_p->next=NULL;
01964         }  
01965       else
01966         { /* there is another device -> hang to tail */
01967           device_p->prev=device_list_head.tail;
01968           device_p->next=NULL;
01969           device_list_head.tail->next=device_p;
01970           device_list_head.tail=device_p;
01971           device_list_head.curr=device_p;
01972           device_list_head.count++;
01973         }
01974       return(device_p);
01975     }

static void clear_device_item struct rsbac_device_list_item_t *  item_p  )  [static]
 

Definition at line 1984 of file aci_data_structures.c.

References rsbac_kfree().

Referenced by remove_device_item(), rsbac_do_init(), rsbac_mount(), rsbac_mount_acl(), rsbac_mount_auth(), and rsbac_mount_mac().

01985   {
01986     if(!item_p)
01987       return;
01988 
01989     /* dput() rsbac_dir_dentry_p, if set */
01990     if(item_p->rsbac_dir_dentry_p)
01991       dput(item_p->rsbac_dir_dentry_p);
01992     /* OK, lets remove the device item itself */
01993     rsbac_kfree(item_p);
01994   } /* end of clear_device_item() */

static int copy_new_uids rsbac_list_handle_t  list,
rsbac_list_ta_number_t  ta_number,
int *  count_p,
int *  i_count_p,
rsbac_uid_t res_id_p
[static]
 

Definition at line 14917 of file aci_data_structures.c.

References FALSE, NULL, RSBAC_EINVALIDPOINTER, rsbac_ta_list_get_all_desc(), rsbac_vfree, and TRUE.

Referenced by rsbac_ta_list_all_user().

14922   {
14923     rsbac_uid_t * i_id_p = NULL;
14924     rsbac_boolean_t found;
14925     int tmp_count;
14926     int i;
14927     int j;
14928 
14929     if(!list || !count_p || !i_count_p || !res_id_p)
14930       return -RSBAC_EINVALIDPOINTER;
14931     if(!*i_count_p)
14932       return 0;
14933 //    rsbac_printk(KERN_DEBUG "copy_new_uids: list %p, ta_number %u, count %u, i_count %u, res_id_p %p, res_id_p[0] %u\n",
14934 //                 list, ta_number, *count_p, *i_count_p, res_id_p, res_id_p[0]);
14935     tmp_count = rsbac_ta_list_get_all_desc(ta_number, list, (void **) &i_id_p);
14936     if(tmp_count > 0)
14937       {
14938         if(tmp_count > *i_count_p)
14939           tmp_count = *i_count_p;
14940         for(i=0; i < tmp_count; i++)
14941           {
14942             found = FALSE;
14943             for(j=0; j < *count_p; j++)
14944               {
14945                 if(res_id_p[j] == i_id_p[i])
14946                   {
14947                     found = TRUE;
14948                     break;
14949                   }
14950               }
14951             if(found == FALSE)
14952               {
14953                 res_id_p[*count_p] = i_id_p[i];
14954                 (*count_p)++;
14955                 (*i_count_p)--;
14956               }
14957           }
14958         rsbac_vfree(i_id_p);
14959       }
14960     return 0;
14961   }

static struct rsbac_device_list_item_t* create_device_item struct super_block *  sb_p,
struct dentry *  d_covers
[static]
 

Definition at line 1928 of file aci_data_structures.c.

References NULL, and rsbac_kmalloc().

Referenced by rsbac_do_init(), rsbac_init_acl(), rsbac_init_auth(), rsbac_init_mac(), rsbac_mount(), rsbac_mount_acl(), rsbac_mount_auth(), and rsbac_mount_mac().

01929     {
01930       struct rsbac_device_list_item_t * new_item_p;
01931 
01932       if(!sb_p)
01933         return NULL;
01934       /* allocate memory for new device, return NULL, if failed */
01935       if ( !(new_item_p = (struct rsbac_device_list_item_t *)
01936                     rsbac_kmalloc(sizeof(*new_item_p)) ) )
01937          return(NULL);
01938 
01939       memset(new_item_p, 0, sizeof(*new_item_p));
01940       new_item_p->id = sb_p->s_dev;
01941       new_item_p->sb_p = sb_p;
01942       new_item_p->d_covers = d_covers;
01943       new_item_p->mount_count = 1;
01944       /* everything else is 0 by memset -> return */
01945       return(new_item_p);
01946     }

DECLARE_MUTEX rsbac_write_sem   ) 
 

static int dev_compare void *  desc1,
void *  desc2
[static]
 

Definition at line 620 of file aci_data_structures.c.

References rsbac_dev_desc_t::major, rsbac_dev_desc_t::minor, and rsbac_dev_desc_t::type.

Referenced by register_dev_lists(), and rsbac_init_acl().

00621   {
00622     int result;
00623     struct rsbac_dev_desc_t * i_desc1 = desc1;
00624     struct rsbac_dev_desc_t * i_desc2 = desc2;
00625 
00626     result = memcmp(&i_desc1->type,
00627                     &i_desc2->type,
00628                     sizeof(i_desc1->type));
00629     if(result)
00630       return result;
00631     result = memcmp(&i_desc1->major,
00632                     &i_desc2->major,
00633                     sizeof(i_desc1->major));
00634     if(result)
00635       return result;
00636     return memcmp(&i_desc1->minor,
00637                   &i_desc2->minor,
00638                   sizeof(i_desc1->minor));
00639   }

static int dev_major_compare void *  desc1,
void *  desc2
[static]
 

Definition at line 641 of file aci_data_structures.c.

References rsbac_dev_desc_t::major, and rsbac_dev_desc_t::type.

Referenced by register_dev_lists(), and rsbac_init_acl().

00642   {
00643     int result;
00644     struct rsbac_dev_desc_t * i_desc1 = desc1;
00645     struct rsbac_dev_desc_t * i_desc2 = desc2;
00646 
00647     result = memcmp(&i_desc1->type,
00648                     &i_desc2->type,
00649                     sizeof(i_desc1->type));
00650     if(result)
00651       return result;
00652     return memcmp(&i_desc1->major,
00653                   &i_desc2->major,
00654                   sizeof(i_desc1->major));
00655   }

static int gen_dev_conv void *  old_desc,
void *  old_data,
void *  new_desc,
void *  new_data
[static]
 

Definition at line 772 of file aci_data_structures.c.

Referenced by gen_dev_get_conv().

00777   {
00778     struct rsbac_dev_desc_t * new = new_desc;
00779     struct rsbac_dev_t * old = old_desc;
00780 
00781     memcpy(new_data, old_data, sizeof(struct rsbac_gen_dev_aci_t));
00782     new->type = old->type;
00783     new->major = RSBAC_MAJOR(old->id);
00784     new->minor = RSBAC_MINOR(old->id);
00785     return 0;
00786   }

rsbac_list_conv_function_t* gen_dev_get_conv rsbac_version_t  old_version  ) 
 

Definition at line 788 of file aci_data_structures.c.

References gen_dev_conv(), NULL, and RSBAC_GEN_DEV_OLD_ACI_VERSION.

Referenced by register_dev_lists().

00789   {
00790     switch(old_version)
00791       {
00792         case RSBAC_GEN_DEV_OLD_ACI_VERSION:
00793           return gen_dev_conv;
00794         default:
00795           return NULL;
00796       }
00797   }

static int gen_fd_conv void *  old_desc,
void *  old_data,
void *  new_desc,
void *  new_data
[static]
 

Definition at line 688 of file aci_data_structures.c.

References rsbac_gen_fd_old_aci_t::auid_exempt, rsbac_gen_fd_aci_t::auid_exempt, rsbac_gen_fd_old_aci_t::fake_root_uid, rsbac_gen_fd_aci_t::fake_root_uid, rsbac_gen_fd_old_aci_t::linux_dac_disable, rsbac_gen_fd_aci_t::linux_dac_disable, rsbac_gen_fd_old_aci_t::log_array_high, rsbac_gen_fd_aci_t::log_array_high, rsbac_gen_fd_old_aci_t::log_array_low, rsbac_gen_fd_aci_t::log_array_low, rsbac_gen_fd_old_aci_t::log_program_based, rsbac_gen_fd_aci_t::log_program_based, rsbac_gen_fd_old_aci_t::symlink_add_mac_level, rsbac_gen_fd_aci_t::symlink_add_mac_level, rsbac_gen_fd_old_aci_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_remote_ip, rsbac_gen_fd_old_aci_t::symlink_add_uid, and rsbac_gen_fd_aci_t::symlink_add_uid.

Referenced by gen_fd_get_conv().

00693   {
00694     struct rsbac_gen_fd_aci_t     * new_aci = new_data;
00695     struct rsbac_gen_fd_old_aci_t * old_aci = old_data;
00696 
00697     memcpy(new_desc, old_desc, sizeof(rsbac_inode_nr_t));
00698     new_aci->log_array_low = old_aci->log_array_low;
00699     new_aci->log_array_high = old_aci->log_array_high;
00700     new_aci->log_program_based = old_aci->log_program_based;
00701     new_aci->symlink_add_remote_ip = 0;
00702     new_aci->symlink_add_uid = old_aci->symlink_add_uid;
00703     new_aci->symlink_add_mac_level = old_aci->symlink_add_mac_level;
00704     new_aci->symlink_add_rc_role = old_aci->symlink_add_rc_role;
00705     new_aci->linux_dac_disable = old_aci->linux_dac_disable;
00706     new_aci->fake_root_uid = old_aci->fake_root_uid;
00707     new_aci->auid_exempt = old_aci->auid_exempt;
00708     return 0;
00709   }

rsbac_list_conv_function_t* gen_fd_get_conv rsbac_version_t  old_version  ) 
 

Definition at line 757 of file aci_data_structures.c.

References gen_fd_conv(), gen_fd_old_conv(), gen_fd_old_old_conv(), NULL, RSBAC_GEN_FD_OLD_ACI_VERSION, RSBAC_GEN_FD_OLD_OLD_ACI_VERSION, and RSBAC_GEN_FD_OLD_OLD_OLD_ACI_VERSION.

Referenced by register_fd_lists().

00758   {
00759     switch(old_version)
00760       {
00761         case RSBAC_GEN_FD_OLD_ACI_VERSION:
00762           return gen_fd_conv;
00763         case RSBAC_GEN_FD_OLD_OLD_ACI_VERSION:
00764           return gen_fd_old_conv;
00765         case RSBAC_GEN_FD_OLD_OLD_OLD_ACI_VERSION:
00766           return gen_fd_old_old_conv;
00767         default:
00768           return NULL;
00769       }
00770   }

static int gen_fd_hash u_long  inode  )  [inline, static]
 

Definition at line 224 of file aci_data_structures.c.

Referenced by get_attr_fd(), rsbac_ta_remove_target(), and set_attr_fd().

00225   {
00226     return(inode % RSBAC_GEN_NR_FD_LISTS);
00227   }

static int gen_fd_old_conv void *  old_desc,
void *  old_data,
void *  new_desc,
void *  new_data
[static]
 

Definition at line 711 of file aci_data_structures.c.

References rsbac_gen_fd_aci_t::auid_exempt, rsbac_gen_fd_old_aci_t::fake_root_uid, rsbac_gen_fd_aci_t::fake_root_uid, rsbac_gen_fd_old_aci_t::linux_dac_disable, rsbac_gen_fd_aci_t::linux_dac_disable, rsbac_gen_fd_old_aci_t::log_array_high, rsbac_gen_fd_aci_t::log_array_high, rsbac_gen_fd_old_aci_t::log_array_low, rsbac_gen_fd_aci_t::log_array_low, rsbac_gen_fd_old_aci_t::log_program_based, rsbac_gen_fd_aci_t::log_program_based, RSBAC_NO_USER, rsbac_gen_fd_old_aci_t::symlink_add_mac_level, rsbac_gen_fd_aci_t::symlink_add_mac_level, rsbac_gen_fd_old_aci_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_remote_ip, rsbac_gen_fd_old_aci_t::symlink_add_uid, and rsbac_gen_fd_aci_t::symlink_add_uid.

Referenced by gen_fd_get_conv().

00716   {
00717     struct rsbac_gen_fd_aci_t     * new_aci = new_data;
00718     struct rsbac_gen_fd_old_aci_t * old_aci = old_data;
00719 
00720     memcpy(new_desc, old_desc, sizeof(rsbac_inode_nr_t));
00721     new_aci->log_array_low = old_aci->log_array_low;
00722     new_aci->log_array_high = old_aci->log_array_high;
00723     new_aci->log_program_based = old_aci->log_program_based;
00724     new_aci->symlink_add_remote_ip = 0;
00725     new_aci->symlink_add_uid = old_aci->symlink_add_uid;
00726     new_aci->symlink_add_mac_level = old_aci->symlink_add_mac_level;
00727     new_aci->symlink_add_rc_role = old_aci->symlink_add_rc_role;
00728     new_aci->linux_dac_disable = old_aci->linux_dac_disable;
00729     new_aci->fake_root_uid = old_aci->fake_root_uid;
00730     new_aci->auid_exempt = RSBAC_NO_USER;
00731     return 0;
00732   }

static int gen_fd_old_old_conv void *  old_desc,
void *  old_data,
void *  new_desc,
void *  new_data
[static]
 

Definition at line 734 of file aci_data_structures.c.

References rsbac_gen_fd_aci_t::auid_exempt, rsbac_gen_fd_aci_t::fake_root_uid, FR_off, rsbac_gen_fd_old_old_aci_t::linux_dac_disable, rsbac_gen_fd_aci_t::linux_dac_disable, rsbac_gen_fd_old_old_aci_t::log_array_high, rsbac_gen_fd_aci_t::log_array_high, rsbac_gen_fd_old_old_aci_t::log_array_low, rsbac_gen_fd_aci_t::log_array_low, rsbac_gen_fd_old_old_aci_t::log_program_based, rsbac_gen_fd_aci_t::log_program_based, RSBAC_NO_USER, rsbac_gen_fd_old_old_aci_t::symlink_add_mac_level, rsbac_gen_fd_aci_t::symlink_add_mac_level, rsbac_gen_fd_old_old_aci_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_remote_ip, rsbac_gen_fd_old_old_aci_t::symlink_add_uid, and rsbac_gen_fd_aci_t::symlink_add_uid.

Referenced by gen_fd_get_conv().

00739   {
00740     struct rsbac_gen_fd_aci_t     * new_aci = new_data;
00741     struct rsbac_gen_fd_old_old_aci_t * old_aci = old_data;
00742 
00743     memcpy(new_desc, old_desc, sizeof(rsbac_inode_nr_t));
00744     new_aci->log_array_low = old_aci->log_array_low;
00745     new_aci->log_array_high = old_aci->log_array_high;
00746     new_aci->log_program_based = old_aci->log_program_based;
00747     new_aci->symlink_add_remote_ip = 0;
00748     new_aci->symlink_add_uid = old_aci->symlink_add_uid;
00749     new_aci->symlink_add_mac_level = old_aci->symlink_add_mac_level;
00750     new_aci->symlink_add_rc_role = old_aci->symlink_add_rc_role;
00751     new_aci->linux_dac_disable = old_aci->linux_dac_disable;
00752     new_aci->fake_root_uid = FR_off;
00753     new_aci->auid_exempt = RSBAC_NO_USER;
00754     return 0;
00755   }

static int gen_p_hash rsbac_pid_t  pid  )  [inline, static]
 

Definition at line 228 of file aci_data_structures.c.

Referenced by get_attr_process(), rsbac_ta_remove_target(), and set_attr_process().

00229   {
00230     return(pid % CONFIG_RSBAC_GEN_NR_P_LISTS);
00231   }

static int get_attr_dev rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
struct rsbac_dev_desc_t  dev,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value,
rsbac_boolean_t  inherit
[static]
 

Definition at line 10487 of file aci_data_structures.c.

References A_log_array_high, A_log_array_low, A_mac_categories, A_mac_check, A_pm_object_class, A_pm_object_type, A_rc_type, A_security_level, D_block, D_block_major, D_char, D_char_major, DEFAULT_GEN_DEV_ACI, dev_handles, dev_major_handles, GEN, rsbac_gen_dev_aci_t::log_array_high, rsbac_attribute_value_t::log_array_high, rsbac_gen_dev_aci_t::log_array_low, rsbac_attribute_value_t::log_array_low, MAC, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_check, NULL, PM, rsbac_attribute_value_t::pm_object_class, rsbac_attribute_value_t::pm_object_type, RC, rsbac_attribute_value_t::rc_type, RC_type_inherit_parent, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, RSBAC_EINVALIDTARGET, RSBAC_RC_GENERAL_TYPE, rsbac_ta_list_get_data_ttl(), rsbac_attribute_value_t::security_level, and rsbac_dev_desc_t::type.

Referenced by rsbac_ta_get_attr().

10495   {
10496     int err = 0;
10497 /*
10498 #ifdef CONFIG_RSBAC_DEBUG
10499     if (rsbac_debug_ds)
10500         rsbac_printk(KERN_DEBUG
10501                "rsbac_get_attr(): Getting dev attribute\n");
10502 #endif
10503 */
10504     switch(module)
10505       {
10506         case GEN:
10507           {
10508             struct rsbac_gen_dev_aci_t aci = DEFAULT_GEN_DEV_ACI;
10509 
10510             rsbac_ta_list_get_data_ttl(ta_number,
10511                                 dev_handles.gen,
10512                                 NULL,
10513                                 &dev,
10514                                 &aci);
10515             switch (attr)
10516               {
10517                 case A_log_array_low:
10518                   value->log_array_low = aci.log_array_low;
10519                   break;
10520                 case A_log_array_high:
10521                   value->log_array_high = aci.log_array_high;
10522                   break;
10523                 default:
10524                   err = -RSBAC_EINVALIDATTR;
10525               }
10526           }
10527           break;
10528 
10529 #if defined(CONFIG_RSBAC_MAC)
10530         case MAC:
10531           {
10532             struct rsbac_mac_dev_aci_t aci = DEFAULT_MAC_DEV_ACI;
10533 
10534             rsbac_ta_list_get_data_ttl(ta_number,
10535                                 dev_handles.mac,
10536                                 NULL,
10537                                 &dev,
10538                                 &aci);
10539             switch (attr)
10540               {
10541                 case A_security_level:
10542                   value->security_level = aci.sec_level;
10543                   break;
10544                 case A_mac_categories:
10545                   value->mac_categories = aci.mac_categories;
10546                   break;
10547                 case A_mac_check:
10548                   value->mac_check = aci.mac_check;
10549                   break;
10550 
10551                 default:
10552                   err = -RSBAC_EINVALIDATTR;
10553               }
10554           }
10555           break;
10556 #endif /* MAC */
10557 
10558 #if defined(CONFIG_RSBAC_PM)
10559         case PM:
10560           {
10561             struct rsbac_pm_dev_aci_t aci = DEFAULT_PM_DEV_ACI;
10562 
10563             rsbac_ta_list_get_data_ttl(ta_number,
10564                                 dev_handles.pm,
10565                                 NULL,
10566                                 &dev,
10567                                 &aci);
10568             switch (attr)
10569               {
10570                 case A_pm_object_class:
10571                   value->pm_object_class = aci.pm_object_class;
10572                   break;
10573                 case A_pm_object_type:
10574                   value->pm_object_type = aci.pm_object_type;
10575                   break;
10576                 default:
10577                   err = -RSBAC_EINVALIDATTR;
10578               }
10579           }
10580           break;
10581 #endif /* PM */
10582 
10583 #if defined(CONFIG_RSBAC_RC)
10584         case RC:
10585           {
10586             rsbac_rc_type_id_t type = RSBAC_RC_GENERAL_TYPE;
10587 
10588             switch(dev.type)
10589               {
10590                 case D_char:
10591                 case D_block:
10592                   if(rsbac_ta_list_get_data_ttl(ta_number,
10593                                                 dev_handles.rc,
10594                                                 NULL,
10595                                                 &dev,
10596                                                 &type)
10597                      || (   (type == RC_type_inherit_parent)
10598                          && inherit
10599                         )
10600                     )
10601                     rsbac_ta_list_get_data_ttl(ta_number,
10602                                                dev_major_handles.rc,
10603                                                NULL,
10604                                                &dev,
10605                                                &type);
10606                   break;
10607                 case D_char_major:
10608                 case D_block_major:
10609                   dev.type -= (D_block_major - D_block);
10610                   rsbac_ta_list_get_data_ttl(ta_number,
10611                                              dev_major_handles.rc,
10612                                              NULL,
10613                                              &dev,
10614                                              &type);
10615                   break;
10616                 default:
10617                   return -RSBAC_EINVALIDTARGET;
10618               }
10619             switch (attr)
10620               {
10621                 case A_rc_type:
10622                   value->rc_type = type;
10623                   break;
10624 
10625                 default:
10626                   err = -RSBAC_EINVALIDATTR;
10627               }
10628           }
10629           break;
10630 #endif /* RC */
10631 
10632         default:
10633           err = -RSBAC_EINVALIDMODULE;
10634       }
10635     /* and return */
10636     return err;
10637   }

static int get_attr_fd rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value,
rsbac_boolean_t  inherit
[static]
 

Definition at line 9892 of file aci_data_structures.c.

References A_auid_exempt, A_auth_learn, A_auth_may_set_cap, A_auth_may_setuid, A_daz_scanned, A_daz_scanner, A_fake_root_uid, A_ff_flags, A_linux_dac_disable, A_log_array_high, A_log_array_low, A_log_program_based, A_mac_auto, A_mac_categories, A_mac_file_flags, A_mac_prop_trusted, A_max_caps, A_min_caps, A_pax_flags, A_pm_object_class, A_pm_object_type, A_pm_tp, A_rc_force_role, A_rc_initial_role, A_rc_type_fd, A_res_max, A_res_min, A_security_level, A_symlink_add_mac_level, A_symlink_add_rc_role, A_symlink_add_remote_ip, A_symlink_add_uid, rsbac_gen_fd_aci_t::auid_exempt, rsbac_attribute_value_t::auid_exempt, AUTH, rsbac_attribute_value_t::auth_learn, rsbac_attribute_value_t::auth_may_set_cap, rsbac_attribute_value_t::auth_may_setuid, CAP, DAZ, rsbac_attribute_value_t::daz_scanned, rsbac_attribute_value_t::daz_scanner, DEFAULT_GEN_FD_ACI, device_list_head, rsbac_gen_fd_aci_t::fake_root_uid, rsbac_attribute_value_t::fake_root_uid, FALSE, FF, FF_add_inherited, rsbac_attribute_value_t::ff_flags, FF_no_delete_or_rename, GEN, gen_fd_hash(), LDD_inherit, rsbac_gen_fd_aci_t::linux_dac_disable, rsbac_attribute_value_t::linux_dac_disable, rsbac_gen_fd_aci_t::log_array_high, rsbac_attribute_value_t::log_array_high, rsbac_gen_fd_aci_t::log_array_low, rsbac_attribute_value_t::log_array_low, rsbac_gen_fd_aci_t::log_program_based, rsbac_attribute_value_t::log_program_based, lookup_device(), MA_inherit, MAC, rsbac_attribute_value_t::mac_auto, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_file_flags, rsbac_attribute_value_t::mac_prop_trusted, rsbac_attribute_value_t::max_caps, rsbac_attribute_value_t::min_caps, NULL, PAX, rsbac_attribute_value_t::pax_flags, PM, rsbac_attribute_value_t::pm_object_class, rsbac_attribute_value_t::pm_object_type, rsbac_attribute_value_t::pm_tp, RC, rsbac_attribute_value_t::rc_force_role, rsbac_attribute_value_t::rc_initial_role, RC_role_inherit_parent, rsbac_attribute_value_t::rc_type_fd, RC_type_inherit_parent, RES, rsbac_attribute_value_t::res_array, RSBAC_EINVALIDATTR, RSBAC_EINVALIDDEV, RSBAC_EINVALIDMODULE, RSBAC_FF_DEF, rsbac_get_parent(), RSBAC_MAC_INHERIT_CAT_VECTOR, rsbac_mount(), RSBAC_PAX_DEF_FLAGS, rsbac_printk(), rsbac_ta_list_get_data_ttl(), rsbac_attribute_value_t::security_level, SL_inherit, rsbac_gen_fd_aci_t::symlink_add_mac_level, rsbac_attribute_value_t::symlink_add_mac_level, rsbac_gen_fd_aci_t::symlink_add_rc_role, rsbac_attribute_value_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_remote_ip, rsbac_attribute_value_t::symlink_add_remote_ip, rsbac_gen_fd_aci_t::symlink_add_uid, rsbac_attribute_value_t::symlink_add_uid, and TRUE.

Referenced by rsbac_ta_get_attr().

09900   {
09901     int err = 0;
09902     struct rsbac_device_list_item_t   * device_p;
09903     u_long                              dflags;
09904 #if defined(CONFIG_RSBAC_FF)
09905     rsbac_ff_flags_t                    ff_flags = 0;
09906     rsbac_ff_flags_t                    ff_tmp_flags;
09907     rsbac_ff_flags_t                    ff_mask = -1;
09908 #endif
09909 
09910 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
09911       if(   !RSBAC_MAJOR(tid_p->file.device)
09912          && !RSBAC_MINOR(tid_p->file.device)
09913         )
09914         return -RSBAC_EINVALIDDEV;
09915 #endif
09916       /* use loop for inheritance - used to be recursive calls */
09917       for(;;)
09918       {
09919 /*
09920 #ifdef CONFIG_RSBAC_DEBUG
09921         if (rsbac_debug_ds)
09922             rsbac_printk(KERN_DEBUG "rsbac_get_attr(): Getting file/dir/fifo/symlink attribute %u for device %02u:%02u, inode %lu, dentry_p %p\n",
09923                    attr, RSBAC_MAJOR(tid_p->file.device),RSBAC_MINOR(tid_p->file.device), (u_long) tid_p->file.inode, tid_p->file.dentry_p);
09924 #endif
09925 */
09926         /* wait for read access to device_list_head */
09927         rsbac_read_lock(&device_list_head.lock, &dflags);
09928         /* OK, go on */
09929 /*
09930 #ifdef CONFIG_RSBAC_DEBUG
09931         if (rsbac_debug_ds)
09932             rsbac_printk(KERN_DEBUG
09933                    "rsbac_get_attr(): passed device read lock\n");
09934 #endif
09935 */
09936 
09937         /* lookup device */
09938         device_p = lookup_device(tid_p->file.device);
09939         if (!device_p)
09940           {
09941             struct super_block * sb_p;
09942 
09943             rsbac_read_unlock(&device_list_head.lock, &dflags);
09944 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
09945             sb_p = user_get_super(tid_p->file.device);
09946 #else
09947             sb_p = get_super(tid_p->file.device);
09948 #endif
09949             if(sb_p)
09950               {
09951                 rsbac_printk(KERN_INFO
09952                        "rsbac_get_attr(): auto-mounting device %02u:%02u\n",
09953                        RSBAC_MAJOR(tid_p->file.device), RSBAC_MINOR(tid_p->file.device));
09954                 rsbac_mount(sb_p, NULL);
09955                 /* free super_block pointer */
09956                 drop_super(sb_p);
09957                 rsbac_read_lock(&device_list_head.lock, &dflags);
09958                 device_p = lookup_device(tid_p->file.device);
09959                 if (!device_p)
09960                   {
09961                     rsbac_printk(KERN_WARNING
09962                            "rsbac_get_attr(): unknown device %02u:%02u\n",
09963                            RSBAC_MAJOR(tid_p->file.device), RSBAC_MINOR(tid_p->file.device));
09964                     rsbac_read_unlock(&device_list_head.lock, &dflags);
09965                     return -RSBAC_EINVALIDDEV;
09966                   }
09967               }
09968             else
09969               return -RSBAC_EINVALIDDEV;
09970           }
09971         switch(module)
09972           {
09973             case GEN:
09974               {
09975                 struct rsbac_gen_fd_aci_t aci = DEFAULT_GEN_FD_ACI;
09976 
09977                 if(attr == A_internal)
09978                   {
09979                     if(!device_p->rsbac_dir_inode || !tid_p->file.inode)
09980                       value->internal = FALSE;
09981                     else
09982                       if(device_p->rsbac_dir_inode == tid_p->file.inode)
09983                         value->internal = TRUE;
09984                       else
09985                         if(inherit)
09986                           {
09987                             enum rsbac_target_t       parent_target;
09988                             union rsbac_target_id_t   parent_tid;
09989 
09990                             /* inheritance possible? */
09991                             if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
09992                               { /* yes: inherit this single level */
09993                                 if(device_p->rsbac_dir_inode == parent_tid.file.inode)
09994                                   value->internal = TRUE;
09995                                 else
09996                                   value->internal = FALSE;
09997                               }
09998                             else
09999                               {
10000                                 value->internal = FALSE;
10001                               }
10002                           }
10003                         else
10004                           {
10005                             value->internal = FALSE;
10006                           }
10007 
10008                     /* free access to device_list_head */
10009                     rsbac_read_unlock(&device_list_head.lock, &dflags);
10010                     return 0;
10011                   }
10012                 rsbac_ta_list_get_data_ttl(ta_number,
10013                                     device_p->handles.gen[gen_fd_hash(tid_p->file.inode)],
10014                                     NULL,
10015                                     &tid_p->file.inode,
10016                                     &aci);
10017                 switch (attr)
10018                   {
10019                     case A_log_array_low:
10020                       value->log_array_low = aci.log_array_low;
10021                       break;
10022                     case A_log_array_high:
10023                       value->log_array_high = aci.log_array_high;
10024                       break;
10025                     case A_log_program_based:
10026                       value->log_program_based = aci.log_program_based;
10027                       break;
10028                     case A_symlink_add_remote_ip:
10029                       value->symlink_add_remote_ip = aci.symlink_add_remote_ip;
10030                       break;
10031                     case A_symlink_add_uid:
10032                       value->symlink_add_uid = aci.symlink_add_uid;
10033                       break;
10034                     case A_symlink_add_mac_level:
10035                       value->symlink_add_mac_level = aci.symlink_add_mac_level;
10036                       break;
10037                     case A_symlink_add_rc_role:
10038                       value->symlink_add_rc_role = aci.symlink_add_rc_role;
10039                       break;
10040                     case A_linux_dac_disable:
10041                       value->linux_dac_disable = aci.linux_dac_disable;
10042                       if((value->linux_dac_disable == LDD_inherit) && inherit)
10043                         {
10044                           enum rsbac_target_t       parent_target;
10045                           union rsbac_target_id_t   parent_tid;
10046 
10047                           /* free access to device_list_head - see above */
10048                           rsbac_read_unlock(&device_list_head.lock, &dflags);
10049 
10050                           /* inheritance possible? */
10051                           if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
10052                             {
10053                               target = parent_target;
10054                               *tid_p = parent_tid;
10055                               continue;
10056                             }
10057                           else
10058                             {
10059                               value->linux_dac_disable
10060                                 = def_gen_root_dir_aci.linux_dac_disable;
10061                               return 0;
10062                             }
10063                         }
10064                       break;
10065                     case A_fake_root_uid:
10066                       value->fake_root_uid = aci.fake_root_uid;
10067                       break;
10068                     case A_auid_exempt:
10069                       value->auid_exempt = aci.auid_exempt;
10070                       break;
10071                     default:
10072                       err = -RSBAC_EINVALIDATTR;
10073                   }
10074               }
10075               break;
10076 
10077 #if defined(CONFIG_RSBAC_MAC)
10078             case MAC:
10079               {
10080                 struct rsbac_mac_fd_aci_t aci = DEFAULT_MAC_FD_ACI;
10081 
10082                 rsbac_ta_list_get_data_ttl(ta_number,
10083                                     device_p->handles.mac[mac_fd_hash(tid_p->file.inode)],
10084                                     NULL,
10085                                     &tid_p->file.inode,
10086                                     &aci);
10087                 switch (attr)
10088                   {
10089                     case A_security_level:
10090                       value->security_level = aci.sec_level;
10091                       if((value->security_level == SL_inherit) && inherit)
10092                         {
10093                           enum rsbac_target_t       parent_target;
10094                           union rsbac_target_id_t   parent_tid;
10095 
10096                           /* free access to device_list_head - see above */
10097                           rsbac_read_unlock(&device_list_head.lock, &dflags);
10098 
10099                           /* inheritance possible? */
10100                           if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
10101                             {
10102                               target = parent_target;
10103                               *tid_p = parent_tid;
10104                               continue;
10105                             }
10106                           else
10107                             {
10108                               value->security_level
10109                                 = def_mac_root_dir_aci.sec_level;
10110                               return 0;
10111                             }
10112                         }
10113                       break;
10114                     case A_mac_categories:
10115                       value->mac_categories = aci.mac_categories;
10116                       if(   (value->mac_categories == RSBAC_MAC_INHERIT_CAT_VECTOR)
10117                          && inherit
10118                         )
10119                         {
10120                           enum rsbac_target_t       parent_target;
10121                           union rsbac_target_id_t   parent_tid;
10122 
10123                           /* free access to device_list_head - see above */
10124                           rsbac_read_unlock(&device_list_head.lock, &dflags);
10125 
10126                           /* inheritance possible? */
10127                           if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
10128                             {
10129                               target = parent_target;
10130                               *tid_p = parent_tid;
10131                               continue;
10132                             }
10133                           else
10134                             {
10135                               value->mac_categories
10136                                 = def_mac_root_dir_aci.mac_categories;
10137                               return 0;
10138                             }
10139                         }
10140                       break;
10141                     case A_mac_auto:
10142                       value->mac_auto = aci.mac_auto;
10143                       if(   (value->mac_auto == MA_inherit)
10144                          && inherit
10145                         )
10146                         {
10147                           enum rsbac_target_t       parent_target;
10148                           union rsbac_target_id_t   parent_tid;
10149 
10150                           /* free access to device_list_head - see above */
10151                           rsbac_read_unlock(&device_list_head.lock, &dflags);
10152 
10153                           /* inheritance possible? */
10154                           if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
10155                             {
10156                               target = parent_target;
10157                               *tid_p = parent_tid;
10158                               continue;
10159                             }
10160                           else
10161                             {
10162                               value->mac_auto
10163                                 = def_mac_root_dir_aci.mac_auto;
10164                               return 0;
10165                             }
10166                         }
10167                       break;
10168                     case A_mac_prop_trusted:
10169                       value->mac_prop_trusted = aci.mac_prop_trusted;
10170                       break;
10171                     case A_mac_file_flags:
10172                       value->mac_file_flags = aci.mac_file_flags;
10173                       break;
10174 
10175                     default:
10176                       err = -RSBAC_EINVALIDATTR;
10177                   }
10178               }
10179               break;
10180 #endif /* MAC */
10181 
10182 #if defined(CONFIG_RSBAC_PM)
10183             case PM:
10184               {
10185                 struct rsbac_pm_fd_aci_t aci = DEFAULT_PM_FD_ACI;
10186 
10187                 rsbac_ta_list_get_data_ttl(ta_number,
10188                                     device_p->handles.pm[pm_fd_hash(tid_p->file.inode)],
10189                                     NULL,
10190                                     &tid_p->file.inode,
10191                                     &aci);
10192                 switch (attr)
10193                   {
10194                     case A_pm_object_class:
10195                       value->pm_object_class = aci.pm_object_class;
10196                       break;
10197                     case A_pm_tp:
10198                       value->pm_tp = aci.pm_tp;
10199                       break;
10200                     case A_pm_object_type:
10201                       value->pm_object_type = aci.pm_object_type;
10202                       break;
10203                     default:
10204                       err = -RSBAC_EINVALIDATTR;
10205                   }
10206               }
10207               break;
10208 #endif /* PM */
10209 
10210 #if defined(CONFIG_RSBAC_DAZ)
10211             case DAZ:
10212               {
10213 #if defined(CONFIG_RSBAC_DAZ_CACHE)
10214                 if(attr == A_daz_scanned)
10215                   {
10216                     err = rsbac_ta_list_get_data_ttl(ta_number,
10217                                               device_p->handles.dazs[daz_scanned_fd_hash(tid_p->file.inode)],
10218                                               NULL,
10219                                               &tid_p->file.inode,
10220                                               &value->daz_scanned);
10221                   }
10222                 else
10223 #endif
10224                   {
10225                     struct rsbac_daz_fd_aci_t aci = DEFAULT_DAZ_FD_ACI;
10226 
10227                     rsbac_ta_list_get_data_ttl(ta_number,
10228                                         device_p->handles.daz[daz_fd_hash(tid_p->file.inode)],
10229                                         NULL,
10230                                         &tid_p->file.inode,
10231                                         &aci);
10232                     switch (attr)
10233                       {
10234                         case A_daz_scanner:
10235                           value->daz_scanner = aci.daz_scanner;
10236                           break;
10237                         default:
10238                           err = -RSBAC_EINVALIDATTR;
10239                       }
10240                   }
10241               }
10242               break;
10243 #endif /* DAZ */
10244 
10245 #if defined(CONFIG_RSBAC_FF)
10246             case FF:
10247               {
10248                 switch (attr)
10249                   {
10250                     case A_ff_flags:
10251                       ff_tmp_flags = RSBAC_FF_DEF;
10252                       rsbac_ta_list_get_data_ttl(ta_number,
10253                                           device_p->handles.ff[ff_fd_hash(tid_p->file.inode)],
10254                                           NULL,
10255                                           &tid_p->file.inode,
10256                                           &ff_tmp_flags);
10257                       ff_flags |= ff_tmp_flags & ff_mask;
10258                       value->ff_flags = ff_flags;
10259                       if((ff_tmp_flags & FF_add_inherited) && inherit)
10260                         {
10261                           /* inheritance possible? */
10262                           if(!rsbac_get_parent(target, *tid_p, &target, tid_p))
10263                             {
10264                               /* free access to device_list_head - see above */
10265                               rsbac_read_unlock(&device_list_head.lock, &dflags);
10266 
10267                               ff_mask &= ~(FF_no_delete_or_rename | FF_add_inherited);
10268                               ff_flags &= ~(FF_add_inherited);
10269                               continue;
10270                             }
10271                           else
10272                             value->ff_flags &= ~(FF_add_inherited);
10273                         }
10274                       break;
10275 
10276                     default:
10277                       err = -RSBAC_EINVALIDATTR;
10278                   }
10279               }
10280               break;
10281 #endif /* FF */
10282 
10283 #if defined(CONFIG_RSBAC_RC)
10284             case RC:
10285               {
10286                 struct rsbac_rc_fd_aci_t aci = DEFAULT_RC_FD_ACI;
10287 
10288                 rsbac_ta_list_get_data_ttl(ta_number,
10289                                     device_p->handles.rc[rc_fd_hash(tid_p->file.inode)],
10290                                     NULL,
10291                                     &tid_p->file.inode,
10292                                     &aci);
10293                 switch (attr)
10294                   {
10295                     case A_rc_type_fd:
10296                       value->rc_type_fd = aci.rc_type_fd;
10297                       if(value->rc_type_fd == RC_type_inherit_parent && inherit)
10298                         {
10299                           enum rsbac_target_t       parent_target;
10300                           union rsbac_target_id_t   parent_tid;
10301 
10302                           /* free access to device_list_head - see above */
10303                           rsbac_read_unlock(&device_list_head.lock, &dflags);
10304 
10305                           /* inheritance possible? */
10306                           if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
10307                             {
10308                               target = parent_target;
10309                               *tid_p = parent_tid;
10310                               continue;
10311                             }
10312                           else
10313                             {
10314                               value->rc_type_fd
10315                                 = def_rc_root_dir_aci.rc_type_fd;
10316                               return 0;
10317                             }
10318                         }
10319                       break;
10320                     case A_rc_force_role:
10321                       value->rc_force_role = aci.rc_force_role;
10322                       if(value->rc_force_role == RC_role_inherit_parent && inherit)
10323                         {
10324                           enum rsbac_target_t       parent_target;
10325                           union rsbac_target_id_t   parent_tid;
10326 
10327                           /* free access to device_list_head - see above */
10328                           rsbac_read_unlock(&device_list_head.lock, &dflags);
10329 
10330                           /* inheritance possible? */
10331                           if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
10332                             {
10333                               target = parent_target;
10334                               *tid_p = parent_tid;
10335                               continue;
10336                             }
10337                           else
10338                             {
10339                               value->rc_force_role
10340                                 = def_rc_root_dir_aci.rc_force_role;
10341                               return 0;
10342                             }
10343                         }
10344                       break;
10345                     case A_rc_initial_role:
10346                       value->rc_initial_role = aci.rc_initial_role;
10347                       if(value->rc_initial_role == RC_role_inherit_parent && inherit)
10348                         {
10349                           enum rsbac_target_t       parent_target;
10350                           union rsbac_target_id_t   parent_tid;
10351 
10352                           /* free access to device_list_head - see above */
10353                           rsbac_read_unlock(&device_list_head.lock, &dflags);
10354 
10355                           /* inheritance possible? */
10356                           if(!rsbac_get_parent(target, *tid_p, &parent_target, &parent_tid))
10357                             {
10358                               target = parent_target;
10359                               *tid_p = parent_tid;
10360                               continue;
10361                             }
10362                           else
10363                             {
10364                               value->rc_initial_role
10365                                 = def_rc_root_dir_aci.rc_initial_role;
10366                               return 0;
10367                             }
10368                         }
10369                       break;
10370 
10371                     default:
10372                       err = -RSBAC_EINVALIDATTR;
10373                   }
10374               }
10375               break;
10376 #endif /* RC */
10377 
10378 #if defined(CONFIG_RSBAC_AUTH)
10379             case AUTH:
10380               {
10381                 struct rsbac_auth_fd_aci_t aci = DEFAULT_AUTH_FD_ACI;
10382 
10383                 rsbac_ta_list_get_data_ttl(ta_number,
10384                                     device_p->handles.auth[auth_fd_hash(tid_p->file.inode)],
10385                                     NULL,
10386                                     &tid_p->file.inode,
10387                                     &aci);
10388                 switch (attr)
10389                   {
10390                     case A_auth_may_setuid:
10391                       value->auth_may_setuid = aci.auth_may_setuid;
10392                       break;
10393                     case A_auth_may_set_cap:
10394                       value->auth_may_set_cap = aci.auth_may_set_cap;
10395                       break;
10396                     case A_auth_learn:
10397                       value->auth_learn = aci.auth_learn;
10398                       break;
10399                     default:
10400                       err = -RSBAC_EINVALIDATTR;
10401                   }
10402               }
10403               break;
10404 #endif /* AUTH */
10405 
10406 #if defined(CONFIG_RSBAC_CAP)
10407             case CAP:
10408               {
10409                 struct rsbac_cap_fd_aci_t aci = DEFAULT_CAP_FD_ACI;
10410 
10411                 rsbac_ta_list_get_data_ttl(ta_number,
10412                                     device_p->handles.cap[cap_fd_hash(tid_p->file.inode)],
10413                                     NULL,
10414                                     &tid_p->file.inode,
10415                                     &aci);
10416                 switch (attr)
10417                   {
10418                     case A_min_caps:
10419                       value->min_caps = aci.min_caps;
10420                       break;
10421                     case A_max_caps:
10422                       value->max_caps = aci.max_caps;
10423                       break;
10424                     default:
10425                       err = -RSBAC_EINVALIDATTR;
10426                   }
10427               }
10428               break;
10429 #endif /* CAP */
10430 
10431 #if defined(CONFIG_RSBAC_RES)
10432             case RES:
10433               {
10434                 struct rsbac_res_fd_aci_t aci = DEFAULT_RES_FD_ACI;
10435 
10436                 rsbac_ta_list_get_data_ttl(ta_number,
10437                                     device_p->handles.res[res_fd_hash(tid_p->file.inode)],
10438                                     NULL,
10439                                     &tid_p->file.inode,
10440                                     &aci);
10441                 switch (attr)
10442                   {
10443                     case A_res_min:
10444                       memcpy(&value->res_array, &aci.res_min, sizeof(aci.res_min));
10445                       break;
10446                     case A_res_max:
10447                       memcpy(&value->res_array, &aci.res_max, sizeof(aci.res_max));
10448                       break;
10449                     default:
10450                       err = -RSBAC_EINVALIDATTR;
10451                   }
10452               }
10453               break;
10454 #endif /* RES */
10455 
10456 #if defined(CONFIG_RSBAC_PAX)
10457             case PAX:
10458               {
10459                 switch (attr)
10460                   {
10461                     case A_pax_flags:
10462                       value->pax_flags = RSBAC_PAX_DEF_FLAGS;
10463                       rsbac_ta_list_get_data_ttl(ta_number,
10464                                           device_p->handles.pax[pax_fd_hash(tid_p->file.inode)],
10465                                           NULL,
10466                                           &tid_p->file.inode,
10467                                           &value->pax_flags);
10468                       break;
10469 
10470                     default:
10471                       err = -RSBAC_EINVALIDATTR;
10472                   }
10473               }
10474               break;
10475 #endif /* PAX */
10476 
10477             default:
10478               err = -RSBAC_EINVALIDMODULE;
10479           }
10480         /* free access to device_list_head */
10481         rsbac_read_unlock(&device_list_head.lock, &dflags);
10482         /* and return */
10483         return err;
10484         } /* end of for(;;) loop for inheritance */
10485   }

static int get_attr_ipc rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value,
rsbac_boolean_t  inherit
[static]
 

Definition at line 10639 of file aci_data_structures.c.

References A_jail_id, A_mac_categories, A_pm_ipc_purpose, A_pm_object_class, A_pm_object_type, A_rc_type, A_security_level, rsbac_target_id_t::ipc, ipc_handles, JAIL, rsbac_attribute_value_t::jail_id, MAC, rsbac_attribute_value_t::mac_categories, NULL, PM, rsbac_attribute_value_t::pm_ipc_purpose, rsbac_attribute_value_t::pm_object_class, rsbac_attribute_value_t::pm_object_type, RC, rsbac_attribute_value_t::rc_type, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, RSBAC_JAIL_DEF_ID, RSBAC_RC_GENERAL_TYPE, rsbac_ta_list_get_data_ttl(), and rsbac_attribute_value_t::security_level.

Referenced by rsbac_ta_get_attr().

10647   {
10648     int err = 0;
10649 
10650 /*
10651 #ifdef CONFIG_RSBAC_DEBUG
10652     if (rsbac_debug_ds) rsbac_printk(KERN_DEBUG
10653                 "rsbac_get_attr(): Getting ipc attribute\n");
10654 #endif
10655 */
10656     /* lookup only, if not sock or (sock-id != NULL), OK with NULL fifo */
10657     switch(module)
10658       {
10659 #if defined(CONFIG_RSBAC_MAC)
10660         case MAC:
10661           {
10662             struct rsbac_mac_ipc_aci_t aci = DEFAULT_MAC_IPC_ACI;
10663 
10664             rsbac_ta_list_get_data_ttl(ta_number,
10665                                 ipc_handles.mac,
10666                                 NULL,
10667                                 &tid_p->ipc,
10668                                 &aci);
10669             switch (attr)
10670               {
10671                 case A_security_level:
10672                   value->security_level = aci.sec_level;
10673                   break;
10674                 case A_mac_categories:
10675                   value->mac_categories = aci.mac_categories;
10676                   break;
10677 
10678                 default:
10679                   err = -RSBAC_EINVALIDATTR;
10680               }
10681           }
10682           break;
10683 #endif /* MAC */
10684 
10685 #if defined(CONFIG_RSBAC_PM)
10686         case PM:
10687           {
10688             struct rsbac_pm_ipc_aci_t aci = DEFAULT_PM_IPC_ACI;
10689 
10690             rsbac_ta_list_get_data_ttl(ta_number,
10691                                 ipc_handles.pm,
10692                                 NULL,
10693                                 &tid_p->ipc,
10694                                 &aci);
10695             switch (attr)
10696               {
10697                 case A_pm_object_class:
10698                   value->pm_object_class = aci.pm_object_class;
10699                   break;
10700                 case A_pm_ipc_purpose:
10701                   value->pm_ipc_purpose = aci.pm_ipc_purpose;
10702                   break;
10703                 case A_pm_object_type:
10704                   value->pm_object_type = aci.pm_object_type;
10705                   break;
10706                 default:
10707                   err = -RSBAC_EINVALIDATTR;
10708               }
10709           }
10710           break;
10711 #endif /* PM */
10712 
10713 #if defined(CONFIG_RSBAC_RC)
10714         case RC:
10715           {
10716             rsbac_rc_type_id_t type = RSBAC_RC_GENERAL_TYPE;
10717 
10718             rsbac_ta_list_get_data_ttl(ta_number,
10719                                 ipc_handles.rc,
10720                                 NULL,
10721                                 &tid_p->ipc,
10722                                 &type);
10723             switch (attr)
10724               {
10725                 case A_rc_type:
10726                   value->rc_type = type;
10727                   break;
10728 
10729                 default:
10730                   err = -RSBAC_EINVALIDATTR;
10731               }
10732           }
10733           break;
10734 #endif /* RC */
10735 
10736 #if defined(CONFIG_RSBAC_JAIL)
10737         case JAIL:
10738           {
10739             rsbac_jail_id_t id = RSBAC_JAIL_DEF_ID;
10740 
10741             rsbac_ta_list_get_data_ttl(ta_number,
10742                                 ipc_handles.jail,
10743                                 NULL,
10744                                 &tid_p->ipc,
10745                                 &id);
10746             switch (attr)
10747               {
10748                 case A_jail_id:
10749                   value->jail_id = id;
10750                   break;
10751 
10752                 default:
10753                   err = -RSBAC_EINVALIDATTR;
10754               }
10755           }
10756           break;
10757 #endif /* JAIL */
10758 
10759         default:
10760           err = -RSBAC_EINVALIDMODULE;
10761       }
10762     /* and return */
10763     return err;
10764   }

static int get_attr_process rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value,
rsbac_boolean_t  inherit
[static]
 

Definition at line 11098 of file aci_data_structures.c.

References A_audit_uid, A_auid_exempt, A_auth_last_auth, A_auth_learn, A_auth_may_set_cap, A_auth_may_setuid, A_cap_process_hiding, A_current_sec_level, A_daz_scanner, A_fake_root_uid, A_initial_security_level, A_jail_flags, A_jail_id, A_jail_ip, A_jail_max_caps, A_jail_scd_get, A_jail_scd_modify, A_log_program_based, A_mac_auto, A_mac_categories, A_mac_curr_categories, A_mac_initial_categories, A_mac_min_categories, A_mac_process_flags, A_max_caps_program, A_max_caps_user, A_max_read_categories, A_max_read_open, A_min_security_level, A_min_write_categories, A_min_write_open, A_pax_flags, A_pm_current_task, A_pm_process_type, A_pm_tp, A_rc_force_role, A_rc_role, A_rc_type, A_remote_ip, A_security_level, rsbac_gen_process_aci_t::audit_uid, rsbac_attribute_value_t::audit_uid, rsbac_gen_process_aci_t::auid_exempt, rsbac_attribute_value_t::auid_exempt, AUTH, rsbac_attribute_value_t::auth_last_auth, rsbac_attribute_value_t::auth_learn, rsbac_attribute_value_t::auth_may_set_cap, rsbac_attribute_value_t::auth_may_setuid, CAP, rsbac_attribute_value_t::cap_process_hiding, rsbac_attribute_value_t::current_sec_level, DAZ, rsbac_attribute_value_t::daz_scanner, DEFAULT_GEN_P_ACI, rsbac_gen_process_aci_t::fake_root_uid, rsbac_attribute_value_t::fake_root_uid, FALSE, GEN, gen_p_hash(), JAIL, rsbac_attribute_value_t::jail_flags, rsbac_attribute_value_t::jail_id, rsbac_attribute_value_t::jail_ip, rsbac_attribute_value_t::jail_max_caps, rsbac_attribute_value_t::jail_scd_get, rsbac_attribute_value_t::jail_scd_modify, rsbac_gen_process_aci_t::log_program_based, rsbac_attribute_value_t::log_program_based, MAC, rsbac_attribute_value_t::mac_auto, MAC_auto, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_process_flags, rsbac_attribute_value_t::max_caps_program, rsbac_attribute_value_t::max_caps_user, rsbac_attribute_value_t::max_read_open, rsbac_attribute_value_t::min_write_open, NULL, PAX, rsbac_attribute_value_t::pax_flags, PM, rsbac_attribute_value_t::pm_current_task, rsbac_attribute_value_t::pm_process_type, rsbac_attribute_value_t::pm_tp, rsbac_target_id_t::process, process_handles, RC, rsbac_attribute_value_t::rc_force_role, rsbac_attribute_value_t::rc_role, rsbac_attribute_value_t::rc_type, rsbac_gen_process_aci_t::remote_ip, rsbac_attribute_value_t::remote_ip, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, RSBAC_EINVALIDTARGET, RSBAC_PAX_ALL_FLAGS, rsbac_ta_list_get_data_ttl(), rsbac_attribute_value_t::security_level, and TRUE.

Referenced by rsbac_ta_get_attr().

11106   {
11107     int err = 0;
11108 
11109 /*
11110 #ifdef CONFIG_RSBAC_DEBUG
11111     if (rsbac_debug_ds) rsbac_printk(KERN_DEBUG "%s\n",
11112                 "rsbac_get_attr(): Getting process attribute");
11113 #endif
11114 */
11115     switch(module)
11116       {
11117         case GEN:
11118           {
11119             struct rsbac_gen_process_aci_t aci = DEFAULT_GEN_P_ACI;
11120 
11121             rsbac_ta_list_get_data_ttl(ta_number,
11122                                 process_handles.gen[gen_p_hash(tid_p->process)],
11123                                 NULL,
11124                                 &tid_p->process,
11125                                 &aci);
11126             switch (attr)
11127               {
11128                 case A_log_program_based:
11129                   value->log_program_based = aci.log_program_based;
11130                   break;
11131                 case A_fake_root_uid:
11132                   value->fake_root_uid = aci.fake_root_uid;
11133                   break;
11134                 case A_audit_uid:
11135                   value->audit_uid = aci.audit_uid;
11136                   break;
11137                 case A_auid_exempt:
11138                   value->auid_exempt = aci.auid_exempt;
11139                   break;
11140                 case A_remote_ip:
11141                   value->remote_ip = aci.remote_ip;
11142                   break;
11143                 default:
11144                   err = -RSBAC_EINVALIDATTR;
11145               }
11146           }
11147           break;
11148 
11149 #if defined(CONFIG_RSBAC_MAC)
11150         case MAC:
11151           {
11152             struct rsbac_mac_process_aci_t aci = DEFAULT_MAC_P_ACI;
11153 
11154             rsbac_ta_list_get_data_ttl(ta_number,
11155                                 process_handles.mac[mac_p_hash(tid_p->process)],
11156                                 NULL,
11157                                 &tid_p->process,
11158                                 &aci);
11159             switch (attr)
11160               {
11161                 case A_security_level:
11162                   value->security_level = aci.owner_sec_level;
11163                   break;
11164                 case A_initial_security_level:
11165                   value->security_level = aci.owner_initial_sec_level;
11166                   break;
11167                 case A_min_security_level:
11168                   value->security_level = aci.owner_min_sec_level;
11169                   break;
11170                 case A_mac_categories:
11171                   value->mac_categories = aci.mac_owner_categories;
11172                   break;
11173                 case A_mac_initial_categories:
11174                   value->mac_categories = aci.mac_owner_initial_categories;
11175                   break;
11176                 case A_mac_min_categories:
11177                   value->mac_categories = aci.mac_owner_min_categories;
11178                   break;
11179                 case A_current_sec_level:
11180                   value->current_sec_level = aci.current_sec_level;
11181                   break;
11182                 case A_mac_curr_categories:
11183                   value->mac_categories = aci.mac_curr_categories;
11184                   break;
11185                 case A_min_write_open:
11186                   value->min_write_open = aci.min_write_open;
11187                   break;
11188                 case A_min_write_categories:
11189                   value->mac_categories = aci.min_write_categories;
11190                   break;
11191                 case A_max_read_open:
11192                   value->max_read_open = aci.max_read_open;
11193                   break;
11194                 case A_max_read_categories:
11195                   value->mac_categories = aci.max_read_categories;
11196                   break;
11197                 case A_mac_process_flags:
11198                   value->mac_process_flags = aci.mac_process_flags;
11199                   break;
11200                 case A_mac_auto:
11201                   if(aci.mac_process_flags & MAC_auto)
11202                     value->mac_auto = TRUE;
11203                   else
11204                     value->mac_auto = FALSE;
11205                   break;
11206 
11207                 default:
11208                   err = -RSBAC_EINVALIDATTR;
11209               }
11210           }
11211           break;
11212 #endif /* MAC */
11213 
11214 #if defined(CONFIG_RSBAC_PM)
11215         case PM:
11216           {
11217             struct rsbac_pm_process_aci_t aci = DEFAULT_PM_P_ACI;
11218 
11219             rsbac_ta_list_get_data_ttl(ta_number,
11220                                 process_handles.pm,
11221                                 NULL,
11222                                 &tid_p->process,
11223                                 &aci);
11224             switch (attr)
11225               {
11226                 case A_pm_tp:
11227                   value->pm_tp = aci.pm_tp;
11228                   break;
11229                 case A_pm_current_task:
11230                   value->pm_current_task = aci.pm_current_task;
11231                   break;
11232                 case A_pm_process_type:
11233                   value->pm_process_type = aci.pm_process_type;
11234                   break;
11235                 default:
11236                   err = -RSBAC_EINVALIDATTR;
11237               }
11238           }
11239           break;
11240 #endif /* PM */
11241 
11242 #if defined(CONFIG_RSBAC_DAZ)
11243         case DAZ:
11244           {
11245             struct rsbac_daz_process_aci_t aci = DEFAULT_DAZ_P_ACI;
11246 
11247             rsbac_ta_list_get_data_ttl(ta_number,
11248                                 process_handles.daz,
11249                                 NULL,
11250                                 &tid_p->process,
11251                                 &aci);
11252             switch (attr)
11253               {
11254                 case A_daz_scanner:
11255                   value->daz_scanner = aci.daz_scanner;
11256                   break;
11257                 default:
11258                   err = -RSBAC_EINVALIDATTR;
11259               }
11260           }
11261           break;
11262 #endif /* DAZ */
11263 
11264 #if defined(CONFIG_RSBAC_RC)
11265         case RC:
11266           {
11267             struct rsbac_rc_process_aci_t aci = DEFAULT_RC_P_ACI;
11268 
11269             rsbac_ta_list_get_data_ttl(ta_number,
11270                                 process_handles.rc[rc_p_hash(tid_p->process)],
11271                                 NULL,
11272                                 &tid_p->process,
11273                                 &aci);
11274             switch (attr)
11275               {
11276                 case A_rc_role:
11277                   value->rc_role = aci.rc_role;
11278                   break;
11279                 case A_rc_type:
11280                   value->rc_type = aci.rc_type;
11281                   break;
11282                 case A_rc_force_role:
11283                   value->rc_force_role = aci.rc_force_role;
11284                   break;
11285                 default:
11286                   err = -RSBAC_EINVALIDATTR;
11287               }
11288           }
11289           break;
11290 #endif /* RC */
11291 
11292 #if defined(CONFIG_RSBAC_AUTH)
11293         case AUTH:
11294           {
11295             struct rsbac_auth_process_aci_t aci = DEFAULT_AUTH_P_ACI;
11296 
11297             rsbac_ta_list_get_data_ttl(ta_number,
11298                                 process_handles.auth,
11299                                 NULL,
11300                                 &tid_p->process,
11301                                 &aci);
11302             switch (attr)
11303               {
11304                 case A_auth_may_setuid:
11305                   value->auth_may_setuid = aci.auth_may_setuid;
11306                   break;
11307                 case A_auth_may_set_cap:
11308                   value->auth_may_set_cap = aci.auth_may_set_cap;
11309                   break;
11310 #if defined(CONFIG_RSBAC_AUTH_LEARN)
11311                 case A_auth_program_file:
11312                   value->auth_program_file = aci.auth_program_file;
11313                   break;
11314                 case A_auth_start_uid:
11315                   value->auth_start_uid = aci.auth_start_uid;
11316                   break;
11317                 #ifdef CONFIG_RSBAC_AUTH_DAC_OWNER
11318                 case A_auth_start_euid:
11319                   value->auth_start_euid = aci.auth_start_euid;
11320                   break;
11321                 #endif
11322                 #ifdef CONFIG_RSBAC_AUTH_GROUP
11323                 case A_auth_start_gid:
11324                   value->auth_start_gid = aci.auth_start_gid;
11325                   break;
11326                 #ifdef CONFIG_RSBAC_AUTH_DAC_GROUP
11327                 case A_auth_start_egid:
11328                   value->auth_start_egid = aci.auth_start_egid;
11329                   break;
11330                 #endif
11331                 #endif
11332                 case A_auth_learn:
11333                   value->auth_learn = aci.auth_learn;
11334                   break;
11335 #else
11336                 case A_auth_learn:
11337                   value->auth_learn = FALSE;
11338                   break;
11339 #endif
11340                 case A_auth_last_auth:
11341                   value->auth_last_auth = aci.auth_last_auth;
11342                   break;
11343                 default:
11344                   err = -RSBAC_EINVALIDATTR;
11345               }
11346           }
11347           break;
11348 #endif /* AUTH */
11349 
11350 #if defined(CONFIG_RSBAC_CAP)
11351         case CAP:
11352           {
11353             struct rsbac_cap_process_aci_t aci = DEFAULT_CAP_P_ACI;
11354 
11355             rsbac_ta_list_get_data_ttl(ta_number,
11356                                 process_handles.cap,
11357                                 NULL,
11358                                 &tid_p->process,
11359                                 &aci);
11360             switch (attr)
11361               {
11362                 case A_cap_process_hiding:
11363                   value->cap_process_hiding = aci.cap_process_hiding;
11364                   break;
11365 #ifdef CONFIG_RSBAC_CAP_LOG_MISSING
11366                 case A_max_caps_user:
11367                   value->max_caps_user = aci.max_caps_user;
11368                   break;
11369                 case A_max_caps_program:
11370                   value->max_caps_program = aci.max_caps_program;
11371                   break;
11372 #endif
11373                 default:
11374                   err = -RSBAC_EINVALIDATTR;
11375               }
11376           }
11377           break;
11378 #endif /* CAP */
11379 
11380 #if defined(CONFIG_RSBAC_JAIL)
11381         case JAIL:
11382           {
11383             struct rsbac_jail_process_aci_t aci = DEFAULT_JAIL_P_ACI;
11384 
11385             rsbac_ta_list_get_data_ttl(ta_number,
11386                                 process_handles.jail[jail_p_hash(tid_p->process)],
11387                                 NULL,
11388                                 &tid_p->process,
11389                                 &aci);
11390             switch (attr)
11391               {
11392                 case A_jail_id:
11393                   value->jail_id = aci.id;
11394                   break;
11395                 case A_jail_ip:
11396                   value->jail_ip = aci.ip;
11397                   break;
11398                 case A_jail_flags:
11399                   value->jail_flags = aci.flags;
11400                   break;
11401                 case A_jail_max_caps:
11402                   value->jail_max_caps = aci.max_caps;
11403                   break;
11404                 case A_jail_scd_get:
11405                   value->jail_scd_get = aci.scd_get;
11406                   break;
11407                 case A_jail_scd_modify:
11408                   value->jail_scd_modify = aci.scd_modify;
11409                   break;
11410                 default:
11411                   err = -RSBAC_EINVALIDATTR;
11412               }
11413           }
11414           break;
11415 #endif /* JAIL */
11416 
11417 #if defined(CONFIG_RSBAC_PAX)
11418         case PAX:
11419           {
11420             struct task_struct * task_p;
11421 
11422             switch (attr)
11423               {
11424                 case A_pax_flags:
11425                   read_lock(&tasklist_lock);
11426                   task_p = find_task_by_pid(tid_p->process);
11427                   if(task_p)
11428                     {
11429 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
11430   #if defined(CONFIG_PAX_NOEXEC) || defined(CONFIG_PAX_ASLR)
11431                       if(task_p->mm)
11432                         value->pax_flags = task_p->mm->flags & RSBAC_PAX_ALL_FLAGS;
11433                       else
11434   #endif
11435                         value->pax_flags = 0;
11436 #else
11437                       value->pax_flags = task_p->flags & RSBAC_PAX_ALL_FLAGS;
11438 #endif
11439                     }
11440                   else
11441                     err = -RSBAC_EINVALIDTARGET;
11442                   read_unlock(&tasklist_lock);
11443                   break;
11444                 default:
11445                   err = -RSBAC_EINVALIDATTR;
11446               }
11447           }
11448           break;
11449 #endif /* PAX */
11450 
11451         default:
11452           err = -RSBAC_EINVALIDMODULE;
11453       }
11454     return err;
11455   }

static int get_attr_user rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value,
rsbac_boolean_t  inherit
[static]
 

Definition at line 10766 of file aci_data_structures.c.

References A_auth_role, A_cap_role, A_daz_role, A_ff_role, A_initial_security_level, A_jail_role, A_log_user_based, A_mac_categories, A_mac_initial_categories, A_mac_min_categories, A_mac_role, A_mac_user_flags, A_max_caps, A_min_caps, A_min_security_level, A_pax_role, A_pm_role, A_pm_task_set, A_pseudo, A_rc_def_role, A_rc_type, A_res_max, A_res_min, A_res_role, A_security_level, A_system_role, AUTH, CAP, DAZ, DEFAULT_GEN_U_ACI, FF, GEN, JAIL, rsbac_gen_user_aci_t::log_user_based, rsbac_attribute_value_t::log_user_based, MAC, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_user_flags, rsbac_attribute_value_t::max_caps, rsbac_attribute_value_t::min_caps, NULL, PAX, PM, rsbac_attribute_value_t::pm_role, rsbac_attribute_value_t::pm_task_set, rsbac_gen_user_aci_t::pseudo, rsbac_attribute_value_t::pseudo, RC, rsbac_attribute_value_t::rc_def_role, rsbac_attribute_value_t::rc_type, RES, rsbac_attribute_value_t::res_array, RSBAC_ALL_USERS, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, rsbac_ta_list_get_data_ttl(), rsbac_attribute_value_t::security_level, SR_user, rsbac_attribute_value_t::system_role, rsbac_target_id_t::user, and user_handles.

Referenced by rsbac_ta_get_attr().

10774   {
10775     int err = 0;
10776 
10777 /*
10778 #ifdef CONFIG_RSBAC_DEBUG
10779     if (rsbac_debug_ds) rsbac_printk(KERN_DEBUG
10780                    "rsbac_get_attr(): Getting user attribute\n");
10781 #endif
10782 */
10783     switch(module)
10784       {
10785         case GEN:
10786           {
10787             struct rsbac_gen_user_aci_t aci = DEFAULT_GEN_U_ACI;
10788 
10789             rsbac_ta_list_get_data_ttl(ta_number,
10790                                 user_handles.gen,
10791                                 NULL,
10792                                 &tid_p->user,
10793                                 &aci);
10794             switch (attr)
10795               {
10796                 case A_pseudo:
10797                   value->pseudo = aci.pseudo;
10798                   break;
10799                 case A_log_user_based:
10800                   value->log_user_based = aci.log_user_based;
10801                   break;
10802                 default:
10803                   err = -RSBAC_EINVALIDATTR;
10804               }
10805           }
10806           break;
10807 
10808 #if defined(CONFIG_RSBAC_MAC)
10809         case MAC:
10810           {
10811             struct rsbac_mac_user_aci_t aci = DEFAULT_MAC_U_ACI;
10812 
10813             rsbac_ta_list_get_data_ttl(ta_number,
10814                                 user_handles.mac,
10815                                 NULL,
10816                                 &tid_p->user,
10817                                 &aci);
10818             switch (attr)
10819               {
10820                 case A_security_level:
10821                   value->security_level = aci.security_level;
10822                   break;
10823                 case A_initial_security_level:
10824                   value->security_level = aci.initial_security_level;
10825                   break;
10826                 case A_min_security_level:
10827                   value->security_level = aci.min_security_level;
10828                   break;
10829                 case A_mac_categories:
10830                   value->mac_categories = aci.mac_categories;
10831                   break;
10832                 case A_mac_initial_categories:
10833                   value->mac_categories = aci.mac_initial_categories;
10834                   break;
10835                 case A_mac_min_categories:
10836                   value->mac_categories = aci.mac_min_categories;
10837                   break;
10838                 case A_system_role:
10839                 case A_mac_role:
10840                   value->system_role = aci.system_role;
10841                   break;
10842                 case A_mac_user_flags:
10843                   value->mac_user_flags = aci.mac_user_flags;
10844                   break;
10845 
10846                 default:
10847                   err = -RSBAC_EINVALIDATTR;
10848               }
10849           }
10850           break;
10851 #endif /* MAC */
10852 
10853 #if defined(CONFIG_RSBAC_PM)
10854         case PM:
10855           {
10856             struct rsbac_pm_user_aci_t aci = DEFAULT_PM_U_ACI;
10857 
10858             rsbac_ta_list_get_data_ttl(ta_number,
10859                                 user_handles.pm,
10860                                 NULL,
10861                                 &tid_p->user,
10862                                 &aci);
10863             switch (attr)
10864               {
10865                 case A_pm_task_set:
10866                   value->pm_task_set = aci.pm_task_set;
10867                   break;
10868                 case A_pm_role:
10869                   value->pm_role = aci.pm_role;
10870                   break;
10871                 default:
10872                   err = -RSBAC_EINVALIDATTR;
10873               }
10874           }
10875           break;
10876 #endif /* PM */
10877 
10878 #if defined(CONFIG_RSBAC_DAZ)
10879         case DAZ:
10880           {
10881             rsbac_system_role_int_t role = SR_user;
10882 
10883             rsbac_ta_list_get_data_ttl(ta_number,
10884                                 user_handles.daz,
10885                                 NULL,
10886                                 &tid_p->user,
10887                                 &role);
10888             switch (attr)
10889               {
10890                 case A_system_role:
10891                 case A_daz_role:
10892                   value->system_role = role;
10893                   break;
10894 
10895                 default:
10896                   err = -RSBAC_EINVALIDATTR;
10897               }
10898           }
10899           break;
10900 #endif /* DAZ */
10901 
10902 #if defined(CONFIG_RSBAC_FF)
10903         case FF:
10904           {
10905             rsbac_system_role_int_t role = SR_user;
10906 
10907             rsbac_ta_list_get_data_ttl(ta_number,
10908                                 user_handles.ff,
10909                                 NULL,
10910                                 &tid_p->user,
10911                                 &role);
10912             switch (attr)
10913               {
10914                 case A_system_role:
10915                 case A_ff_role:
10916                   value->system_role = role;
10917                   break;
10918 
10919                 default:
10920                   err = -RSBAC_EINVALIDATTR;
10921               }
10922           }
10923           break;
10924 #endif /* FF */
10925 
10926 #if defined(CONFIG_RSBAC_RC)
10927         case RC:
10928           {
10929             struct rsbac_rc_user_aci_t aci = DEFAULT_RC_U_ACI;
10930 
10931             rsbac_ta_list_get_data_ttl(ta_number,
10932                                 user_handles.rc,
10933                                 NULL,
10934                                 &tid_p->user,
10935                                 &aci);
10936             switch (attr)
10937               {
10938                 case A_rc_def_role:
10939                   value->rc_def_role = aci.rc_role;
10940                   break;
10941                 case A_rc_type:
10942                   value->rc_type = aci.rc_type;
10943                   break;
10944                 default:
10945                   err = -RSBAC_EINVALIDATTR;
10946               }
10947           }
10948           break;
10949 #endif /* RC */
10950 
10951 #if defined(CONFIG_RSBAC_AUTH)
10952         case AUTH:
10953           {
10954             rsbac_system_role_int_t role = SR_user;
10955 
10956             rsbac_ta_list_get_data_ttl(ta_number,
10957                                 user_handles.auth,
10958                                 NULL,
10959                                 &tid_p->user,
10960                                 &role);
10961             switch (attr)
10962               {
10963                 case A_system_role:
10964                 case A_auth_role:
10965                   value->system_role = role;
10966                   break;
10967 
10968                 default:
10969                   err = -RSBAC_EINVALIDATTR;
10970               }
10971           }
10972           break;
10973 #endif /* AUTH */
10974 
10975 #if defined(CONFIG_RSBAC_CAP)
10976         case CAP:
10977           {
10978             struct rsbac_cap_user_aci_t aci = DEFAULT_CAP_U_ACI;
10979 
10980             rsbac_ta_list_get_data_ttl(ta_number,
10981                                 user_handles.cap,
10982                                 NULL,
10983                                 &tid_p->user,
10984                                 &aci);
10985             switch (attr)
10986               {
10987                 case A_system_role:
10988                 case A_cap_role:
10989                   value->system_role = aci.cap_role;
10990                   break;
10991                 case A_min_caps:
10992                   value->min_caps = aci.min_caps;
10993                   break;
10994                 case A_max_caps:
10995                   value->max_caps = aci.max_caps;
10996                   break;
10997                 default:
10998                   err = -RSBAC_EINVALIDATTR;
10999               }
11000           }
11001           break;
11002 #endif /* CAP */
11003 
11004 #if defined(CONFIG_RSBAC_JAIL)
11005         case JAIL:
11006           {
11007             rsbac_system_role_int_t role = SR_user;
11008 
11009             rsbac_ta_list_get_data_ttl(ta_number,
11010                                 user_handles.jail,
11011                                 NULL,
11012                                 &tid_p->user,
11013                                 &role);
11014             switch (attr)
11015               {
11016                 case A_system_role:
11017                 case A_jail_role:
11018                   value->system_role = role;
11019                   break;
11020 
11021                 default:
11022                   err = -RSBAC_EINVALIDATTR;
11023               }
11024           }
11025           break;
11026 #endif /* JAIL */
11027 
11028 #if defined(CONFIG_RSBAC_RES)
11029         case RES:
11030           {
11031             struct rsbac_res_user_aci_t aci = DEFAULT_RES_U_ACI;
11032 
11033             if(   rsbac_ta_list_get_data_ttl(ta_number,
11034                                       user_handles.res,
11035                                       NULL,
11036                                       &tid_p->user,
11037                                       &aci)
11038                && (tid_p->user != RSBAC_ALL_USERS)
11039               )
11040               {
11041                 tid_p->user = RSBAC_ALL_USERS;
11042                 rsbac_ta_list_get_data_ttl(ta_number,
11043                                     user_handles.res,
11044                                     NULL,
11045                                     &tid_p->user,
11046                                     &aci);
11047               }
11048             switch (attr)
11049               {
11050                 case A_system_role:
11051                 case A_res_role:
11052                   value->system_role = aci.res_role;
11053                   break;
11054                 case A_res_min:
11055                   memcpy(&value->res_array, &aci.res_min, sizeof(aci.res_min));
11056                   break;
11057                 case A_res_max:
11058                   memcpy(&value->res_array, &aci.res_max, sizeof(aci.res_max));
11059                   break;
11060                 default:
11061                   err = -RSBAC_EINVALIDATTR;
11062               }
11063           }
11064           break;
11065 #endif /* RES */
11066 
11067 #if defined(CONFIG_RSBAC_PAX)
11068         case PAX:
11069           {
11070             rsbac_system_role_int_t role = SR_user;
11071 
11072             rsbac_ta_list_get_data_ttl(ta_number,
11073                                 user_handles.pax,
11074                                 NULL,
11075                                 &tid_p->user,
11076                                 &role);
11077             switch (attr)
11078               {
11079                 case A_system_role:
11080                 case A_pax_role:
11081                   value->system_role = role;
11082                   break;
11083 
11084                 default:
11085                   err = -RSBAC_EINVALIDATTR;
11086               }
11087           }
11088           break;
11089 #endif /* PAX */
11090 
11091         default:
11092           err = -RSBAC_EINVALIDMODULE;
11093       }
11094     /* and return */
11095     return err;
11096   }

static int ipc_compare void *  desc1,
void *  desc2
[static]
 

Definition at line 657 of file aci_data_structures.c.

References rsbac_ipc_t::id, rsbac_ipc_id_t::id_nr, and rsbac_ipc_t::type.

Referenced by register_ipc_lists().

00658   {
00659     int result;
00660     struct rsbac_ipc_t * i_desc1 = desc1;
00661     struct rsbac_ipc_t * i_desc2 = desc2;
00662 
00663     result = memcmp(&i_desc1->type,
00664                     &i_desc2->type,
00665                     sizeof(i_desc1->type));
00666     if(result)
00667       return result;
00668     else
00669       return memcmp(&i_desc1->id.id_nr,
00670                     &i_desc2->id.id_nr,
00671                     sizeof(i_desc1->id.id_nr));
00672   }

static int lookup_aci_path_dentry struct super_block *  sb_p,
struct dentry **  dir_dentry_pp,
rsbac_boolean_t  create_dir,
kdev_t  kdev
[static]
 

Definition at line 353 of file aci_data_structures.c.

References device_list_head, lookup_device(), NULL, RSBAC_EACCESS, RSBAC_ECOULDNOTCREATEPATH, RSBAC_EINVALIDDEV, RSBAC_EINVALIDPOINTER, RSBAC_ENOROOTDIR, RSBAC_ENOTFOUND, RSBAC_ENOTWRITABLE, RSBAC_EPATHTOOLONG, rsbac_get_super_block(), rsbac_lookup_one_len(), rsbac_printk(), SOCKFS_MAGIC, and writable().

Referenced by rsbac_read_open(), and rsbac_write_open().

00357   {
00358     struct dentry * dir_dentry_p = NULL;
00359     struct dentry * root_dentry_p = NULL;
00360     int             err=0;
00361     struct rsbac_device_list_item_t * device_p;
00362     u_long dflags;
00363 
00364     if(!dir_dentry_pp)
00365       return(-RSBAC_EINVALIDPOINTER);
00366 
00367     if(!sb_p)
00368       {
00369         sb_p = rsbac_get_super_block(kdev);
00370         if (!sb_p)
00371           {
00372             rsbac_printk(KERN_WARNING
00373                    "lookup_aci_path_dentry(): invalid device %02u:%02u\n",
00374                    RSBAC_MAJOR(kdev), RSBAC_MINOR(kdev));
00375             return (-RSBAC_EINVALIDDEV);
00376           }
00377       }
00378 
00379     /* pipefs must not be read from */
00380     if(   (sb_p->s_magic == PIPEFS_MAGIC)
00381        || (sb_p->s_magic == SOCKFS_MAGIC)
00382       )
00383       {
00384         return -RSBAC_ENOTFOUND;
00385       }
00386 
00387     rsbac_read_lock(&device_list_head.lock, &dflags);
00388     device_p = lookup_device(kdev);
00389     if(!device_p)
00390       {
00391         rsbac_printk(KERN_WARNING
00392                "lookup_aci_path_dentry(): No entry for device %02u:%02u\n",
00393                MAJOR(kdev), MINOR(kdev));
00394         rsbac_read_unlock(&device_list_head.lock, &dflags);
00395         return(-RSBAC_EINVALIDDEV);
00396       }
00397     /* already looked up earlier? */
00398     if(device_p->rsbac_dir_dentry_p)
00399       {
00400         *dir_dentry_pp = device_p->rsbac_dir_dentry_p;
00401 #ifdef CONFIG_RSBAC_DEBUG
00402         if(rsbac_debug_ds)
00403           {
00404             rsbac_printk(KERN_DEBUG
00405                    "lookup_aci_path_dentry(): device_p->rsbac_dir_dentry_p->d_count for device %02u:%02u is %i!\n",
00406                    MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev),
00407                    atomic_read(&device_p->rsbac_dir_dentry_p->d_count));
00408           }
00409 #endif
00410         rsbac_read_unlock(&device_list_head.lock, &dflags);
00411         return(0);
00412       }
00413     /* Must unlock here for the lookup */
00414     rsbac_read_unlock(&device_list_head.lock, &dflags);
00415 
00416 #ifdef CONFIG_RSBAC_DEBUG
00417     if(rsbac_debug_ds)
00418       {
00419         rsbac_printk(KERN_DEBUG
00420                "lookup_aci_path_dentry(): first time lookup for or non-existing %s on device %02u:%02u!\n",
00421                RSBAC_ACI_PATH,
00422                MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
00423       }
00424 #endif
00425     if (!sb_p->s_root)
00426       {
00427         rsbac_printk(KERN_WARNING
00428                "lookup_aci_path_dentry(): Super_block for device %02u:%02u has no root dentry!\n",
00429                MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
00430         err = -RSBAC_EINVALIDDEV;
00431         goto out;
00432       }
00433 
00434     if (!sb_p->s_root->d_inode)
00435       {
00436         rsbac_printk(KERN_WARNING
00437                "lookup_aci_path_dentry(): Super_block for device %02u:%02u has no root dentry->d_inode!\n",
00438                MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
00439         err = -RSBAC_EINVALIDDEV;
00440         goto out;
00441       }
00442 
00443     /* lookup dentry of ACI_PATH on this device */
00444 #ifdef CONFIG_RSBAC_DEBUG
00445     if(rsbac_debug_ds)
00446       {
00447         rsbac_printk(KERN_DEBUG
00448                "lookup_aci_path_dentry(): lookup rsbac path %s for device %02u:%02u, sb_p->s_root->d_count is %i!\n",
00449                RSBAC_ACI_PATH, MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev),
00450                atomic_read(&sb_p->s_root->d_count));
00451       }
00452 #endif
00453     dir_dentry_p = rsbac_lookup_one_len(RSBAC_ACI_PATH, sb_p->s_root, strlen(RSBAC_ACI_PATH));
00454     if(IS_ERR(dir_dentry_p))
00455       switch(PTR_ERR(dir_dentry_p))
00456         {
00457           case -ENOENT:
00458           case -ENOTDIR:
00459             err = -RSBAC_ENOTFOUND;
00460             goto out;
00461           case -ENOMEM:
00462             rsbac_printk(KERN_WARNING
00463                    "lookup_aci_path_dentry(): memory allocation error!\n");
00464             err = -RSBAC_ENOROOTDIR;
00465             goto out;
00466           case -ENAMETOOLONG:
00467             rsbac_printk(KERN_WARNING
00468                    "lookup_aci_path_dentry(): ACI_PATH too long on fs!\n");
00469             err = -RSBAC_EPATHTOOLONG;
00470             goto out;
00471           case -EACCES:
00472             rsbac_printk(KERN_WARNING
00473                    "lookup_aci_path_dentry(): No access to ACI_PATH!\n");
00474             err = -RSBAC_EACCESS;
00475             goto out;
00476           default:
00477             rsbac_printk(KERN_WARNING
00478                    "lookup_aci_path_dentry(): Error on root dir: %li!\n",
00479                    PTR_ERR(dir_dentry_p));
00480             err = -RSBAC_ENOROOTDIR;
00481             goto out;
00482         }
00483 
00484     if (!dir_dentry_p)
00485       {
00486         rsbac_printk(KERN_WARNING
00487                "lookup_aci_path_dentry(): rsbac_lookup_(dentry|one) returned null pointer!\n");
00488         err = -RSBAC_EINVALIDPOINTER;
00489         goto out;
00490       }
00491     if (!dir_dentry_p->d_inode)
00492       { /* dir could not be found -> try to create it */
00493         /* but only, if allowed... */
00494         if (!create_dir)
00495           {
00496             err = -RSBAC_ENOTFOUND;
00497             goto out_dir_dput;
00498           }
00499 #ifdef CONFIG_RSBAC_DEBUG
00500         if(rsbac_debug_ds)
00501           {
00502             rsbac_printk(KERN_DEBUG
00503                    "lookup_aci_path_dentry(): try to create dir, first test writable!\n");
00504           }
00505 #endif
00506         /* ... and writable. */
00507         if (!writable(sb_p))
00508           { /* mounted read only or special case */
00509             err = -RSBAC_ENOTWRITABLE;
00510             goto out_dir_dput;
00511           }
00512         root_dentry_p = lock_parent(dir_dentry_p);
00513         err = PTR_ERR(root_dentry_p);
00514         if (   IS_ERR(root_dentry_p))
00515           {
00516             err = -RSBAC_ECOULDNOTCREATEPATH;
00517             goto out_dir_dput;
00518           }
00519         if (   !root_dentry_p->d_inode
00520             || !root_dentry_p->d_inode->i_op
00521             || !root_dentry_p->d_inode->i_op->mkdir)
00522           {
00523             unlock_dir(root_dentry_p);
00524             err = -RSBAC_ECOULDNOTCREATEPATH;
00525             goto out_dir_dput;
00526           }
00527         DQUOT_INIT(root_dentry_p->d_inode);
00528         err = root_dentry_p->d_inode->i_op->mkdir(root_dentry_p->d_inode,
00529                                                   dir_dentry_p,
00530                                                   RSBAC_ACI_DIR_MODE);
00531         unlock_dir(root_dentry_p);
00532         if (err)
00533           {
00534             err = -RSBAC_ECOULDNOTCREATEPATH;
00535             goto out_dir_dput;
00536           }
00537       }
00538     else /* was found */
00539       { /* check, whether this is a dir */
00540         if(!S_ISDIR(dir_dentry_p->d_inode->i_mode))
00541           { /* no dir! We have a real prob here! */
00542             rsbac_printk(KERN_WARNING
00543                    "lookup_aci_path_dentry(): supposed /%s dir on dev %02u:%02u is no dir!\n",
00544                    RSBAC_ACI_PATH,
00545                    MAJOR(sb_p->s_dev),
00546                    MINOR(sb_p->s_dev));
00547             err = -RSBAC_EACCESS;
00548             goto out_dir_dput;
00549           }
00550       }
00551 #ifdef CONFIG_RSBAC_DEBUG
00552     if(rsbac_debug_ds)
00553       {
00554         rsbac_printk(KERN_DEBUG
00555                "lookup_aci_path_dentry(): dir_dentry_p->d_count is %i!\n",
00556                atomic_read(&dir_dentry_p->d_count));
00557         rsbac_printk(KERN_DEBUG
00558                "lookup_aci_path_dentry(): sb_p->s_root->d_count is now %i!\n",
00559                atomic_read(&sb_p->s_root->d_count));
00560       }
00561 #endif
00562     /* we want to keep dir_dentry_p in device_item */
00563     /* dput must be done in remove_device_item! */
00564     *dir_dentry_pp = dir_dentry_p;
00565 
00566     /* Must lock and relookup device_p to cache result */
00567     rsbac_read_lock(&device_list_head.lock, &dflags);
00568     device_p = lookup_device(kdev);
00569     if(device_p && !device_p->rsbac_dir_dentry_p)
00570       {
00571         device_p->rsbac_dir_dentry_p = dir_dentry_p;
00572         device_p->rsbac_dir_inode = dir_dentry_p->d_inode->i_ino;
00573       }
00574     rsbac_read_unlock(&device_list_head.lock, &dflags);
00575 
00576 out:
00577     return (err);
00578 
00579 out_dir_dput:
00580     dput(dir_dentry_p);
00581     goto out;
00582   }

static struct rsbac_device_list_item_t * lookup_device kdev_t   )  [static]
 

Definition at line 593 of file aci_data_structures.c.

References device_list_head.

Referenced by get_attr_fd(), lookup_aci_path_dentry(), remove_device_item(), rsbac_auth_add_to_f_capset(), rsbac_auth_clear_f_capset(), rsbac_auth_copy_fp_capset(), rsbac_auth_get_f_caplist(), rsbac_auth_p_capset_member(), rsbac_auth_remove_from_f_capset(), rsbac_get_full_path(), rsbac_get_full_path_length(), rsbac_get_parent(), rsbac_get_super_block(), rsbac_mac_add_to_f_truset(), rsbac_mac_clear_f_truset(), rsbac_mac_copy_fp_truset(), rsbac_mac_get_f_trulist(), rsbac_mac_remove_from_f_truset(), rsbac_mount(), rsbac_mount_auth(), rsbac_mount_mac(), rsbac_ta_remove_target(), rsbac_umount(), rsbac_umount_auth(), rsbac_umount_mac(), and set_attr_fd().

00594     {
00595       struct rsbac_device_list_item_t  * curr = device_list_head.curr;
00596       
00597       /* if there is no current item or it is not the right one, search... */
00598 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
00599       if(! (curr && (MAJOR(curr->id) == MAJOR(kdev)) && (MINOR(curr->id) == MINOR(kdev)) ) )
00600 #else
00601       if(! (curr && (curr->id == kdev) ) )
00602 #endif
00603         {
00604           curr = device_list_head.head;
00605           while (   curr
00606                  && (   (RSBAC_MAJOR(curr->id) != RSBAC_MAJOR(kdev))
00607                      || (RSBAC_MINOR(curr->id) != RSBAC_MINOR(kdev))
00608                     )
00609                 )
00610             {
00611               curr = curr->next;
00612             }
00613           if (curr)
00614             device_list_head.curr=curr;
00615         }
00616       /* it is the current item -> return it */
00617         return (curr);
00618     }

static int __init register_dev_lists void   )  [static]
 

Definition at line 5503 of file aci_data_structures.c.

References DEFAULT_GEN_DEV_ACI, dev_compare(), dev_handles, dev_major_compare(), dev_major_handles, gen_dev_get_conv(), RC_type_inherit_parent, registration_error(), RSBAC_GEN_ACI_DEV_NAME, RSBAC_GEN_DEV_ACI_KEY, RSBAC_GEN_DEV_ACI_VERSION, RSBAC_LIST_BACKUP, RSBAC_LIST_DEF_DATA, RSBAC_LIST_PERSIST, rsbac_list_register(), RSBAC_LIST_VERSION, RSBAC_MAC_ACI_DEV_NAME, RSBAC_PM_ACI_DEV_NAME, rsbac_printk(), RSBAC_RC_ACI_DEV_MAJOR_NAME, RSBAC_RC_ACI_DEV_NAME, and RSBAC_RC_GENERAL_TYPE.

Referenced by rsbac_do_init().

05505   {
05506     int err = 0;
05507     struct rsbac_list_info_t * list_info_p;
05508 
05509     list_info_p = kmalloc(sizeof(*list_info_p), GFP_KERNEL);
05510     if(!list_info_p)
05511       {
05512         return -ENOMEM;
05513       }
05514 
05515 #ifdef CONFIG_RSBAC_DEBUG
05516     if (rsbac_debug_ds)
05517       {
05518         rsbac_printk(KERN_DEBUG "rsbac_do_init(): registering DEV lists\n");
05519       }
05520 #endif
05521     {
05522       struct rsbac_gen_dev_aci_t def_aci = DEFAULT_GEN_DEV_ACI;
05523 
05524       list_info_p->version = RSBAC_GEN_DEV_ACI_VERSION;
05525       list_info_p->key = RSBAC_GEN_DEV_ACI_KEY;
05526       list_info_p->desc_size = sizeof(struct rsbac_dev_desc_t);
05527       list_info_p->data_size = sizeof(struct rsbac_gen_dev_aci_t);
05528       list_info_p->max_age = 0;
05529       err = rsbac_list_register(RSBAC_LIST_VERSION,
05530                                 &dev_handles.gen,
05531                                 list_info_p,
05532                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05533                                 RSBAC_LIST_BACKUP |
05534                                 #endif
05535                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05536                                 dev_compare,
05537                                 gen_dev_get_conv,
05538                                 &def_aci,
05539                                 RSBAC_GEN_ACI_DEV_NAME,
05540                                 RSBAC_AUTO_DEV);
05541       if(err)
05542         {
05543           registration_error(err, "DEV General");
05544         }
05545     }
05546 #if defined(CONFIG_RSBAC_MAC)
05547     {
05548       struct rsbac_mac_dev_aci_t def_aci = DEFAULT_MAC_DEV_ACI;
05549 
05550       list_info_p->version = RSBAC_MAC_DEV_ACI_VERSION;
05551       list_info_p->key = RSBAC_MAC_DEV_ACI_KEY;
05552       list_info_p->desc_size = sizeof(struct rsbac_dev_desc_t);
05553       list_info_p->data_size = sizeof(struct rsbac_mac_dev_aci_t);
05554       list_info_p->max_age = 0;
05555       err = rsbac_list_register(RSBAC_LIST_VERSION,
05556                                 &dev_handles.mac,
05557                                 list_info_p,
05558                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05559                                 RSBAC_LIST_BACKUP |
05560                                 #endif
05561                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05562                                 dev_compare,
05563                                 mac_dev_get_conv,
05564                                 &def_aci,
05565                                 RSBAC_MAC_ACI_DEV_NAME,
05566                                 RSBAC_AUTO_DEV);
05567       if(err)
05568         {
05569           registration_error(err, "DEV MAC");
05570         }
05571     }
05572 #endif
05573 #if defined(CONFIG_RSBAC_PM)
05574     {
05575       struct rsbac_pm_dev_aci_t def_aci = DEFAULT_PM_DEV_ACI;
05576 
05577       list_info_p->version = RSBAC_PM_DEV_ACI_VERSION;
05578       list_info_p->key = RSBAC_PM_DEV_ACI_KEY;
05579       list_info_p->desc_size = sizeof(struct rsbac_dev_desc_t);
05580       list_info_p->data_size = sizeof(struct rsbac_pm_dev_aci_t);
05581       list_info_p->max_age = 0;
05582       err = rsbac_list_register(RSBAC_LIST_VERSION,
05583                                 &dev_handles.pm,
05584                                 list_info_p,
05585                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05586                                 RSBAC_LIST_BACKUP |
05587                                 #endif
05588                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05589                                 dev_compare,
05590                                 pm_dev_get_conv,
05591                                 &def_aci,
05592                                 RSBAC_PM_ACI_DEV_NAME,
05593                                 RSBAC_AUTO_DEV);
05594       if(err)
05595         {
05596           registration_error(err, "DEV PM");
05597         }
05598     }
05599 #endif
05600 #if defined(CONFIG_RSBAC_RC)
05601     {
05602       rsbac_rc_type_id_t def_major_aci = RSBAC_RC_GENERAL_TYPE;
05603       rsbac_rc_type_id_t def_aci = RC_type_inherit_parent;
05604 
05605       list_info_p->version = RSBAC_RC_DEV_ACI_VERSION;
05606       list_info_p->key = RSBAC_RC_DEV_ACI_KEY;
05607       list_info_p->desc_size = sizeof(struct rsbac_dev_desc_t);
05608       list_info_p->data_size = sizeof(rsbac_rc_type_id_t);
05609       list_info_p->max_age = 0;
05610       err = rsbac_list_register(RSBAC_LIST_VERSION,
05611                                 &dev_major_handles.rc,
05612                                 list_info_p,
05613                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05614                                 RSBAC_LIST_BACKUP |
05615                                 #endif
05616                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05617                                 dev_major_compare,
05618                                 rc_dev_get_conv,
05619                                 &def_major_aci,
05620                                 RSBAC_RC_ACI_DEV_MAJOR_NAME,
05621                                 RSBAC_AUTO_DEV);
05622       if(err)
05623         {
05624           registration_error(err, "DEV major RC");
05625         }
05626       list_info_p->version = RSBAC_RC_DEV_ACI_VERSION;
05627       list_info_p->key = RSBAC_RC_DEV_ACI_KEY;
05628       list_info_p->desc_size = sizeof(struct rsbac_dev_desc_t);
05629       list_info_p->data_size = sizeof(rsbac_rc_type_id_t);
05630       list_info_p->max_age = 0;
05631       err = rsbac_list_register(RSBAC_LIST_VERSION,
05632                                 &dev_handles.rc,
05633                                 list_info_p,
05634                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05635                                 RSBAC_LIST_BACKUP |
05636                                 #endif
05637                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05638                                 dev_compare,
05639                                 rc_dev_get_conv,
05640                                 &def_aci,
05641                                 RSBAC_RC_ACI_DEV_NAME,
05642                                 RSBAC_AUTO_DEV);
05643       if(err)
05644         {
05645           registration_error(err, "DEV RC");
05646         }
05647     }
05648 #endif
05649 
05650     return err;
05651   }

static int register_fd_lists struct rsbac_device_list_item_t *  device_p,
kdev_t  kdev
[static]
 

Definition at line 1105 of file aci_data_structures.c.

References DEFAULT_DAZ_FD_SCANNED, gen_fd_get_conv(), get_error_name(), name, NULL, PF_PAX_EMUTRAMP, PF_PAX_MPROTECT, PF_PAX_PAGEEXEC, PF_PAX_RANDEXEC, PF_PAX_RANDMMAP, PF_PAX_SEGMEXEC, RSBAC_EINVALIDPOINTER, RSBAC_ENOMEM, RSBAC_FF_DEF, RSBAC_GEN_FD_ACI_KEY, RSBAC_GEN_FD_ACI_VERSION, rsbac_kfree(), rsbac_kmalloc(), rsbac_list_compare_u32(), RSBAC_LIST_DEF_DATA, RSBAC_LIST_PERSIST, rsbac_list_register(), RSBAC_LIST_VERSION, RSBAC_MAXNAMELEN, RSBAC_PAX_DEF_FLAGS, and rsbac_printk().

Referenced by rsbac_do_init(), and rsbac_mount().

01107   {
01108     char                          * name;
01109     int                             err = 0;
01110     int                             tmperr;
01111     u_int                           file_no;
01112     struct rsbac_list_info_t      * info_p;
01113     if(!device_p)
01114       return(-RSBAC_EINVALIDPOINTER);
01115     name = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01116     if(!name)
01117       return -RSBAC_ENOMEM;
01118     info_p = rsbac_kmalloc(sizeof(*info_p));
01119     if(!info_p)
01120       {
01121         rsbac_kfree(name);
01122         return -RSBAC_ENOMEM;
01123       }
01124 
01125     /* register general lists */
01126     {
01127     for (file_no = 0; file_no < RSBAC_GEN_NR_FD_LISTS; file_no++)
01128       {
01129         /* construct name from base name + number */
01130         sprintf(name, "%s%u", RSBAC_GEN_FD_NAME, file_no);
01131         info_p->version = RSBAC_GEN_FD_ACI_VERSION;
01132         info_p->key = RSBAC_GEN_FD_ACI_KEY;
01133         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01134         info_p->data_size = sizeof(struct rsbac_gen_fd_aci_t);
01135         info_p->max_age = 0;
01136         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01137                                      &(device_p->handles.gen[file_no]),
01138                                      info_p,
01139                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01140                                      rsbac_list_compare_u32,
01141                                      gen_fd_get_conv,
01142                                      &def_gen_fd_aci,
01143                                      name,
01144                                      kdev);
01145         if(tmperr)
01146           {
01147             char * tmp;
01148 
01149             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01150             if(tmp)
01151               {
01152                 rsbac_printk(KERN_WARNING
01153                        "register_fd_lists(): registering general list %u for device %02u:%02u failed with error %s!\n",
01154                        file_no,
01155                        RSBAC_MAJOR(kdev),
01156                        RSBAC_MINOR(kdev),
01157                        get_error_name(tmp, tmperr));
01158                 rsbac_kfree(tmp);
01159               }
01160             err = tmperr;
01161           }
01162       }
01163     }
01164 
01165 #if defined(CONFIG_RSBAC_MAC)
01166     {
01167     /* register MAC lists */
01168     for (file_no = 0; file_no < RSBAC_MAC_NR_FD_LISTS; file_no++)
01169       {
01170         /* construct name from base name + number */
01171         sprintf(name, "%s%u", RSBAC_MAC_FD_NAME, file_no);
01172         info_p->version = RSBAC_MAC_FD_ACI_VERSION;
01173         info_p->key = RSBAC_MAC_FD_ACI_KEY;
01174         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01175         info_p->data_size = sizeof(struct rsbac_mac_fd_aci_t);
01176         info_p->max_age = 0;
01177         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01178                                      &(device_p->handles.mac[file_no]),
01179                                      info_p,
01180                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01181                                      rsbac_list_compare_u32,
01182                                      mac_fd_get_conv,
01183                                      &def_mac_fd_aci,
01184                                      name,
01185                                      kdev);
01186         if(tmperr)
01187           {
01188             char * tmp;
01189 
01190             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01191             if(tmp)
01192               {
01193                 rsbac_printk(KERN_WARNING
01194                        "register_fd_lists(): registering MAC list %u for device %02u:%02u failed with error %s!\n",
01195                        file_no,
01196                        RSBAC_MAJOR(kdev),
01197                       RSBAC_MINOR(kdev),
01198                        get_error_name(tmp, tmperr));
01199                 rsbac_kfree(tmp);
01200               }
01201             err = tmperr;
01202           }
01203       }
01204     }
01205 #endif
01206 
01207 #if defined(CONFIG_RSBAC_PM)
01208     {
01209     /* register PM lists */
01210     for (file_no = 0; file_no < RSBAC_PM_NR_FD_LISTS; file_no++)
01211       {
01212         /* construct name from base name + number */
01213         sprintf(name, "%s%u", RSBAC_PM_FD_NAME, file_no);
01214         info_p->version = RSBAC_PM_FD_ACI_VERSION;
01215         info_p->key = RSBAC_PM_FD_ACI_KEY;
01216         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01217         info_p->data_size = sizeof(struct rsbac_pm_fd_aci_t);
01218         info_p->max_age = 0;
01219         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01220                                      &(device_p->handles.pm[file_no]),
01221                                      info_p,
01222                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01223                                      rsbac_list_compare_u32,
01224                                      NULL,
01225                                      &def_pm_fd_aci,
01226                                      name,
01227                                      kdev);
01228         if(tmperr)
01229           {
01230             char * tmp;
01231 
01232             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01233             if(tmp)
01234               {
01235                 rsbac_printk(KERN_WARNING
01236                        "register_fd_lists(): registering PM list %u for device %02u:%02u failed with error %s!\n",
01237                        file_no,
01238                        RSBAC_MAJOR(kdev),
01239                        RSBAC_MINOR(kdev),
01240                        get_error_name(tmp, tmperr));
01241                 rsbac_kfree(tmp);
01242               }
01243             err = tmperr;
01244           }
01245       }
01246     }
01247 #endif
01248 
01249 #if defined(CONFIG_RSBAC_DAZ)
01250     {
01251     struct rsbac_daz_fd_aci_t       def_daz_fd_aci  = DEFAULT_DAZ_FD_ACI;
01252     /* register DAZ lists */
01253     for (file_no = 0; file_no < RSBAC_DAZ_NR_FD_LISTS; file_no++)
01254       {
01255         /* construct name from base name + number */
01256         sprintf(name, "%s%u", RSBAC_DAZ_FD_NAME, file_no);
01257         info_p->version = RSBAC_DAZ_FD_ACI_VERSION;
01258         info_p->key = RSBAC_DAZ_FD_ACI_KEY;
01259         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01260         info_p->data_size = sizeof(struct rsbac_daz_fd_aci_t);
01261         info_p->max_age = 0;
01262         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01263                                      &(device_p->handles.daz[file_no]),
01264                                      info_p,
01265                                      RSBAC_LIST_PERSIST |
01266                                      RSBAC_LIST_DEF_DATA,
01267                                      rsbac_list_compare_u32,
01268                                      NULL,
01269                                      &def_daz_fd_aci,
01270                                      name,
01271                                      kdev);
01272         if(tmperr)
01273           {
01274             char * tmp;
01275 
01276             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01277             if(tmp)
01278               {
01279                 rsbac_printk(KERN_WARNING
01280                        "register_fd_lists(): registering DAZ list %u for device %02u:%02u failed with error %s!\n",
01281                        file_no,
01282                        RSBAC_MAJOR(kdev),
01283                        RSBAC_MINOR(kdev),
01284                        get_error_name(tmp, tmperr));
01285                 rsbac_kfree(tmp);
01286               }
01287             err = tmperr;
01288           }
01289       }
01290     }
01291 #if defined(CONFIG_RSBAC_DAZ_CACHE)
01292     {
01293     rsbac_daz_scanned_t      def_daz_scanned_fd_aci = DEFAULT_DAZ_FD_SCANNED;
01294 
01295     /* register DAZ scanned lists */
01296     for (file_no = 0; file_no < RSBAC_DAZ_SCANNED_NR_FD_LISTS; file_no++)
01297       {
01298         /* construct name from base name + number */
01299         sprintf(name, "%s%u", RSBAC_DAZ_SCANNED_FD_NAME, file_no);
01300         info_p->version = RSBAC_DAZ_SCANNED_FD_ACI_VERSION;
01301         info_p->key = RSBAC_DAZ_FD_ACI_KEY;
01302         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01303         info_p->data_size = sizeof(rsbac_daz_scanned_t);
01304         info_p->max_age = 0;
01305         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01306                                      &(device_p->handles.dazs[file_no]),
01307                                      info_p,
01308                                      #ifdef CONFIG_RSBAC_DAZ_PERSIST
01309                                      RSBAC_LIST_PERSIST |
01310                                      #endif
01311                                      RSBAC_LIST_DEF_DATA,
01312                                      rsbac_list_compare_u32,
01313                                      NULL,
01314                                      &def_daz_scanned_fd_aci,
01315                                      name,
01316                                      kdev);
01317         if(tmperr)
01318           {
01319             char * tmp;
01320 
01321             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01322             if(tmp)
01323               {
01324                 rsbac_printk(KERN_WARNING
01325                        "register_fd_lists(): registering DAZ scanned list %u for device %02u:%02u failed with error %s!\n",
01326                        file_no,
01327                        RSBAC_MAJOR(kdev),
01328                        RSBAC_MINOR(kdev),
01329                        get_error_name(tmp, tmperr));
01330                 rsbac_kfree(tmp);
01331               }
01332             err = tmperr;
01333           }
01334       }
01335     }
01336 #endif
01337 #endif
01338 
01339 #if defined(CONFIG_RSBAC_FF)
01340     {
01341     rsbac_ff_flags_t         def_ff_fd_aci  = RSBAC_FF_DEF;
01342 
01343     /* register FF lists */
01344     for (file_no = 0; file_no < RSBAC_FF_NR_FD_LISTS; file_no++)
01345       {
01346         /* construct name from base name + number */
01347         sprintf(name, "%s%u", RSBAC_FF_FD_NAME, file_no);
01348         info_p->version = RSBAC_FF_FD_ACI_VERSION;
01349         info_p->key = RSBAC_FF_FD_ACI_KEY;
01350         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01351         info_p->data_size = sizeof(rsbac_ff_flags_t);
01352         info_p->max_age = 0;
01353         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01354                                      &(device_p->handles.ff[file_no]),
01355                                      info_p,
01356                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01357                                      rsbac_list_compare_u32,
01358                                      NULL,
01359                                      &def_ff_fd_aci,
01360                                      name,
01361                                      kdev);
01362         if(tmperr)
01363           {
01364             char * tmp;
01365 
01366             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01367             if(tmp)
01368               {
01369                 rsbac_printk(KERN_WARNING
01370                        "register_fd_lists(): registering FF list %u for device %02u:%02u failed with error %s!\n",
01371                        file_no,
01372                        RSBAC_MAJOR(kdev),
01373                        RSBAC_MINOR(kdev),
01374                        get_error_name(tmp, tmperr));
01375                 rsbac_kfree(tmp);
01376               }
01377             err = tmperr;
01378           }
01379       }
01380     }
01381 #endif
01382 
01383 #if defined(CONFIG_RSBAC_RC)
01384     {
01385     /* register RC lists */
01386     for (file_no = 0; file_no < RSBAC_RC_NR_FD_LISTS; file_no++)
01387       {
01388         /* construct name from base name + number */
01389         sprintf(name, "%s%u", RSBAC_RC_FD_NAME, file_no);
01390         info_p->version = RSBAC_RC_FD_ACI_VERSION;
01391         info_p->key = RSBAC_RC_FD_ACI_KEY;
01392         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01393         info_p->data_size = sizeof(struct rsbac_rc_fd_aci_t);
01394         info_p->max_age = 0;
01395         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01396                                      &(device_p->handles.rc[file_no]),
01397                                      info_p,
01398                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01399                                      rsbac_list_compare_u32,
01400                                      NULL,
01401                                      &def_rc_fd_aci,
01402                                      name,
01403                                      kdev);
01404         if(tmperr)
01405           {
01406             char * tmp;
01407 
01408             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01409             if(tmp)
01410               {
01411                 rsbac_printk(KERN_WARNING
01412                        "register_fd_lists(): registering RC list %u for device %02u:%02u failed with error %s!\n",
01413                        file_no,
01414                        RSBAC_MAJOR(kdev),
01415                        RSBAC_MINOR(kdev),
01416                        get_error_name(tmp, tmperr));
01417                 rsbac_kfree(tmp);
01418               }
01419             err = tmperr;
01420           }
01421       }
01422     }
01423 #endif
01424 
01425 #if defined(CONFIG_RSBAC_AUTH)
01426     {
01427     struct rsbac_auth_fd_aci_t      def_auth_fd_aci  = DEFAULT_AUTH_FD_ACI;
01428 
01429     /* register AUTH lists */
01430     for (file_no = 0; file_no < RSBAC_AUTH_NR_FD_LISTS; file_no++)
01431       {
01432         /* construct name from base name + number */
01433         sprintf(name, "%s%u", RSBAC_AUTH_FD_NAME, file_no);
01434         info_p->version = RSBAC_AUTH_FD_ACI_VERSION;
01435         info_p->key = RSBAC_AUTH_FD_ACI_KEY;
01436         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01437         info_p->data_size = sizeof(struct rsbac_auth_fd_aci_t);
01438         info_p->max_age = 0;
01439         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01440                                      &(device_p->handles.auth[file_no]),
01441                                      info_p,
01442                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01443                                      rsbac_list_compare_u32,
01444                                      auth_fd_get_conv,
01445                                      &def_auth_fd_aci,
01446                                      name,
01447                                      kdev);
01448         if(tmperr)
01449           {
01450             char * tmp;
01451 
01452             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01453             if(tmp)
01454               {
01455                 rsbac_printk(KERN_WARNING
01456                        "register_fd_lists(): registering AUTH list %u for device %02u:%02u failed with error %s!\n",
01457                        file_no,
01458                        RSBAC_MAJOR(kdev),
01459                        RSBAC_MINOR(kdev),
01460                        get_error_name(tmp, tmperr));
01461                 rsbac_kfree(tmp);
01462               }
01463             err = tmperr;
01464           }
01465       }
01466     }
01467 #endif
01468 
01469 #if defined(CONFIG_RSBAC_CAP)
01470     {
01471     struct rsbac_cap_fd_aci_t       def_cap_fd_aci  = DEFAULT_CAP_FD_ACI;
01472 
01473     /* register CAP lists */
01474     for (file_no = 0; file_no < RSBAC_CAP_NR_FD_LISTS; file_no++)
01475       {
01476         /* construct name from base name + number */
01477         sprintf(name, "%s%u", RSBAC_CAP_FD_NAME, file_no);
01478         info_p->version = RSBAC_CAP_FD_ACI_VERSION;
01479         info_p->key = RSBAC_CAP_FD_ACI_KEY;
01480         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01481         info_p->data_size = sizeof(struct rsbac_cap_fd_aci_t);
01482         info_p->max_age = 0;
01483         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01484                                      &(device_p->handles.cap[file_no]),
01485                                      info_p,
01486                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01487                                      rsbac_list_compare_u32,
01488                                      NULL,
01489                                      &def_cap_fd_aci,
01490                                      name,
01491                                      kdev);
01492         if(tmperr)
01493           {
01494             char * tmp;
01495 
01496             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01497             if(tmp)
01498               {
01499                 rsbac_printk(KERN_WARNING
01500                        "register_fd_lists(): registering CAP list %u for device %02u:%02u failed with error %s!\n",
01501                        file_no,
01502                        RSBAC_MAJOR(kdev),
01503                        RSBAC_MINOR(kdev),
01504                        get_error_name(tmp, tmperr));
01505                 rsbac_kfree(tmp);
01506               }
01507             err = tmperr;
01508           }
01509       }
01510     }
01511 #endif
01512 
01513 #if defined(CONFIG_RSBAC_PAX)
01514     {
01515     rsbac_pax_flags_t        def_pax_fd_aci;
01516 
01517 #ifdef CONFIG_RSBAC_PAX_DEFAULT
01518     def_pax_fd_aci  = 0;
01519 #ifdef CONFIG_RSBAC_PAX_PAGEEXEC
01520     def_pax_fd_aci |= PF_PAX_PAGEEXEC;
01521 #endif
01522 #ifdef CONFIG_RSBAC_PAX_EMUTRAMP
01523     def_pax_fd_aci |= PF_PAX_EMUTRAMP;
01524 #endif
01525 #ifdef CONFIG_RSBAC_PAX_MPROTECT
01526     def_pax_fd_aci |= PF_PAX_MPROTECT;
01527 #endif
01528 #ifdef CONFIG_RSBAC_PAX_RANDMMAP
01529     def_pax_fd_aci |= PF_PAX_RANDMMAP;
01530 #endif
01531 #ifdef CONFIG_RSBAC_PAX_RANDEXEC
01532     def_pax_fd_aci |= PF_PAX_RANDEXEC;
01533 #endif
01534 #ifdef CONFIG_RSBAC_PAX_SEGMEXEC
01535     def_pax_fd_aci |= PF_PAX_SEGMEXEC;
01536 #endif
01537 
01538 #else
01539     def_pax_fd_aci  = RSBAC_PAX_DEF_FLAGS;
01540 #endif
01541 
01542     info_p->version = RSBAC_PAX_FD_ACI_VERSION;
01543     info_p->key = RSBAC_PAX_FD_ACI_KEY;
01544     info_p->desc_size = sizeof(rsbac_inode_nr_t);
01545     info_p->data_size = sizeof(rsbac_pax_flags_t);
01546     info_p->max_age = 0;
01547     /* register PAX lists */
01548     for (file_no = 0; file_no < RSBAC_PAX_NR_FD_LISTS; file_no++)
01549       {
01550         /* construct name from base name + number */
01551         sprintf(name, "%s%u", RSBAC_PAX_FD_NAME, file_no);
01552         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01553                                      &(device_p->handles.pax[file_no]),
01554                                      info_p,
01555                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01556                                      rsbac_list_compare_u32,
01557                                      NULL,
01558                                      &def_pax_fd_aci,
01559                                      name,
01560                                      kdev);
01561         if(tmperr)
01562           {
01563             char * tmp;
01564 
01565             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01566             if(tmp)
01567               {
01568                 rsbac_printk(KERN_WARNING
01569                        "register_fd_lists(): registering PAX list %u for device %02u:%02u failed with error %s!\n",
01570                        file_no,
01571                        RSBAC_MAJOR(kdev),
01572                        RSBAC_MINOR(kdev),
01573                        get_error_name(tmp, tmperr));
01574                 rsbac_kfree(tmp);
01575               }
01576             err = tmperr;
01577           }
01578       }
01579     }
01580 #endif
01581 
01582 #if defined(CONFIG_RSBAC_RES)
01583     {
01584     /* register RES lists */
01585     for (file_no = 0; file_no < RSBAC_RES_NR_FD_LISTS; file_no++)
01586       {
01587         /* construct name from base name + number */
01588         sprintf(name, "%s%u", RSBAC_RES_FD_NAME, file_no);
01589         info_p->version = RSBAC_RES_FD_ACI_VERSION;
01590         info_p->key = RSBAC_RES_FD_ACI_KEY;
01591         info_p->desc_size = sizeof(rsbac_inode_nr_t);
01592         info_p->data_size = sizeof(struct rsbac_res_fd_aci_t);
01593         info_p->max_age = 0;
01594         tmperr = rsbac_list_register(RSBAC_LIST_VERSION,
01595                                      &(device_p->handles.res[file_no]),
01596                                      info_p,
01597                                      RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
01598                                      rsbac_list_compare_u32,
01599                                      NULL,
01600                                      &def_res_fd_aci,
01601                                      name,
01602                                      kdev);
01603         if(tmperr)
01604           {
01605             char * tmp;
01606 
01607             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
01608             if(tmp)
01609               {
01610                 rsbac_printk(KERN_WARNING
01611                        "register_fd_lists(): registering RES list %u for device %02u:%02u failed with error %s!\n",
01612                        file_no,
01613                        RSBAC_MAJOR(kdev),
01614                        RSBAC_MINOR(kdev),
01615                        get_error_name(tmp, tmperr));
01616                 rsbac_kfree(tmp);
01617               }
01618             err = tmperr;
01619           }
01620       }
01621     }
01622 #endif
01623 
01624     return err;
01625   }

static int __init register_ipc_lists void   )  [static]
 

Definition at line 5656 of file aci_data_structures.c.

References ipc_compare(), ipc_handles, NULL, registration_error(), RSBAC_JAIL_ACI_IPC_NAME, RSBAC_JAIL_DEF_ID, RSBAC_LIST_DEF_DATA, rsbac_list_register(), RSBAC_LIST_VERSION, RSBAC_MAC_ACI_IPC_NAME, RSBAC_PM_ACI_IPC_NAME, rsbac_printk(), RSBAC_RC_ACI_IPC_NAME, and RSBAC_RC_GENERAL_TYPE.

Referenced by rsbac_do_init().

05658   {
05659     int err = 0;
05660     struct rsbac_list_info_t * list_info_p;
05661 
05662     list_info_p = kmalloc(sizeof(*list_info_p), GFP_KERNEL);
05663     if(!list_info_p)
05664       {
05665         return -ENOMEM;
05666       }
05667 
05668 #ifdef CONFIG_RSBAC_DEBUG
05669     if (rsbac_debug_ds)
05670       {
05671         rsbac_printk(KERN_DEBUG "rsbac_do_init(): registering IPC lists\n");
05672       }
05673 #endif
05674 #if defined(CONFIG_RSBAC_MAC)
05675     {
05676       struct rsbac_mac_ipc_aci_t def_aci = DEFAULT_MAC_IPC_ACI;
05677 
05678       list_info_p->version = RSBAC_MAC_IPC_ACI_VERSION;
05679       list_info_p->key = RSBAC_MAC_IPC_ACI_KEY;
05680       list_info_p->desc_size = sizeof(struct rsbac_ipc_t);
05681       list_info_p->data_size = sizeof(struct rsbac_mac_ipc_aci_t);
05682       list_info_p->max_age = 0;
05683       err = rsbac_list_register(RSBAC_LIST_VERSION,
05684                                 &ipc_handles.mac,
05685                                 list_info_p,
05686                                 RSBAC_LIST_DEF_DATA,
05687                                 ipc_compare,
05688                                 NULL,
05689                                 &def_aci,
05690                                 RSBAC_MAC_ACI_IPC_NAME,
05691                                 RSBAC_AUTO_DEV);
05692       if(err)
05693         {
05694           registration_error(err, "IPC MAC");
05695         }
05696     }
05697 #endif
05698 #if defined(CONFIG_RSBAC_PM)
05699     {
05700       struct rsbac_pm_ipc_aci_t def_aci = DEFAULT_PM_IPC_ACI;
05701 
05702       list_info_p->version = RSBAC_PM_IPC_ACI_VERSION;
05703       list_info_p->key = RSBAC_PM_IPC_ACI_KEY;
05704       list_info_p->desc_size = sizeof(struct rsbac_ipc_t);
05705       list_info_p->data_size = sizeof(struct rsbac_pm_ipc_aci_t);
05706       list_info_p->max_age = 0;
05707       err = rsbac_list_register(RSBAC_LIST_VERSION,
05708                                 &ipc_handles.pm,
05709                                 list_info_p,
05710                                 RSBAC_LIST_DEF_DATA,
05711                                 ipc_compare,
05712                                 NULL,
05713                                 &def_aci,
05714                                 RSBAC_PM_ACI_IPC_NAME,
05715                                 RSBAC_AUTO_DEV);
05716       if(err)
05717         {
05718           registration_error(err, "IPC PM");
05719         }
05720     }
05721 #endif
05722 #if defined(CONFIG_RSBAC_RC)
05723     {
05724       rsbac_rc_type_id_t def_aci = RSBAC_RC_GENERAL_TYPE;
05725 
05726       list_info_p->version = RSBAC_RC_IPC_ACI_VERSION;
05727       list_info_p->key = RSBAC_RC_IPC_ACI_KEY;
05728       list_info_p->desc_size = sizeof(struct rsbac_ipc_t);
05729       list_info_p->data_size = sizeof(rsbac_rc_type_id_t);
05730       list_info_p->max_age = 0;
05731       err = rsbac_list_register(RSBAC_LIST_VERSION,
05732                                 &ipc_handles.rc,
05733                                 list_info_p,
05734                                 RSBAC_LIST_DEF_DATA,
05735                                 ipc_compare,
05736                                 NULL,
05737                                 &def_aci,
05738                                 RSBAC_RC_ACI_IPC_NAME,
05739                                 RSBAC_AUTO_DEV);
05740       if(err)
05741         {
05742           registration_error(err, "IPC RC");
05743         }
05744     }
05745 #endif
05746 #if defined(CONFIG_RSBAC_JAIL)
05747     {
05748       rsbac_jail_id_t def_aci = RSBAC_JAIL_DEF_ID;
05749 
05750       list_info_p->version = RSBAC_JAIL_IPC_ACI_VERSION;
05751       list_info_p->key = RSBAC_JAIL_IPC_ACI_KEY;
05752       list_info_p->desc_size = sizeof(struct rsbac_ipc_t);
05753       list_info_p->data_size = sizeof(rsbac_jail_id_t);
05754       list_info_p->max_age = 0;
05755       err = rsbac_list_register(RSBAC_LIST_VERSION,
05756                                 &ipc_handles.jail,
05757                                 list_info_p,
05758                                 RSBAC_LIST_DEF_DATA,
05759                                 ipc_compare,
05760                                 NULL,
05761                                 &def_aci,
05762                                 RSBAC_JAIL_ACI_IPC_NAME,
05763                                 RSBAC_AUTO_DEV);
05764       if(err)
05765         {
05766           registration_error(err, "IPC JAIL");
05767         }
05768     }
05769 #endif
05770 
05771     return err;
05772   }

static int __init register_process_lists void   )  [static]
 

Definition at line 6320 of file aci_data_structures.c.

References DEFAULT_GEN_P_ACI, NULL, PH_from_other_users, process_handles, registration_error(), RSBAC_AUTH_ACI_PROCESS_NAME, RSBAC_CAP_ACI_PROCESS_NAME, RSBAC_DAZ_ACI_PROCESS_NAME, RSBAC_GEN_ACI_PROCESS_NAME, RSBAC_GEN_PROCESS_ACI_KEY, RSBAC_GEN_PROCESS_ACI_VERSION, RSBAC_JAIL_ACI_PROCESS_NAME, rsbac_list_compare_u32(), RSBAC_LIST_DEF_DATA, rsbac_list_register(), RSBAC_LIST_VERSION, RSBAC_MAC_ACI_PROCESS_NAME, RSBAC_MAXNAMELEN, RSBAC_PM_ACI_PROCESS_NAME, rsbac_printk(), and RSBAC_RC_ACI_PROCESS_NAME.

Referenced by rsbac_do_init().

06322   {
06323     int err = 0;
06324     struct rsbac_list_info_t * list_info_p;
06325 
06326     list_info_p = kmalloc(sizeof(*list_info_p), GFP_KERNEL);
06327     if(!list_info_p)
06328       {
06329         return -ENOMEM;
06330       }
06331 
06332 #ifdef CONFIG_RSBAC_DEBUG
06333     if (rsbac_debug_ds)
06334       {
06335         rsbac_printk(KERN_DEBUG "rsbac_do_init(): registering PROCESS lists\n");
06336       }
06337 #endif
06338     {
06339       struct rsbac_gen_process_aci_t def_aci = DEFAULT_GEN_P_ACI;
06340       char name[RSBAC_MAXNAMELEN];
06341       int i;
06342 
06343       list_info_p->version = RSBAC_GEN_PROCESS_ACI_VERSION;
06344       list_info_p->key = RSBAC_GEN_PROCESS_ACI_KEY;
06345       list_info_p->desc_size = sizeof(rsbac_pid_t);
06346       list_info_p->data_size = sizeof(struct rsbac_gen_process_aci_t);
06347       list_info_p->max_age = 0;
06348       for(i=0; i<CONFIG_RSBAC_GEN_NR_P_LISTS; i++)
06349         {
06350           sprintf(name, "%s%u", RSBAC_GEN_ACI_PROCESS_NAME, i);
06351           err = rsbac_list_register(RSBAC_LIST_VERSION,
06352                                     &process_handles.gen[i],
06353                                     list_info_p,
06354                                     RSBAC_LIST_DEF_DATA,
06355                                     rsbac_list_compare_u32,
06356                                     NULL,
06357                                     &def_aci,
06358                                     name,
06359                                     RSBAC_AUTO_DEV);
06360           if(err)
06361             {
06362               registration_error(err, "PROCESS GEN");
06363             }
06364         }
06365     }
06366 #if defined(CONFIG_RSBAC_MAC)
06367     {
06368       struct rsbac_mac_process_aci_t def_aci = DEFAULT_MAC_P_ACI;
06369       char name[RSBAC_MAXNAMELEN];
06370       int i;
06371 
06372       list_info_p->version = RSBAC_MAC_PROCESS_ACI_VERSION;
06373       list_info_p->key = RSBAC_MAC_PROCESS_ACI_KEY;
06374       list_info_p->desc_size = sizeof(rsbac_pid_t);
06375       list_info_p->data_size = sizeof(struct rsbac_mac_process_aci_t);
06376       list_info_p->max_age = 0;
06377       for(i=0; i<CONFIG_RSBAC_MAC_NR_P_LISTS; i++)
06378         {
06379           sprintf(name, "%s%u", RSBAC_MAC_ACI_PROCESS_NAME, i);
06380 
06381           err = rsbac_list_register(RSBAC_LIST_VERSION,
06382                                     &process_handles.mac[i],
06383                                     list_info_p,
06384                                     RSBAC_LIST_DEF_DATA,
06385                                     rsbac_list_compare_u32,
06386                                     NULL,
06387                                     &def_aci,
06388                                     name,
06389                                     RSBAC_AUTO_DEV);
06390           if(err)
06391             {
06392               registration_error(err, "PROCESS MAC");
06393             }
06394         }
06395     }
06396 #endif
06397 #if defined(CONFIG_RSBAC_PM)
06398     {
06399       struct rsbac_pm_process_aci_t def_aci = DEFAULT_PM_P_ACI;
06400 
06401       list_info_p->version = RSBAC_PM_PROCESS_ACI_VERSION;
06402       list_info_p->key = RSBAC_PM_PROCESS_ACI_KEY;
06403       list_info_p->desc_size = sizeof(rsbac_pid_t);
06404       list_info_p->data_size = sizeof(struct rsbac_pm_process_aci_t);
06405       list_info_p->max_age = 0;
06406       err = rsbac_list_register(RSBAC_LIST_VERSION,
06407                                 &process_handles.pm,
06408                                 list_info_p,
06409                                 RSBAC_LIST_DEF_DATA,
06410                                 rsbac_list_compare_u32,
06411                                 NULL,
06412                                 &def_aci,
06413                                 RSBAC_PM_ACI_PROCESS_NAME,
06414                                 RSBAC_AUTO_DEV);
06415       if(err)
06416         {
06417           registration_error(err, "PROCESS PM");
06418         }
06419     }
06420 #endif
06421 #if defined(CONFIG_RSBAC_DAZ)
06422     {
06423       struct rsbac_daz_process_aci_t def_aci = DEFAULT_DAZ_P_ACI;
06424 
06425       list_info_p->version = RSBAC_DAZ_PROCESS_ACI_VERSION;
06426       list_info_p->key = RSBAC_DAZ_PROCESS_ACI_KEY;
06427       list_info_p->desc_size = sizeof(rsbac_pid_t);
06428       list_info_p->data_size = sizeof(struct rsbac_daz_process_aci_t);
06429       list_info_p->max_age = 0;
06430       err = rsbac_list_register(RSBAC_LIST_VERSION,
06431                                 &process_handles.daz,
06432                                 list_info_p,
06433                                 RSBAC_LIST_DEF_DATA,
06434                                 rsbac_list_compare_u32,
06435                                 NULL,
06436                                 &def_aci,
06437                                 RSBAC_DAZ_ACI_PROCESS_NAME,
06438                                 RSBAC_AUTO_DEV);
06439       if(err)
06440         {
06441           registration_error(err, "PROCESS DAZ");
06442         }
06443     }
06444 #endif
06445 #if defined(CONFIG_RSBAC_RC)
06446     {
06447       struct rsbac_rc_process_aci_t def_aci = DEFAULT_RC_P_ACI;
06448       char name[RSBAC_MAXNAMELEN];
06449       int i;
06450 
06451       list_info_p->version = RSBAC_RC_PROCESS_ACI_VERSION;
06452       list_info_p->key = RSBAC_RC_PROCESS_ACI_KEY;
06453       list_info_p->desc_size = sizeof(rsbac_pid_t);
06454       list_info_p->data_size = sizeof(struct rsbac_rc_process_aci_t);
06455       list_info_p->max_age = 0;
06456       for(i=0; i<CONFIG_RSBAC_RC_NR_P_LISTS; i++)
06457         {
06458           sprintf(name, "%s%u", RSBAC_RC_ACI_PROCESS_NAME, i);
06459           err = rsbac_list_register(RSBAC_LIST_VERSION,
06460                                     &process_handles.rc[i],
06461                                     list_info_p,
06462                                     RSBAC_LIST_DEF_DATA,
06463                                     rsbac_list_compare_u32,
06464                                     NULL,
06465                                     &def_aci,
06466                                     name,
06467                                     RSBAC_AUTO_DEV);
06468           if(err)
06469             {
06470               registration_error(err, "PROCESS RC");
06471             }
06472         }
06473     }
06474 #endif
06475 #if defined(CONFIG_RSBAC_AUTH)
06476     {
06477       struct rsbac_auth_process_aci_t def_aci = DEFAULT_AUTH_P_ACI;
06478 
06479       list_info_p->version = RSBAC_AUTH_PROCESS_ACI_VERSION;
06480       list_info_p->key = RSBAC_AUTH_PROCESS_ACI_KEY;
06481       list_info_p->desc_size = sizeof(rsbac_pid_t);
06482       list_info_p->data_size = sizeof(struct rsbac_auth_process_aci_t);
06483       list_info_p->max_age = 0;
06484       err = rsbac_list_register(RSBAC_LIST_VERSION,
06485                                 &process_handles.auth,
06486                                 list_info_p,
06487                                 RSBAC_LIST_DEF_DATA,
06488                                 rsbac_list_compare_u32,
06489                                 NULL,
06490                                 &def_aci,
06491                                 RSBAC_AUTH_ACI_PROCESS_NAME,
06492                                 RSBAC_AUTO_DEV);
06493       if(err)
06494         {
06495           registration_error(err, "PROCESS AUTH");
06496         }
06497     }
06498 #endif
06499 #if defined(CONFIG_RSBAC_CAP)
06500     {
06501       struct rsbac_cap_process_aci_t def_aci = DEFAULT_CAP_P_ACI;
06502 
06503       #if defined(CONFIG_RSBAC_CAP_PROC_HIDE)
06504       if(rsbac_cap_process_hiding)
06505         def_aci.cap_process_hiding = PH_from_other_users;
06506       #endif
06507       list_info_p->version = RSBAC_CAP_PROCESS_ACI_VERSION;
06508       list_info_p->key = RSBAC_CAP_PROCESS_ACI_KEY;
06509       list_info_p->desc_size = sizeof(rsbac_pid_t);
06510       list_info_p->data_size = sizeof(struct rsbac_cap_process_aci_t);
06511       list_info_p->max_age = 0;
06512       err = rsbac_list_register(RSBAC_LIST_VERSION,
06513                                 &process_handles.cap,
06514                                 list_info_p,
06515                                 RSBAC_LIST_DEF_DATA,
06516                                 rsbac_list_compare_u32,
06517                                 NULL,
06518                                 &def_aci,
06519                                 RSBAC_CAP_ACI_PROCESS_NAME,
06520                                 RSBAC_AUTO_DEV);
06521       if(err)
06522         {
06523           registration_error(err, "PROCESS CAP");
06524         }
06525     }
06526 #endif
06527 #if defined(CONFIG_RSBAC_JAIL)
06528     {
06529       struct rsbac_jail_process_aci_t def_aci = DEFAULT_JAIL_P_ACI;
06530       char name[RSBAC_MAXNAMELEN];
06531       int i;
06532 
06533       list_info_p->version = RSBAC_JAIL_PROCESS_ACI_VERSION;
06534       list_info_p->key = RSBAC_JAIL_PROCESS_ACI_KEY;
06535       list_info_p->desc_size = sizeof(rsbac_pid_t);
06536       list_info_p->data_size = sizeof(struct rsbac_jail_process_aci_t);
06537       list_info_p->max_age = 0;
06538       for(i=0; i<CONFIG_RSBAC_JAIL_NR_P_LISTS; i++)
06539         {
06540           sprintf(name, "%s%u", RSBAC_JAIL_ACI_PROCESS_NAME, i);
06541           err = rsbac_list_register(RSBAC_LIST_VERSION,
06542                                     &process_handles.jail[i],
06543                                     list_info_p,
06544                                     RSBAC_LIST_DEF_DATA,
06545                                     rsbac_list_compare_u32,
06546                                     NULL,
06547                                     &def_aci,
06548                                     name,
06549                                     RSBAC_AUTO_DEV);
06550           if(err)
06551             {
06552               registration_error(err, "PROCESS JAIL");
06553             }
06554         }
06555     }
06556 #endif
06557 
06558     return err;
06559   }

static int __init register_user_lists void   )  [static]
 

Definition at line 5777 of file aci_data_structures.c.

References DEFAULT_GEN_U_ACI, NULL, registration_error(), RSBAC_AUDITOR_UID, RSBAC_AUTH_ACI_USER_NAME, RSBAC_CAP_ACI_USER_NAME, RSBAC_DATAPROT_UID, RSBAC_DAZ_ACI_USER_NAME, RSBAC_FF_ACI_USER_NAME, RSBAC_GEN_ACI_USER_NAME, RSBAC_GEN_USER_ACI_KEY, RSBAC_GEN_USER_ACI_VERSION, RSBAC_JAIL_ACI_USER_NAME, rsbac_list_add(), RSBAC_LIST_BACKUP, rsbac_list_compare_u32(), rsbac_list_count(), RSBAC_LIST_DEF_DATA, RSBAC_LIST_PERSIST, rsbac_list_register(), RSBAC_LIST_VERSION, RSBAC_MAC_ACI_USER_NAME, rsbac_no_defaults, RSBAC_PAX_ACI_USER_NAME, RSBAC_PM_ACI_USER_NAME, rsbac_printk(), RSBAC_RC_ACI_USER_NAME, RSBAC_RES_ACI_USER_NAME, RSBAC_SECOFF_UID, RSBAC_SYSADM_UID, RSBAC_TPMAN_UID, SR_administrator, SR_auditor, SR_security_officer, SR_user, and user_handles.

Referenced by rsbac_do_init().

05779   {
05780     int err = 0;
05781     struct rsbac_list_info_t * list_info_p;
05782 
05783     list_info_p = kmalloc(sizeof(*list_info_p), GFP_KERNEL);
05784     if(!list_info_p)
05785       {
05786         return -ENOMEM;
05787       }
05788 
05789 #ifdef CONFIG_RSBAC_DEBUG
05790     if (rsbac_debug_ds)
05791       {
05792         rsbac_printk(KERN_DEBUG "rsbac_do_init(): registering USER lists\n");
05793       }
05794 #endif
05795 
05796     {
05797       struct rsbac_gen_user_aci_t def_aci = DEFAULT_GEN_U_ACI;
05798 
05799       list_info_p->version = RSBAC_GEN_USER_ACI_VERSION;
05800       list_info_p->key = RSBAC_GEN_USER_ACI_KEY;
05801       list_info_p->desc_size = sizeof(rsbac_uid_t);
05802       list_info_p->data_size = sizeof(struct rsbac_gen_user_aci_t);
05803       list_info_p->max_age = 0;
05804       err = rsbac_list_register(RSBAC_LIST_VERSION,
05805                                 &user_handles.gen,
05806                                 list_info_p,
05807                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05808                                 RSBAC_LIST_BACKUP |
05809                                 #endif
05810                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05811                                 rsbac_list_compare_u32,
05812                                 NULL,
05813                                 &def_aci,
05814                                 RSBAC_GEN_ACI_USER_NAME,
05815                                 RSBAC_AUTO_DEV);
05816       if(err)
05817         {
05818           registration_error(err, "USER General");
05819         }
05820     }
05821 #if defined(CONFIG_RSBAC_MAC)
05822     {
05823       struct rsbac_mac_user_aci_t def_aci = DEFAULT_MAC_U_ACI;
05824 
05825       list_info_p->version = RSBAC_MAC_USER_ACI_VERSION;
05826       list_info_p->key = RSBAC_MAC_USER_ACI_KEY;
05827       list_info_p->desc_size = sizeof(rsbac_uid_t);
05828       list_info_p->data_size = sizeof(struct rsbac_mac_user_aci_t);
05829       list_info_p->max_age = 0;
05830       err = rsbac_list_register(RSBAC_LIST_VERSION,
05831                                 &user_handles.mac,
05832                                 list_info_p,
05833                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05834                                 RSBAC_LIST_BACKUP |
05835                                 #endif
05836                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05837                                 rsbac_list_compare_u32,
05838                                 mac_user_get_conv,
05839                                 &def_aci,
05840                                 RSBAC_MAC_ACI_USER_NAME,
05841                                 RSBAC_AUTO_DEV);
05842       if(err)
05843         {
05844           registration_error(err, "USER MAC");
05845         }
05846       else
05847       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.mac))
05848         {
05849           struct rsbac_mac_user_aci_t sysadm_aci = DEFAULT_MAC_U_SYSADM_ACI;
05850           struct rsbac_mac_user_aci_t secoff_aci = DEFAULT_MAC_U_SECOFF_ACI;
05851           struct rsbac_mac_user_aci_t auditor_aci = DEFAULT_MAC_U_AUDITOR_ACI;
05852           rsbac_uid_t                 user;
05853 
05854           rsbac_printk(KERN_WARNING
05855                  "rsbac_do_init(): USER MAC ACI could not be read - generating standard entries!\n");
05856           user = RSBAC_SYSADM_UID;
05857           if(rsbac_list_add(user_handles.mac, &user, &sysadm_aci))
05858             rsbac_printk(KERN_WARNING
05859                    "rsbac_do_init(): SYSADM USER MAC entry could not be added!\n");
05860           user = RSBAC_SECOFF_UID;
05861           if(rsbac_list_add(user_handles.mac, &user, &secoff_aci))
05862             rsbac_printk(KERN_WARNING
05863                    "rsbac_do_init(): SECOFF USER MAC entry could not be added!\n");
05864           user = RSBAC_AUDITOR_UID;
05865           if(rsbac_list_add(user_handles.mac, &user, &auditor_aci))
05866             rsbac_printk(KERN_WARNING
05867                    "rsbac_do_init(): AUDITOR USER MAC entry could not be added!\n");
05868         }
05869     }
05870 #endif
05871 #if defined(CONFIG_RSBAC_PM)
05872     {
05873       struct rsbac_pm_user_aci_t def_aci = DEFAULT_PM_U_ACI;
05874 
05875       list_info_p->version = RSBAC_PM_USER_ACI_VERSION;
05876       list_info_p->key = RSBAC_PM_USER_ACI_KEY;
05877       list_info_p->desc_size = sizeof(rsbac_uid_t);
05878       list_info_p->data_size = sizeof(struct rsbac_pm_user_aci_t);
05879       list_info_p->max_age = 0;
05880       err = rsbac_list_register(RSBAC_LIST_VERSION,
05881                                 &user_handles.pm,
05882                                 list_info_p,
05883                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05884                                 RSBAC_LIST_BACKUP |
05885                                 #endif
05886                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05887                                 rsbac_list_compare_u32,
05888                                 NULL,
05889                                 &def_aci,
05890                                 RSBAC_PM_ACI_USER_NAME,
05891                                 RSBAC_AUTO_DEV);
05892       if(err)
05893         {
05894           registration_error(err, "USER PM");
05895         }
05896       else
05897       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.pm))
05898         {
05899           struct rsbac_pm_user_aci_t sysadm_aci   = DEFAULT_PM_U_SYSADM_ACI;
05900           struct rsbac_pm_user_aci_t secoff_aci   = DEFAULT_PM_U_SECOFF_ACI;
05901           struct rsbac_pm_user_aci_t dataprot_aci = DEFAULT_PM_U_DATAPROT_ACI;
05902           struct rsbac_pm_user_aci_t tpman_aci    = DEFAULT_PM_U_TPMAN_ACI;
05903           rsbac_uid_t                user;
05904 
05905           rsbac_printk(KERN_WARNING
05906                  "rsbac_do_init(): USER PM ACI could not be read - generating standard entries!\n");
05907           user = RSBAC_SYSADM_UID;
05908           if(rsbac_list_add(user_handles.pm, &user, &sysadm_aci))
05909             rsbac_printk(KERN_WARNING
05910                    "rsbac_do_init(): SYSADM USER PM entry could not be added!\n");
05911           user = RSBAC_SECOFF_UID;
05912           if(rsbac_list_add(user_handles.pm, &user, &secoff_aci))
05913             rsbac_printk(KERN_WARNING
05914                    "rsbac_do_init(): SECOFF USER PM entry could not be added!\n");
05915           user = RSBAC_DATAPROT_UID;
05916           if(rsbac_list_add(user_handles.pm, &user, &dataprot_aci))
05917             rsbac_printk(KERN_WARNING
05918                    "rsbac_do_init(): DATAPROT USER PM entry could not be added!\n");
05919           user = RSBAC_TPMAN_UID;
05920           if(rsbac_list_add(user_handles.pm, &user, &tpman_aci))
05921             rsbac_printk(KERN_WARNING
05922                    "rsbac_do_init(): TPMAN USER PM entry could not be added!\n");
05923          }
05924     }
05925 #endif
05926 #if defined(CONFIG_RSBAC_DAZ)
05927     {
05928       rsbac_system_role_int_t def_aci = SR_user;
05929 
05930       list_info_p->version = RSBAC_DAZ_USER_ACI_VERSION;
05931       list_info_p->key = RSBAC_DAZ_USER_ACI_KEY;
05932       list_info_p->desc_size = sizeof(rsbac_uid_t);
05933       list_info_p->data_size = sizeof(rsbac_system_role_int_t);
05934       list_info_p->max_age = 0;
05935       err = rsbac_list_register(RSBAC_LIST_VERSION,
05936                                 &user_handles.daz,
05937                                 list_info_p,
05938                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05939                                 RSBAC_LIST_BACKUP |
05940                                 #endif
05941                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05942                                 rsbac_list_compare_u32,
05943                                 NULL,
05944                                 &def_aci,
05945                                 RSBAC_DAZ_ACI_USER_NAME,
05946                                 RSBAC_AUTO_DEV);
05947       if(err)
05948         {
05949           registration_error(err, "USER DAZ");
05950         }
05951       else
05952       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.daz))
05953         {
05954           rsbac_uid_t                 user;
05955           rsbac_system_role_int_t     role;
05956 
05957           rsbac_printk(KERN_WARNING
05958                  "rsbac_do_init(): USER DAZ ACI could not be read - generating standard entries!\n");
05959           user = RSBAC_SYSADM_UID;
05960           role = SR_administrator;
05961           if(rsbac_list_add(user_handles.daz, &user, &role))
05962             rsbac_printk(KERN_WARNING
05963                    "rsbac_do_init(): SYSADM USER DAZ entry could not be added!\n");
05964           user = RSBAC_SECOFF_UID;
05965           role = SR_security_officer;
05966           if(rsbac_list_add(user_handles.daz, &user, &role))
05967             rsbac_printk(KERN_WARNING
05968                    "rsbac_do_init(): SECOFF USER DAZ entry could not be added!\n");
05969         }
05970     }
05971 #endif
05972 #if defined(CONFIG_RSBAC_FF)
05973     {
05974       rsbac_system_role_int_t def_aci = SR_user;
05975 
05976       list_info_p->version = RSBAC_FF_USER_ACI_VERSION;
05977       list_info_p->key = RSBAC_FF_USER_ACI_KEY;
05978       list_info_p->desc_size = sizeof(rsbac_uid_t);
05979       list_info_p->data_size = sizeof(rsbac_system_role_int_t);
05980       list_info_p->max_age = 0;
05981       err = rsbac_list_register(RSBAC_LIST_VERSION,
05982                                 &user_handles.ff,
05983                                 list_info_p,
05984                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
05985                                 RSBAC_LIST_BACKUP |
05986                                 #endif
05987                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
05988                                 rsbac_list_compare_u32,
05989                                 NULL,
05990                                 &def_aci,
05991                                 RSBAC_FF_ACI_USER_NAME,
05992                                 RSBAC_AUTO_DEV);
05993       if(err)
05994         {
05995           registration_error(err, "USER FF");
05996         }
05997       else
05998       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.ff))
05999         {
06000           rsbac_uid_t                 user;
06001           rsbac_system_role_int_t     role;
06002 
06003           rsbac_printk(KERN_WARNING
06004                  "rsbac_do_init(): USER FF ACI could not be read - generating standard entries!\n");
06005           user = RSBAC_SYSADM_UID;
06006           role = SR_administrator;
06007           if(rsbac_list_add(user_handles.ff, &user, &role))
06008             rsbac_printk(KERN_WARNING
06009                    "rsbac_do_init(): SYSADM USER FF entry could not be added!\n");
06010           user = RSBAC_SECOFF_UID;
06011           role = SR_security_officer;
06012           if(rsbac_list_add(user_handles.ff, &user, &role))
06013             rsbac_printk(KERN_WARNING
06014                    "rsbac_do_init(): SECOFF USER FF entry could not be added!\n");
06015           user = RSBAC_AUDITOR_UID;
06016           role = SR_auditor;
06017           if(rsbac_list_add(user_handles.ff, &user, &role))
06018             rsbac_printk(KERN_WARNING
06019                    "rsbac_do_init(): AUDITOR USER FF entry could not be added!\n");
06020         }
06021     }
06022 #endif
06023 #if defined(CONFIG_RSBAC_RC)
06024     {
06025       struct rsbac_rc_user_aci_t def_aci = DEFAULT_RC_U_ACI;
06026 
06027       list_info_p->version = RSBAC_RC_USER_ACI_VERSION;
06028       list_info_p->key = RSBAC_RC_USER_ACI_KEY;
06029       list_info_p->desc_size = sizeof(rsbac_uid_t);
06030       list_info_p->data_size = sizeof(struct rsbac_rc_user_aci_t);
06031       list_info_p->max_age = 0;
06032       err = rsbac_list_register(RSBAC_LIST_VERSION,
06033                                 &user_handles.rc,
06034                                 list_info_p,
06035                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
06036                                 RSBAC_LIST_BACKUP |
06037                                 #endif
06038                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
06039                                 rsbac_list_compare_u32,
06040                                 rc_user_get_conv,
06041                                 &def_aci,
06042                                 RSBAC_RC_ACI_USER_NAME,
06043                                 RSBAC_AUTO_DEV);
06044       if(err)
06045         {
06046           registration_error(err, "USER RC");
06047         }
06048       else
06049       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.rc))
06050         {
06051           rsbac_uid_t                 user;
06052           struct rsbac_rc_user_aci_t  sysadm_aci = DEFAULT_RC_U_SYSADM_ACI;
06053           struct rsbac_rc_user_aci_t  secoff_aci = DEFAULT_RC_U_SECOFF_ACI;
06054           struct rsbac_rc_user_aci_t  auditor_aci = DEFAULT_RC_U_AUDITOR_ACI;
06055 
06056           rsbac_printk(KERN_WARNING
06057                  "rsbac_do_init(): USER RC ACI could not be read - generating standard entries!\n");
06058           user = RSBAC_SYSADM_UID;
06059           if(rsbac_list_add(user_handles.rc, &user, &sysadm_aci))
06060             rsbac_printk(KERN_WARNING
06061                    "rsbac_do_init(): SYSADM USER RC entry could not be added!\n");
06062           user = RSBAC_SECOFF_UID;
06063           if(rsbac_list_add(user_handles.rc, &user, &secoff_aci))
06064             rsbac_printk(KERN_WARNING
06065                    "rsbac_do_init(): SECOFF USER RC entry could not be added!\n");
06066           user = RSBAC_AUDITOR_UID;
06067           if(rsbac_list_add(user_handles.rc, &user, &auditor_aci))
06068             rsbac_printk(KERN_WARNING
06069                    "rsbac_do_init(): AUDITOR USER RC entry could not be added!\n");
06070         }
06071     }
06072 #endif
06073 #if defined(CONFIG_RSBAC_AUTH)
06074     {
06075       rsbac_system_role_int_t def_aci = SR_user;
06076 
06077       list_info_p->version = RSBAC_AUTH_USER_ACI_VERSION;
06078       list_info_p->key = RSBAC_AUTH_USER_ACI_KEY;
06079       list_info_p->desc_size = sizeof(rsbac_uid_t);
06080       list_info_p->data_size = sizeof(rsbac_system_role_int_t);
06081       list_info_p->max_age = 0;
06082       err = rsbac_list_register(RSBAC_LIST_VERSION,
06083                                 &user_handles.auth,
06084                                 list_info_p,
06085                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
06086                                 RSBAC_LIST_BACKUP |
06087                                 #endif
06088                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
06089                                 rsbac_list_compare_u32,
06090                                 NULL,
06091                                 &def_aci,
06092                                 RSBAC_AUTH_ACI_USER_NAME,
06093                                 RSBAC_AUTO_DEV);
06094       if(err)
06095         {
06096           registration_error(err, "USER AUTH");
06097         }
06098       else
06099       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.auth))
06100         {
06101           rsbac_uid_t                 user;
06102           rsbac_system_role_int_t     role;
06103 
06104           rsbac_printk(KERN_WARNING
06105                  "rsbac_do_init(): USER AUTH ACI could not be read - generating standard entries!\n");
06106           user = RSBAC_SYSADM_UID;
06107           role = SR_administrator;
06108           if(rsbac_list_add(user_handles.auth, &user, &role))
06109             rsbac_printk(KERN_WARNING
06110                    "rsbac_do_init(): SYSADM USER AUTH entry could not be added!\n");
06111           user = RSBAC_SECOFF_UID;
06112           role = SR_security_officer;
06113           if(rsbac_list_add(user_handles.auth, &user, &role))
06114             rsbac_printk(KERN_WARNING
06115                    "rsbac_do_init(): SECOFF USER AUTH entry could not be added!\n");
06116           user = RSBAC_AUDITOR_UID;
06117           role = SR_auditor;
06118           if(rsbac_list_add(user_handles.auth, &user, &role))
06119             rsbac_printk(KERN_WARNING
06120                    "rsbac_do_init(): AUDITOR USER AUTH entry could not be added!\n");
06121         }
06122     }
06123 #endif /* AUTH */
06124 #if defined(CONFIG_RSBAC_CAP)
06125     {
06126       struct rsbac_cap_user_aci_t def_aci = DEFAULT_CAP_U_ACI;
06127 
06128       list_info_p->version = RSBAC_CAP_USER_ACI_VERSION;
06129       list_info_p->key = RSBAC_CAP_USER_ACI_KEY;
06130       list_info_p->desc_size = sizeof(rsbac_uid_t);
06131       list_info_p->data_size = sizeof(struct rsbac_cap_user_aci_t);
06132       list_info_p->max_age = 0;
06133       err = rsbac_list_register(RSBAC_LIST_VERSION,
06134                                 &user_handles.cap,
06135                                 list_info_p,
06136                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
06137                                 RSBAC_LIST_BACKUP |
06138                                 #endif
06139                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
06140                                 rsbac_list_compare_u32,
06141                                 NULL,
06142                                 &def_aci,
06143                                 RSBAC_CAP_ACI_USER_NAME,
06144                                 RSBAC_AUTO_DEV);
06145       if(err)
06146         {
06147           registration_error(err, "USER CAP");
06148         }
06149       else
06150       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.cap))
06151         {
06152           struct rsbac_cap_user_aci_t sysadm_aci   = DEFAULT_CAP_U_SYSADM_ACI;
06153           struct rsbac_cap_user_aci_t secoff_aci   = DEFAULT_CAP_U_SECOFF_ACI;
06154           struct rsbac_cap_user_aci_t auditor_aci  = DEFAULT_CAP_U_AUDITOR_ACI;
06155           rsbac_uid_t                 user;
06156 
06157           rsbac_printk(KERN_WARNING
06158                  "rsbac_do_init(): USER CAP ACI could not be read - generating standard entries!\n");
06159           rsbac_printk(KERN_WARNING
06160                  "rsbac_do_init(): USER CAP ACI could not be read - generating standard entries!\n");
06161           user = RSBAC_SYSADM_UID;
06162           if(rsbac_list_add(user_handles.cap, &user, &sysadm_aci))
06163             rsbac_printk(KERN_WARNING
06164                    "rsbac_do_init(): SYSADM USER CAP entry could not be added!\n");
06165           user = RSBAC_SECOFF_UID;
06166           if(rsbac_list_add(user_handles.cap, &user, &secoff_aci))
06167             rsbac_printk(KERN_WARNING
06168                    "rsbac_do_init(): SECOFF USER CAP entry could not be added!\n");
06169           user = RSBAC_AUDITOR_UID;
06170           if(rsbac_list_add(user_handles.cap, &user, &auditor_aci))
06171             rsbac_printk(KERN_WARNING
06172                    "rsbac_do_init(): AUDITOR USER CAP entry could not be added!\n");
06173         }
06174     }
06175 #endif
06176 #if defined(CONFIG_RSBAC_JAIL)
06177     {
06178       rsbac_system_role_int_t def_aci = SR_user;
06179 
06180       list_info_p->version = RSBAC_JAIL_USER_ACI_VERSION;
06181       list_info_p->key = RSBAC_JAIL_USER_ACI_KEY;
06182       list_info_p->desc_size = sizeof(rsbac_uid_t);
06183       list_info_p->data_size = sizeof(rsbac_system_role_int_t);
06184       list_info_p->max_age = 0;
06185       err = rsbac_list_register(RSBAC_LIST_VERSION,
06186                                 &user_handles.jail,
06187                                 list_info_p,
06188                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
06189                                 RSBAC_LIST_BACKUP |
06190                                 #endif
06191                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
06192                                 rsbac_list_compare_u32,
06193                                 NULL,
06194                                 &def_aci,
06195                                 RSBAC_JAIL_ACI_USER_NAME,
06196                                 RSBAC_AUTO_DEV);
06197       if(err)
06198         {
06199           registration_error(err, "USER JAIL");
06200         }
06201       else
06202       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.jail))
06203         {
06204           rsbac_uid_t                 user;
06205           rsbac_system_role_int_t     role;
06206 
06207           rsbac_printk(KERN_WARNING
06208                  "rsbac_do_init(): USER JAIL ACI could not be read - generating standard entries!\n");
06209           user = RSBAC_SYSADM_UID;
06210           role = SR_administrator;
06211           if(rsbac_list_add(user_handles.jail, &user, &role))
06212             rsbac_printk(KERN_WARNING
06213                    "rsbac_do_init(): SYSADM USER JAIL entry could not be added!\n");
06214           user = RSBAC_SECOFF_UID;
06215           role = SR_security_officer;
06216           if(rsbac_list_add(user_handles.jail, &user, &role))
06217             rsbac_printk(KERN_WARNING
06218                    "rsbac_do_init(): SECOFF USER JAIL entry could not be added!\n");
06219         }
06220     }
06221 #endif
06222 #if defined(CONFIG_RSBAC_RES)
06223     {
06224       list_info_p->version = RSBAC_RES_USER_ACI_VERSION;
06225       list_info_p->key = RSBAC_RES_USER_ACI_KEY;
06226       list_info_p->desc_size = sizeof(rsbac_uid_t);
06227       list_info_p->data_size = sizeof(struct rsbac_res_user_aci_t);
06228       list_info_p->max_age = 0;
06229       err = rsbac_list_register(RSBAC_LIST_VERSION,
06230                                 &user_handles.res,
06231                                 list_info_p,
06232                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
06233                                 RSBAC_LIST_BACKUP |
06234                                 #endif
06235                                 RSBAC_LIST_PERSIST,
06236                                 rsbac_list_compare_u32,
06237                                 NULL,
06238                                 NULL,
06239                                 RSBAC_RES_ACI_USER_NAME,
06240                                 RSBAC_AUTO_DEV);
06241       if(err)
06242         {
06243           registration_error(err, "USER RES");
06244         }
06245       else
06246       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.res))
06247         {
06248           struct rsbac_res_user_aci_t sysadm_aci   = DEFAULT_RES_U_SYSADM_ACI;
06249           struct rsbac_res_user_aci_t secoff_aci   = DEFAULT_RES_U_SECOFF_ACI;
06250           rsbac_uid_t                 user;
06251 
06252           rsbac_printk(KERN_WARNING
06253                  "rsbac_do_init(): USER RES ACI could not be read - generating standard entries!\n");
06254           rsbac_printk(KERN_WARNING
06255                  "rsbac_do_init(): USER RES ACI could not be read - generating standard entries!\n");
06256           user = RSBAC_SYSADM_UID;
06257           if(rsbac_list_add(user_handles.res, &user, &sysadm_aci))
06258             rsbac_printk(KERN_WARNING
06259                    "rsbac_do_init(): SYSADM USER RES entry could not be added!\n");
06260           user = RSBAC_SECOFF_UID;
06261           if(rsbac_list_add(user_handles.res, &user, &secoff_aci))
06262             rsbac_printk(KERN_WARNING
06263                    "rsbac_do_init(): SECOFF USER RES entry could not be added!\n");
06264         }
06265     }
06266 #endif
06267 #if defined(CONFIG_RSBAC_PAX)
06268     {
06269       rsbac_system_role_int_t def_aci = SR_user;
06270 
06271       list_info_p->version = RSBAC_PAX_USER_ACI_VERSION;
06272       list_info_p->key = RSBAC_PAX_USER_ACI_KEY;
06273       list_info_p->desc_size = sizeof(rsbac_uid_t);
06274       list_info_p->data_size = sizeof(rsbac_system_role_int_t);
06275       list_info_p->max_age = 0;
06276       err = rsbac_list_register(RSBAC_LIST_VERSION,
06277                                 &user_handles.pax,
06278                                 list_info_p,
06279                                 #ifdef CONFIG_RSBAC_DEV_USER_BACKUP
06280                                 RSBAC_LIST_BACKUP |
06281                                 #endif
06282                                 RSBAC_LIST_PERSIST | RSBAC_LIST_DEF_DATA,
06283                                 rsbac_list_compare_u32,
06284                                 NULL,
06285                                 &def_aci,
06286                                 RSBAC_PAX_ACI_USER_NAME,
06287                                 RSBAC_AUTO_DEV);
06288       if(err)
06289         {
06290           registration_error(err, "USER PAX");
06291         }
06292       else
06293       if(!rsbac_no_defaults && !rsbac_list_count(user_handles.pax))
06294         {
06295           rsbac_uid_t                 user;
06296           rsbac_system_role_int_t     role;
06297 
06298           rsbac_printk(KERN_WARNING
06299                  "rsbac_do_init(): USER PAX ACI could not be read - generating standard entries!\n");
06300           user = RSBAC_SYSADM_UID;
06301           role = SR_administrator;
06302           if(rsbac_list_add(user_handles.pax, &user, &role))
06303             rsbac_printk(KERN_WARNING
06304                    "rsbac_do_init(): SYSADM USER PAX entry could not be added!\n");
06305           user = RSBAC_SECOFF_UID;
06306           role = SR_security_officer;
06307           if(rsbac_list_add(user_handles.pax, &user, &role))
06308             rsbac_printk(KERN_WARNING
06309                    "rsbac_do_init(): SECOFF USER PAX entry could not be added!\n");
06310         }
06311     }
06312 #endif
06313 
06314     return err;
06315   }

static void __init registration_error int  err,
char *  listname
[static]
 

Definition at line 5482 of file aci_data_structures.c.

References get_error_name(), rsbac_kfree(), rsbac_kmalloc(), RSBAC_MAXNAMELEN, and rsbac_printk().

Referenced by register_dev_lists(), register_ipc_lists(), register_process_lists(), register_user_lists(), rsbac_init_acl(), rsbac_init_pm(), and rsbac_init_rc().

05484   {
05485     if(err < 0)
05486       {
05487         char * tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
05488 
05489         if(tmp)
05490           {
05491             rsbac_printk(KERN_WARNING
05492                    "rsbac_do_init(): Registering %s list failed with error %s\n",
05493                    listname,
05494                    get_error_name(tmp, err));
05495             rsbac_kfree(tmp);
05496           }
05497       }
05498   }

static void remove_device_item kdev_t  kdev  )  [static]
 

Definition at line 1996 of file aci_data_structures.c.

References aci_detach_fd_lists(), clear_device_item(), device_list_head, lookup_device(), and NULL.

Referenced by rsbac_umount(), rsbac_umount_acl(), rsbac_umount_auth(), and rsbac_umount_mac().

01997     {
01998       struct rsbac_device_list_item_t   * item_p;
01999     
02000       /* first we must locate the item. */
02001       if ( (item_p = lookup_device(kdev)) )
02002         { /* ok, item was found */
02003           if (device_list_head.head == item_p)  
02004              { /* item is head */
02005                if (device_list_head.tail == item_p)
02006                  { /* item is head and tail = only item -> list will be empty*/
02007                    device_list_head.head = NULL;
02008                    device_list_head.tail = NULL;
02009                  }
02010                else
02011                  { /* item is head, but not tail -> next item becomes head */
02012                    item_p->next->prev = NULL;
02013                    device_list_head.head = item_p->next;
02014                  }
02015              }
02016           else
02017              { /* item is not head */
02018                if (device_list_head.tail == item_p)
02019                  { /*item is not head, but tail -> previous item becomes tail*/
02020                    item_p->prev->next = NULL;
02021                    device_list_head.tail = item_p->prev;
02022                  }
02023                else
02024                  { /* item is neither head nor tail -> item is cut out */
02025                    item_p->prev->next = item_p->next;
02026                    item_p->next->prev = item_p->prev;
02027                  }
02028              }
02029              
02030           /* curr is no longer valid -> reset.                              */
02031           device_list_head.curr=NULL;
02032           /* adjust counter */
02033           device_list_head.count--;
02034 
02035           /* clean up */
02036           aci_detach_fd_lists(item_p);
02037 
02038           /* clear item */
02039           clear_device_item(item_p);
02040         }  /* end of if: item was found */
02041 
02042     } /* end of remove_device_item() */

int rsbac_check_inode struct super_block *  sb_p,
rsbac_inode_nr_t  inode
 

Definition at line 9128 of file aci_data_structures.c.

References RSBAC_EINVALIDPOINTER, RSBAC_EINVALIDVALUE, RSBAC_ENOTFOUND, and rsbac_printk().

09129   {
09130     struct inode * inode_p;
09131     int err = 0;
09132 
09133     if(!sb_p)
09134       return -RSBAC_EINVALIDPOINTER;
09135     if(!inode)
09136       return -RSBAC_EINVALIDVALUE;
09137     if(!MAJOR(sb_p->s_dev))
09138       return 0;
09139 
09140     if(sb_p->s_magic != EXT2_SUPER_MAGIC)
09141       return 0;
09142 
09143     #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
09144     if(sb_p->s_op && sb_p->s_op->read_inode2)
09145       return 0;
09146     #endif
09147     inode_p = iget(sb_p, inode);
09148     if(is_bad_inode(inode_p))
09149       {
09150         return -RSBAC_ENOTFOUND;
09151       }
09152 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
09153     /* currently only deletion checking of ext2 inodes is possible */
09154     if(sb_p->s_magic == EXT2_SUPER_MAGIC)
09155       {
09156         if(inode_p->u.ext2_i.i_dtime)
09157           { /* inode has been deleted */
09158             err = -RSBAC_ENOTFOUND;
09159           }
09160         else
09161           {
09162             if(inode_p->i_nlink <= 0)
09163               { /* inode has been unlinked, but no dtime is set -> warn */
09164                 rsbac_printk(KERN_WARNING
09165                        "rsbac_check_inode(): inode %u with nlink <= 0 on device %02u:%02u detected!\n",
09166                        inode, RSBAC_MAJOR(sb_p->s_dev), RSBAC_MINOR(sb_p->s_dev));
09167                 err = -RSBAC_ENOTFOUND;
09168               }
09169           }
09170       }
09171 #endif
09172     iput(inode_p);
09173     return err;
09174   }

static int rsbac_clear_file struct dentry *  dentry  )  [static]
 

Definition at line 2049 of file aci_data_structures.c.

Referenced by rsbac_write_open().

02050 {
02051         struct inode *inode = dentry->d_inode;
02052         int error;
02053         struct iattr newattrs;
02054 
02055         down(&inode->i_sem);
02056         newattrs.ia_size = 0;
02057         newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
02058         error = notify_change(dentry, &newattrs);
02059         up(&inode->i_sem);
02060         return error;
02061 }

static int __init rsbac_do_init void   )  [static]
 

Definition at line 7084 of file aci_data_structures.c.

References add_device_item(), clear_device_item(), compiled_modules, create_device_item(), device_list_head, get_error_name(), NULL, register_dev_lists(), register_fd_lists(), register_ipc_lists(), register_process_lists(), register_user_lists(), RSBAC_AUTH_LOGIN_PATH, RSBAC_AUTH_LOGIN_PATH_DIR, RSBAC_AUTH_LOGIN_PATH_FILE, rsbac_check(), rsbac_check_acl(), rsbac_check_auth(), rsbac_check_lists(), RSBAC_ECOULDNOTADDDEVICE, RSBAC_ECOULDNOTADDITEM, RSBAC_EINVALIDPOINTER, RSBAC_EINVALIDTARGET, RSBAC_ENOROOTDEV, RSBAC_ENOTFOUND, rsbac_init_acl(), rsbac_init_adf(), rsbac_init_auth(), rsbac_init_daz(), rsbac_init_debug(), rsbac_init_mac(), rsbac_init_pm(), rsbac_init_rc(), rsbac_init_um(), rsbac_initialized, rsbac_kfree(), rsbac_kmalloc(), rsbac_kmem_cache_sizes_init(), rsbac_list_add(), rsbac_list_get_data(), rsbac_list_init(), rsbac_lookup_one_len(), RSBAC_MAXNAMELEN, rsbac_mount(), rsbac_pax_set_flags_func(), rsbac_printk(), rsbac_root_dev, RSBAC_VERSION, sysfs_covered_p, sysfs_sb_p, and TRUE.

Referenced by rsbac_init().

07086   {
07087     int err = 0;
07088     struct rsbac_device_list_item_t * device_p;
07089     struct rsbac_device_list_item_t * new_device_p;
07090     u_long flags;
07091     struct rsbac_list_info_t     * list_info_p;
07092     struct super_block * sb_p;
07093 
07094 #ifdef CONFIG_RSBAC_DEBUG
07095     if(rsbac_debug_stack)
07096       {
07097         unsigned long * n;
07098         
07099         n = (unsigned long *) (current+1);
07100         while (!*n)
07101           n++;
07102         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack: %lu\n",
07103                (unsigned long) n - (unsigned long)(current+1));
07104       }
07105 #endif
07106     list_info_p = kmalloc(sizeof(*list_info_p), GFP_KERNEL);
07107     if(!list_info_p)
07108       {
07109         return -ENOMEM;
07110       }
07111     compiled_modules[0] = (char) 0;
07112     #ifdef CONFIG_RSBAC_REG
07113     strcat(compiled_modules, " REG");
07114     #endif
07115     #ifdef CONFIG_RSBAC_MAC
07116       #ifdef CONFIG_RSBAC_MAC_LIGHT
07117       strcat(compiled_modules, " MAC-L");
07118       #else
07119       strcat(compiled_modules, " MAC");
07120       #endif
07121     #endif
07122     #ifdef CONFIG_RSBAC_PM
07123     strcat(compiled_modules, " PM");
07124     #endif
07125     #ifdef CONFIG_RSBAC_DAZ
07126     strcat(compiled_modules, " DAZ");
07127     #endif
07128     #ifdef CONFIG_RSBAC_FF
07129     strcat(compiled_modules, " FF");
07130     #endif
07131     #ifdef CONFIG_RSBAC_RC
07132     strcat(compiled_modules, " RC");
07133     #endif
07134     #ifdef CONFIG_RSBAC_AUTH
07135     strcat(compiled_modules, " AUTH");
07136     #endif
07137     #ifdef CONFIG_RSBAC_ACL
07138     strcat(compiled_modules, " ACL");
07139     #endif
07140     #ifdef CONFIG_RSBAC_CAP
07141     strcat(compiled_modules, " CAP");
07142     #endif
07143     #ifdef CONFIG_RSBAC_JAIL
07144     strcat(compiled_modules, " JAIL");
07145     #endif
07146     #ifdef CONFIG_RSBAC_RES
07147     strcat(compiled_modules, " RES");
07148     #endif
07149     #ifdef CONFIG_RSBAC_PAX
07150     strcat(compiled_modules, " PAX");
07151     #endif
07152 #ifdef CONFIG_RSBAC_MAINT
07153     rsbac_printk(KERN_INFO
07154            "rsbac_do_init(): Initializing RSBAC %s (Maintenance Mode)\n",
07155            RSBAC_VERSION);
07156     /* Print banner we are initializing */
07157     printk(KERN_INFO "rsbac_do_init(): Initializing RSBAC %s (Maintenance Mode)\n", RSBAC_VERSION);
07158     
07159     rsbac_printk(KERN_INFO
07160            "rsbac_do_init(): Supported module data structures:%s\n",
07161            compiled_modules);
07162 #else
07163     rsbac_printk(KERN_INFO
07164            "rsbac_do_init(): Initializing RSBAC %s\n",
07165            RSBAC_VERSION);
07166     /* Print banner we are initializing */
07167 #ifdef CONFIG_RSBAC_RMSG_NOSYSLOG
07168     if (rsbac_nosyslog)
07169 #endif
07170             printk(KERN_INFO "rsbac_do_init(): Initializing RSBAC %s\n", RSBAC_VERSION);
07171     
07172     rsbac_printk(KERN_INFO
07173            "rsbac_do_init(): compiled modules:%s\n",
07174            compiled_modules);
07175 #endif
07176 
07177     /* init memory */
07178     rsbac_printk(KERN_INFO
07179            "rsbac_do_init(): Initializing memory slabs\n");
07180     rsbac_kmem_cache_sizes_init();
07181 
07182     /* set rw-spinlocks to unlocked status and init data structures */
07183     device_list_head.lock = RW_LOCK_UNLOCKED;
07184     device_list_head.head = NULL;
07185     device_list_head.tail = NULL;
07186     device_list_head.curr = NULL;
07187     device_list_head.count = 0;
07188 
07189 #if defined(CONFIG_RSBAC_PROC) && defined(CONFIG_PROC_FS)
07190 #ifdef CONFIG_RSBAC_DEBUG
07191     if(rsbac_debug_stack)
07192       {
07193         unsigned long * n = (unsigned long *) (current+1);
07194 
07195         while (!*n)
07196           n++;
07197         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before registering proc dir: %lu\n",
07198                (unsigned long) n - (unsigned long)(current+1));
07199       }
07200 #endif
07201     rsbac_printk(KERN_INFO "rsbac_do_init(): Registering RSBAC proc dir\n");
07202     register_all_rsbac_proc();
07203 #endif
07204 
07205 #ifdef CONFIG_RSBAC_DEBUG
07206     if(rsbac_debug_stack)
07207       {
07208         unsigned long * n = (unsigned long *) (current+1);
07209 
07210         while (!*n)
07211           n++;
07212         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before get_super: %lu\n",
07213                (unsigned long) n - (unsigned long)(current+1));
07214       }
07215 #endif
07216 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
07217     sb_p = user_get_super(rsbac_root_dev);
07218 #else
07219     sb_p = get_super(rsbac_root_dev);
07220 #endif
07221     if(!sb_p)
07222       {
07223         kfree(list_info_p);
07224         return -RSBAC_ENOROOTDEV;
07225       }
07226     /* read fd aci from root device */
07227 #ifdef CONFIG_RSBAC_DEBUG
07228     if (rsbac_debug_ds)
07229       {
07230         rsbac_printk(KERN_DEBUG
07231                "rsbac_do_init(): reading aci from device number %02u:%02u\n",
07232                RSBAC_MAJOR(rsbac_root_dev),
07233                RSBAC_MINOR(rsbac_root_dev));
07234       }
07235 #endif
07236     /* create a private device item */
07237     new_device_p = create_device_item(sb_p, NULL);
07238     if (!new_device_p)
07239       {
07240         rsbac_printk(KERN_CRIT "rsbac_do_init(): Could not alloc device item!\n");
07241         err = -RSBAC_ECOULDNOTADDDEVICE;
07242         goto out_free;
07243       }
07244     /* Add new_device_p to device list */
07245     /* wait for write access to device_list_head */
07246     rsbac_write_lock(&device_list_head.lock, &flags);
07247     /* OK, go on */
07248     device_p = add_device_item(new_device_p);
07249     /* device was added, allow access */
07250     rsbac_write_unlock(&device_list_head.lock, &flags);
07251     if (!device_p)
07252       {
07253         rsbac_printk(KERN_CRIT "rsbac_do_init(): Could not add device!\n");
07254         clear_device_item(new_device_p);
07255         err = -RSBAC_ECOULDNOTADDDEVICE;
07256         goto out_free;
07257       }
07258 
07259     /* init lists - we need the root device_p to be initialized, but no generic list registered */
07260     rsbac_printk(KERN_INFO
07261            "rsbac_do_init(): Initializing generic lists\n");
07262     rsbac_list_init();
07263 
07264 #ifdef CONFIG_RSBAC_DEBUG
07265     if(rsbac_debug_stack)
07266       {
07267         unsigned long * n = (unsigned long *) (current+1);
07268 
07269         while (!*n)
07270           n++;
07271         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_debug: %lu\n",
07272                (unsigned long) n - (unsigned long)(current+1));
07273       }
07274 #endif
07275     rsbac_init_debug();
07276 
07277     rsbac_printk(KERN_INFO
07278            "rsbac_do_init(): reading FD attributes from root dev\n");
07279 
07280 #ifdef CONFIG_RSBAC_DEBUG
07281     if(rsbac_debug_stack)
07282       {
07283         unsigned long * n = (unsigned long *) (current+1);
07284 
07285         while (!*n)
07286           n++;
07287         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before reading FD lists: %lu\n",
07288                (unsigned long) n - (unsigned long)(current+1));
07289       }
07290 #endif
07291     /* no locking needed, device_p is known and there can be no parallel init! */
07292     if((err = register_fd_lists(device_p,rsbac_root_dev)))
07293       {
07294         char * tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
07295 
07296         if(tmp)
07297           {
07298             rsbac_printk(KERN_WARNING
07299                    "rsbac_do_init(): File/Dir lists registration failed for dev %02u:%02u, err %s!\n",
07300                    RSBAC_MAJOR(rsbac_root_dev), RSBAC_MINOR(rsbac_root_dev), get_error_name(tmp,err));
07301             rsbac_kfree(tmp);
07302           }
07303       }
07304 
07305 #ifdef CONFIG_RSBAC_DEBUG
07306     if(rsbac_debug_stack)
07307       {
07308         unsigned long * n = (unsigned long *) (current+1);
07309 
07310         while (!*n)
07311           n++;
07312         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before DEV lists registration: %lu\n",
07313                (unsigned long) n - (unsigned long)(current+1));
07314       }
07315 #endif
07316     register_dev_lists();
07317 
07318 #ifdef CONFIG_RSBAC_DEBUG
07319     if(rsbac_debug_stack)
07320       {
07321         unsigned long * n = (unsigned long *) (current+1);
07322 
07323         while (!*n)
07324           n++;
07325         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before registering IPC lists: %lu\n",
07326                (unsigned long) n - (unsigned long)(current+1));
07327       }
07328 #endif
07329 
07330     register_ipc_lists();
07331 
07332 #ifdef CONFIG_RSBAC_DEBUG
07333     if(rsbac_debug_stack)
07334       {
07335         unsigned long * n = (unsigned long *) (current+1);
07336 
07337         while (!*n)
07338           n++;
07339         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before registering USER lists: %lu\n",
07340                (unsigned long) n - (unsigned long)(current+1));
07341       }
07342 #endif
07343     register_user_lists();
07344 
07345 #ifdef CONFIG_RSBAC_DEBUG
07346     if(rsbac_debug_stack)
07347       {
07348         unsigned long * n = (unsigned long *) (current+1);
07349 
07350         while (!*n)
07351           n++;
07352         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before registering PROCESS aci: %lu\n",
07353                (unsigned long) n - (unsigned long)(current+1));
07354       }
07355 #endif
07356     register_process_lists();
07357 
07358 
07359 #ifdef CONFIG_RSBAC_UM
07360 #ifdef CONFIG_RSBAC_DEBUG
07361     if(rsbac_debug_stack)
07362       {
07363         unsigned long * n = (unsigned long *) (current+1);
07364 
07365         while (!*n)
07366           n++;
07367         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before GROUP lists registration: %lu\n",
07368                (unsigned long) n - (unsigned long)(current+1));
07369       }
07370 #endif
07371     register_group_lists();
07372 #endif /* CONFIG_RSBAC_UM */
07373 
07374 #ifdef CONFIG_RSBAC_NET_DEV
07375     register_netdev_lists();
07376 #endif
07377 
07378 #ifdef CONFIG_RSBAC_NET_OBJ
07379     register_nettemp_list();
07380     register_nettemp_aci_lists();
07381     register_netobj_lists();
07382 #endif /* NET_OBJ */
07383 
07384 /* Call other init functions */
07385     #if defined(CONFIG_RSBAC_MAC)
07386 #ifdef CONFIG_RSBAC_DEBUG
07387     if(rsbac_debug_stack)
07388       {
07389         unsigned long * n = (unsigned long *) (current+1);
07390 
07391         while (!*n)
07392           n++;
07393         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_mac: %lu\n",
07394                (unsigned long) n - (unsigned long)(current+1));
07395       }
07396 #endif
07397     rsbac_init_mac();
07398     #endif
07399 
07400     #ifdef CONFIG_RSBAC_PM
07401 #ifdef CONFIG_RSBAC_DEBUG
07402     if(rsbac_debug_stack)
07403       {
07404         unsigned long * n = (unsigned long *) (current+1);
07405 
07406         while (!*n)
07407           n++;
07408         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_pm: %lu\n",
07409                (unsigned long) n - (unsigned long)(current+1));
07410       }
07411 #endif
07412     rsbac_init_pm();
07413     #endif
07414 
07415     #if defined(CONFIG_RSBAC_DAZ) && !defined(CONFIG_RSBAC_MAINT)
07416 #ifdef CONFIG_RSBAC_DEBUG
07417     if(rsbac_debug_stack)
07418       {
07419         unsigned long * n = (unsigned long *) (current+1);
07420 
07421         while (!*n)
07422           n++;
07423         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_daz: %lu\n",
07424                (unsigned long) n - (unsigned long)(current+1));
07425       }
07426 #endif
07427     rsbac_init_daz();
07428     #endif
07429 
07430     #if defined(CONFIG_RSBAC_RC)
07431 #ifdef CONFIG_RSBAC_DEBUG
07432     if(rsbac_debug_stack)
07433       {
07434         unsigned long * n = (unsigned long *) (current+1);
07435 
07436         while (!*n)
07437           n++;
07438         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_rc: %lu\n",
07439                (unsigned long) n - (unsigned long)(current+1));
07440       }
07441 #endif
07442     rsbac_init_rc();
07443     #endif
07444 
07445     #if defined(CONFIG_RSBAC_AUTH)
07446 #ifdef CONFIG_RSBAC_DEBUG
07447     if(rsbac_debug_stack)
07448       {
07449         unsigned long * n = (unsigned long *) (current+1);
07450 
07451         while (!*n)
07452           n++;
07453         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_auth: %lu\n",
07454                (unsigned long) n - (unsigned long)(current+1));
07455       }
07456 #endif
07457     rsbac_init_auth();
07458     if (rsbac_auth_enable_login)
07459       {
07460         struct dentry * t_dentry;
07461         struct dentry * dir_dentry = NULL;
07462         struct rsbac_auth_fd_aci_t auth_fd_aci = DEFAULT_AUTH_FD_ACI;
07463         int list_no;
07464 
07465         rsbac_printk(KERN_WARNING
07466                "rsbac_do_init(): auth_enable_login is set: setting auth_may_setuid for %s\n",
07467                RSBAC_AUTH_LOGIN_PATH);
07468 
07469         /* lookup filename */
07470         if(sb_p)
07471           {
07472             dir_dentry = rsbac_lookup_one_len(RSBAC_AUTH_LOGIN_PATH_DIR,
07473                                               sb_p->s_root,
07474                                               strlen(RSBAC_AUTH_LOGIN_PATH_DIR));
07475           }
07476         if (!dir_dentry)
07477           {
07478             err = -RSBAC_ENOTFOUND;
07479             rsbac_printk(KERN_WARNING "rsbac_do_init(): call to rsbac_lookup_one_len for /%s failed\n",
07480                    RSBAC_AUTH_LOGIN_PATH_DIR);
07481             goto auth_out;
07482           }
07483         if (IS_ERR(dir_dentry))
07484           {
07485             err = PTR_ERR(dir_dentry);
07486             rsbac_printk(KERN_WARNING "rsbac_do_init(): call to rsbac_lookup_one_len for /%s returned %i\n",
07487                    RSBAC_AUTH_LOGIN_PATH_DIR,
07488                    err);
07489             goto auth_out;
07490           }
07491         if (!dir_dentry->d_inode)
07492           {
07493             err = -RSBAC_ENOTFOUND;
07494             rsbac_printk(KERN_WARNING "rsbac_do_init(): call to rsbac_lookup_one_len for /%s failed\n",
07495                    RSBAC_AUTH_LOGIN_PATH_DIR);
07496             dput(dir_dentry);
07497             goto auth_out;
07498           }
07499         t_dentry = rsbac_lookup_one_len(RSBAC_AUTH_LOGIN_PATH_FILE,
07500                                         dir_dentry,
07501                                         strlen(RSBAC_AUTH_LOGIN_PATH_FILE));
07502         if (!t_dentry)
07503           {
07504             err = -RSBAC_ENOTFOUND;
07505             rsbac_printk(KERN_WARNING "rsbac_do_init(): call to rsbac_lookup_one_len for /%s/%s failed\n",
07506                    RSBAC_AUTH_LOGIN_PATH_DIR,
07507                    RSBAC_AUTH_LOGIN_PATH_FILE);
07508             goto auth_out;
07509           }
07510         if (IS_ERR(t_dentry))
07511           {
07512             err = PTR_ERR(t_dentry);
07513             rsbac_printk(KERN_WARNING "rsbac_do_init(): call to rsbac_lookup_one_len for /%s/%s returned %i\n",
07514                    RSBAC_AUTH_LOGIN_PATH_DIR,
07515                    RSBAC_AUTH_LOGIN_PATH_FILE,
07516                    err);
07517             goto auth_out;
07518           }
07519         if (!t_dentry->d_inode)
07520           {
07521             err = -RSBAC_ENOTFOUND;
07522             rsbac_printk(KERN_WARNING "rsbac_do_init(): call to rsbac_lookup_one_len for /%s/%s failed\n",
07523                    RSBAC_AUTH_LOGIN_PATH_DIR,
07524                    RSBAC_AUTH_LOGIN_PATH_FILE);
07525             dput(t_dentry);
07526             goto auth_out;
07527           }
07528 
07529         if (!t_dentry->d_inode)
07530           {
07531             rsbac_printk(KERN_WARNING "rsbac_do_init(): file %s not found\n",
07532                    RSBAC_AUTH_LOGIN_PATH);
07533             err = -RSBAC_EINVALIDTARGET;
07534             goto auth_out_dput;
07535           }
07536         /* is inode of type file? */
07537         if (!S_ISREG(t_dentry->d_inode->i_mode))
07538           {
07539             rsbac_printk(KERN_WARNING "rsbac_do_init(): %s is no file\n", RSBAC_AUTH_LOGIN_PATH);
07540             err = -RSBAC_EINVALIDTARGET;
07541             goto auth_out_dput;
07542           }
07543         list_no = auth_fd_hash(t_dentry->d_inode->i_ino);
07544         rsbac_list_get_data(device_p->handles.auth[list_no],
07545                             &t_dentry->d_inode->i_ino,
07546                             &auth_fd_aci);
07547         auth_fd_aci.auth_may_setuid = TRUE;
07548         if(rsbac_list_add(device_p->handles.auth[list_no],
07549                           &t_dentry->d_inode->i_ino,
07550                           &auth_fd_aci))
07551           { /* Adding failed! */
07552             rsbac_printk(KERN_WARNING
07553                    "rsbac_do_init(): Could not add AUTH file/dir item!\n");
07554             err = -RSBAC_ECOULDNOTADDITEM;
07555           }
07556 
07557       auth_out_dput:
07558       auth_out:
07559         { }
07560       }
07561     #endif
07562 
07563     #if defined(CONFIG_RSBAC_ACL)
07564 #ifdef CONFIG_RSBAC_DEBUG
07565     if(rsbac_debug_stack)
07566       {
07567         unsigned long * n = (unsigned long *) (current+1);
07568 
07569         while (!*n)
07570           n++;
07571         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_acl: %lu\n",
07572                (unsigned long) n - (unsigned long)(current+1));
07573       }
07574 #endif
07575     rsbac_init_acl();
07576     #endif
07577 
07578     #if defined(CONFIG_RSBAC_UM)
07579 #ifdef CONFIG_RSBAC_DEBUG
07580     if(rsbac_debug_stack)
07581       {
07582         unsigned long * n = (unsigned long *) (current+1);
07583 
07584         while (!*n)
07585           n++;
07586         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_um: %lu\n",
07587                (unsigned long) n - (unsigned long)(current+1));
07588       }
07589 #endif
07590     rsbac_init_um();
07591     #endif
07592 
07593 
07594 #ifdef CONFIG_RSBAC_DEBUG
07595     if(rsbac_debug_stack)
07596       {
07597         unsigned long * n = (unsigned long *) (current+1);
07598 
07599         while (!*n)
07600           n++;
07601         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before init_adf: %lu\n",
07602                (unsigned long) n - (unsigned long)(current+1));
07603       }
07604 #endif
07605     rsbac_init_adf();
07606 
07607     /* free super_block pointer */
07608     drop_super(sb_p);
07609 
07610     #if defined(CONFIG_RSBAC_PAX) && defined(CONFIG_PAX_HOOK_ACL_FLAGS)
07611     #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
07612     pax_set_initial_flags_func = rsbac_pax_set_flags_func;
07613     #else
07614     pax_set_flags_func = rsbac_pax_set_flags_func;
07615     #endif
07616     #endif
07617 
07618 /* Tell that rsbac is initialized                                       */    
07619     rsbac_initialized = TRUE;
07620 
07621 /* Add initrd mount */
07622 #ifdef CONFIG_BLK_DEV_INITRD
07623     if(initrd_start)
07624       {
07625 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
07626         sb_p = user_get_super(MKDEV(RAMDISK_MAJOR,0));
07627 #else
07628         sb_p = get_super(MKDEV(RAMDISK_MAJOR,0));
07629 #endif
07630         if(sb_p)
07631           {
07632             rsbac_mount(sb_p, NULL);
07633             drop_super(sb_p);
07634           }
07635 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
07636         sb_p = user_get_super(MKDEV(RAMDISK_MAJOR,INITRD_MINOR));
07637 #else
07638         sb_p = get_super(MKDEV(RAMDISK_MAJOR,INITRD_MINOR));
07639 #endif
07640         if(sb_p)
07641           {
07642             rsbac_mount(sb_p, NULL);
07643             drop_super(sb_p);
07644           }
07645       }
07646 #endif
07647 
07648 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
07649 /* Add sysfs mount */
07650     if(   sysfs_covered_p
07651        && sysfs_sb_p
07652       )
07653       {
07654         rsbac_printk(KERN_WARNING "rsbac_do_init(): automounting sysfs device %02u:%02u\n",
07655                MAJOR(sysfs_sb_p->s_dev), MINOR(sysfs_sb_p->s_dev));
07656         rsbac_mount(sysfs_sb_p, sysfs_covered_p);
07657       }
07658 #endif
07659 
07660 /* Add devfs mount */
07661     #ifdef CONFIG_DEVFS_MOUNT
07662     if(   devfs_covered_p
07663        && devfs_sb_p
07664       )
07665       {
07666         rsbac_printk(KERN_WARNING "rsbac_do_init(): automounting devfs device %02u:%02u\n",
07667                MAJOR(devfs_sb_p->s_dev), MINOR(devfs_sb_p->s_dev));
07668         rsbac_mount(devfs_sb_p, devfs_covered_p);
07669       }
07670     #endif
07671 
07672 /* Force a check, if configured */
07673 #ifdef CONFIG_RSBAC_INIT_CHECK
07674 #ifdef CONFIG_RSBAC_DEBUG
07675     if(rsbac_debug_stack)
07676       {
07677         unsigned long * n = (unsigned long *) (current+1);
07678 
07679         while (!*n)
07680           n++;
07681         rsbac_printk(KERN_DEBUG "rsbac_do_init: free stack before rsbac_check: %lu\n",
07682                (unsigned long) n - (unsigned long)(current+1));
07683       }
07684 #endif
07685     rsbac_printk(KERN_INFO "rsbac_do_init(): Forcing consistency check.\n");
07686     rsbac_check_lists(1);
07687 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
07688     rsbac_check(1,0);
07689     /* call other checks */
07690     #if defined(CONFIG_RSBAC_AUTH)
07691     rsbac_check_auth(1,0);
07692     #endif
07693 #endif
07694     #if defined(CONFIG_RSBAC_ACL)
07695     rsbac_check_acl(1,0);
07696     #endif
07697 #endif
07698 
07699     if (!current->fs)
07700       {
07701         rsbac_printk(KERN_WARNING "rsbac_do_init(): current->fs is invalid!\n");
07702         err = -RSBAC_EINVALIDPOINTER;
07703       }
07704 out:
07705 /* Ready. */
07706     rsbac_printk(KERN_INFO "rsbac_do_init(): Ready.\n");
07707     /* We are up and running */
07708     rsbac_printk(KERN_INFO "rsbac_do_init(): Ready.\n");
07709 
07710     kfree(list_info_p);
07711     return err;
07712 
07713 out_free:
07714     /* free super_block pointer */
07715     drop_super(sb_p);
07716     goto out;
07717   }

int rsbac_free_dat_dentries void   ) 
 

Definition at line 8583 of file aci_data_structures.c.

References device_list_head, NULL, RSBAC_ENOTINITIALIZED, rsbac_initialized, and rsbac_printk().

08584   {
08585     u_long flags;
08586     struct rsbac_device_list_item_t * device_p;
08587 
08588     if (!rsbac_initialized)
08589       {
08590         rsbac_printk(KERN_WARNING "rsbac_free_dat_dentry(): RSBAC not initialized\n");
08591         return(-RSBAC_ENOTINITIALIZED);
08592       }
08593 
08594     rsbac_printk(KERN_INFO "rsbac_free_dat_dentry(): freeing dat dir dentries\n");
08595 
08596     /* wait for write access to device_list_head */
08597     rsbac_write_lock_irq(&device_list_head.lock, &flags);
08598     /* OK, nobody else is working on it... */
08599     device_p = device_list_head.head;
08600     while(device_p)
08601       {
08602         if(device_p->rsbac_dir_dentry_p)
08603           {
08604             dput(device_p->rsbac_dir_dentry_p);
08605             device_p->rsbac_dir_dentry_p = NULL;
08606           }
08607         device_p = device_p->next;
08608       }
08609     /* allow access */
08610     rsbac_write_unlock_irq(&device_list_head.lock, &flags);
08611 
08612     return(0);
08613   }

int rsbac_get_full_path struct dentry *  dentry_p,
char  path[],
int  maxlen
 

Definition at line 2667 of file aci_data_structures.c.

References A_pseudo, FALSE, GEN, lookup_device(), rsbac_attribute_value_t::pseudo, RSBAC_EINVALIDPOINTER, RSBAC_EINVALIDVALUE, RSBAC_ENOMEM, rsbac_get_attr, rsbac_kfree(), rsbac_kmalloc(), RSBAC_MAXNAMELEN, T_USER, and rsbac_target_id_t::user.

Referenced by get_target_name(), rsbac_adf_request_int(), rsbac_jail_sys_jail(), and xp_fill_file_struct().

02668   {
02669     int len=0;
02670     char * i_path;
02671     int   tmplen=0;
02672 #ifdef CONFIG_RSBAC_LOG_PSEUDO_FS
02673     union rsbac_target_id_t        i_tid;
02674     union rsbac_attribute_value_t  i_attr_val;
02675 #endif
02676 
02677     if(!dentry_p || !path)
02678       return -RSBAC_EINVALIDPOINTER;
02679     if(maxlen <= 0)
02680       return -RSBAC_EINVALIDVALUE;
02681     i_path = rsbac_kmalloc(maxlen + RSBAC_MAXNAMELEN);
02682     if(!i_path)
02683       return -RSBAC_ENOMEM;
02684 
02685     path[0] = 0;
02686 
02687     while(dentry_p && (len<maxlen) && dentry_p->d_name.len && dentry_p->d_name.name)
02688       {
02689 #ifdef CONFIG_RSBAC_LOG_PSEUDO_FS
02690         if(   dentry_p->d_inode
02691            && dentry_p->d_parent
02692            && dentry_p->d_parent->d_inode
02693            && (i_tid.user = dentry_p->d_inode->i_uid)
02694            && (dentry_p->d_inode->i_uid != dentry_p->d_parent->d_inode->i_uid)
02695            && !rsbac_get_attr(GEN,T_USER,i_tid,A_pseudo,&i_attr_val,FALSE)
02696            && i_attr_val.pseudo
02697           )
02698           { /* Max len of 32 Bit value in decimal print is 11 */
02699             if((maxlen-len) < 12)
02700               {
02701                 rsbac_kfree(i_path);
02702                 return(len);
02703               }
02704             tmplen = snprintf(i_path, 11, "%u", i_attr_val.pseudo);
02705           }
02706         else
02707 #endif
02708           {
02709             tmplen = dentry_p->d_name.len;
02710             if((tmplen+1) > (maxlen-len))
02711               {
02712                 rsbac_kfree(i_path);
02713                 return(len);
02714               }
02715             strncpy(i_path, dentry_p->d_name.name, tmplen);
02716           }
02717         if(len && (i_path[tmplen-1] != '/'))
02718           {
02719             i_path[tmplen] = '/';
02720             tmplen++;
02721           }
02722         i_path[tmplen]=0;
02723         strcat(i_path, path);
02724         strcpy(path, i_path);
02725         len += tmplen;
02726         if(   dentry_p->d_parent
02727            && (dentry_p->d_parent != dentry_p)
02728            && (dentry_p->d_sb->s_root != dentry_p)
02729           )
02730           dentry_p = dentry_p->d_parent;
02731         else
02732           {
02733             struct rsbac_device_list_item_t * device_p;
02734 
02735             device_p = lookup_device(dentry_p->d_sb->s_dev);
02736             if(   device_p
02737                && device_p->d_covers
02738               )
02739               dentry_p = device_p->d_covers;
02740             else
02741               break;
02742           }
02743       }
02744     rsbac_kfree(i_path);
02745     return(len);
02746   }

int rsbac_get_full_path_length struct dentry *  dentry_p  ) 
 

Definition at line 2751 of file aci_data_structures.c.

References lookup_device(), and RSBAC_EINVALIDPOINTER.

Referenced by xp_fill_file_struct().

02752   {
02753     int len=0;
02754     int   tmplen=0;
02755 
02756     if(!dentry_p)
02757       return -RSBAC_EINVALIDPOINTER;
02758 
02759     while(dentry_p && dentry_p->d_name.len && dentry_p->d_name.name)
02760       {
02761         tmplen = dentry_p->d_name.len;
02762         if(len && (dentry_p->d_name.name[tmplen-1] != '/'))
02763           {
02764             tmplen++;
02765           }
02766         len += tmplen;
02767         if(   dentry_p->d_parent
02768            && (dentry_p->d_parent != dentry_p)
02769            && (dentry_p->d_sb->s_root != dentry_p)
02770           )
02771           dentry_p = dentry_p->d_parent;
02772         else
02773           {
02774             struct rsbac_device_list_item_t * device_p;
02775 
02776             device_p = lookup_device(dentry_p->d_sb->s_dev);
02777             if(   device_p
02778                && device_p->d_covers
02779               )
02780               dentry_p = device_p->d_covers;
02781             else
02782               break;
02783           }
02784       }
02785     return(len);
02786   }

int rsbac_get_parent enum rsbac_target_t  target,
union rsbac_target_id_t  tid,
enum rsbac_target_t parent_target_p,
union rsbac_target_id_t parent_tid_p
 

Definition at line 9805 of file aci_data_structures.c.

References device_list_head, lookup_device(), RSBAC_EINVALIDPOINTER, RSBAC_EINVALIDTARGET, RSBAC_ENOTFOUND, rsbac_printk(), T_DIR, T_FIFO, T_FILE, and T_SYMLINK.

Referenced by copy_fp_cap_set_item(), copy_fp_tru_set_item(), get_attr_fd(), rsbac_acl_get_rights(), and rsbac_acl_get_single_right().

09809   {
09810     if(!parent_target_p || !parent_tid_p)
09811       return -RSBAC_EINVALIDPOINTER;
09812 /*
09813 #ifdef CONFIG_RSBAC_DEBUG
09814     if (rsbac_debug_ds)
09815       {
09816         rsbac_printk(KERN_DEBUG
09817                "rsbac_get_parent(): Getting file/dir/fifo/symlink parent for device %02u:%02u, inode %lu, dentry_p %p\n",
09818                RSBAC_MAJOR(tid.file.device),RSBAC_MINOR(tid.file.device), (u_long) tid.file.inode, tid.file.dentry_p);
09819       }
09820 #endif
09821 */
09822     switch(target)
09823       {
09824         case T_FILE:
09825         case T_DIR:
09826         case T_FIFO:
09827         case T_SYMLINK:
09828           break;
09829         default:
09830           return -RSBAC_EINVALIDTARGET;
09831       }
09832 
09833     if(!tid.file.dentry_p)
09834       return -RSBAC_ENOTFOUND;
09835 
09836     *parent_target_p = T_DIR;
09837     /* Is this dentry root of a mounted device? */
09838     if(   tid.file.dentry_p->d_sb
09839        && (tid.file.dentry_p->d_sb->s_root == tid.file.dentry_p)
09840       )
09841       {
09842         struct rsbac_device_list_item_t * device_p;
09843         u_long dflags;
09844 
09845         /* wait for read access to device_list_head */
09846         rsbac_read_lock(&device_list_head.lock, &dflags);
09847 
09848         device_p = lookup_device(tid.file.device);
09849         if(   !device_p
09850            || !device_p->d_covers
09851            || !device_p->d_covers->d_parent
09852            || !device_p->d_covers->d_parent->d_inode
09853           )
09854           {
09855             /* free access to device_list_head */
09856             rsbac_read_unlock(&device_list_head.lock, &dflags);
09857             return -RSBAC_ENOTFOUND;
09858           }
09859         parent_tid_p->dir.device = device_p->d_covers->d_parent->d_sb->s_dev;
09860         parent_tid_p->dir.inode = device_p->d_covers->d_parent->d_inode->i_ino;
09861         parent_tid_p->dir.dentry_p = device_p->d_covers->d_parent;
09862         /* free access to device_list_head */
09863         rsbac_read_unlock(&device_list_head.lock, &dflags);
09864       }
09865     else
09866       { /* no root of filesystem -> use d_parent, dev keeps unchanged */
09867         if(!tid.file.dentry_p->d_parent)
09868           {
09869             rsbac_printk(KERN_WARNING
09870                    "rsbac_get_parent(): oops - d_parent is NULL!\n");
09871             return -RSBAC_ENOTFOUND;
09872           }
09873         if(tid.file.dentry_p == tid.file.dentry_p->d_parent)
09874           {
09875             rsbac_printk(KERN_WARNING
09876                    "rsbac_get_parent(): oops - d_parent == dentry_p!\n");
09877             return -RSBAC_ENOTFOUND;
09878           }
09879         if(!tid.file.dentry_p->d_parent->d_inode)
09880           {
09881             rsbac_printk(KERN_WARNING
09882                    "rsbac_get_parent(): oops - d_parent has no d_inode!\n");
09883             return -RSBAC_ENOTFOUND;
09884           }
09885         parent_tid_p->dir.device = tid.file.device;
09886         parent_tid_p->dir.inode = tid.file.dentry_p->d_parent->d_inode->i_ino;
09887         parent_tid_p->dir.dentry_p = tid.file.dentry_p->d_parent;
09888       }
09889     return 0;
09890   }

struct super_block* rsbac_get_super_block kdev_t  kdev  ) 
 

Definition at line 2071 of file aci_data_structures.c.

References device_list_head, lookup_device(), NULL, rsbac_mount(), rsbac_printk(), rsbac_write_sem, and wakeup_auto().

Referenced by lookup_aci_path_dentry(), rsbac_acl_add_to_acl_entry(), rsbac_acl_get_mask(), rsbac_acl_get_rights(), rsbac_acl_get_single_right(), rsbac_acl_get_tlist(), rsbac_acl_remove_acl(), rsbac_acl_remove_acl_entry(), rsbac_acl_remove_from_acl_entry(), rsbac_acl_set_acl_entry(), rsbac_acl_set_mask(), rsbac_adf_request_int(), rsbac_adf_set_attr(), rsbac_auth_add_to_f_capset(), rsbac_auth_clear_f_capset(), rsbac_auth_copy_fp_capset(), rsbac_auth_get_f_caplist(), rsbac_auth_remove_from_f_capset(), rsbac_check_acl(), rsbac_mac_add_to_f_truset(), rsbac_mac_clear_f_truset(), rsbac_mac_copy_fp_truset(), rsbac_mac_get_f_trulist(), rsbac_mac_remove_from_f_truset(), and rsbac_write_open().

02072   {
02073     struct rsbac_device_list_item_t * device_p;
02074     u_long dflags;
02075     struct super_block * sb_p;
02076 
02077     if(RSBAC_IS_AUTO_DEV(kdev))
02078       return NULL;
02079 
02080     /* get super_block-pointer */
02081     rsbac_read_lock(&device_list_head.lock, &dflags);
02082     device_p = lookup_device(kdev);
02083     if (!device_p)
02084       {
02085         rsbac_read_unlock(&device_list_head.lock, &dflags);
02086         down(&rsbac_write_sem);
02087         up(&rsbac_write_sem);
02088 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
02089         sb_p = user_get_super(kdev);
02090 #else
02091         sb_p = get_super(kdev);
02092 #endif
02093         if(!sb_p)
02094           { /* Wait a second and retry */
02095             DECLARE_WAIT_QUEUE_HEAD(auto_wait);
02096             struct timer_list auto_timer;
02097 
02098             rsbac_printk(KERN_INFO
02099                    "rsbac_get_super_block(): device %02u:%02u not yet available, sleeping\n",
02100                    RSBAC_MAJOR(kdev), RSBAC_MINOR(kdev));
02101             init_timer(&auto_timer);
02102             auto_timer.function = wakeup_auto;
02103             auto_timer.data = (u_long) &auto_wait;
02104             auto_timer.expires = jiffies + HZ;
02105             add_timer(&auto_timer);
02106             interruptible_sleep_on(&auto_wait);
02107 
02108 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
02109             sb_p = user_get_super(kdev);
02110 #else
02111             sb_p = get_super(kdev);
02112 #endif
02113           }
02114         if(sb_p)
02115           {
02116             device_p = lookup_device(kdev);
02117             if (!device_p)
02118               {
02119                 rsbac_printk(KERN_INFO
02120                        "rsbac_get_super_block(): auto-mounting device %02u:%02u\n",
02121                        RSBAC_MAJOR(kdev), RSBAC_MINOR(kdev));
02122                 rsbac_mount(sb_p, NULL);
02123               }
02124             /* free super_block pointer */
02125             drop_super(sb_p);
02126             rsbac_read_lock(&device_list_head.lock, &dflags);
02127             device_p = lookup_device(kdev);
02128             if (!device_p)
02129               {
02130                 rsbac_printk(KERN_WARNING
02131                        "rsbac_get_super_block(): unknown device %02u:%02u\n",
02132                        RSBAC_MAJOR(kdev), RSBAC_MINOR(kdev));
02133                 rsbac_read_unlock(&device_list_head.lock, &dflags);
02134                 return NULL;
02135               }
02136           }
02137         else
02138           {
02139             return NULL;
02140           }
02141       }
02142     sb_p = device_p->sb_p;
02143     rsbac_read_unlock(&device_list_head.lock, &dflags);
02144     return sb_p;
02145   }

int __init rsbac_init kdev_t  root_dev  ) 
 

Definition at line 7945 of file aci_data_structures.c.

Referenced by rsbac_mount().

07947   {
07948     int err = 0;
07949 #if  (defined(CONFIG_RSBAC_AUTO_WRITE) && (CONFIG_RSBAC_AUTO_WRITE > 0)) \
07950    || defined(CONFIG_RSBAC_INIT_THREAD)
07951     rsbac_pid_t rsbacd_pid;
07952 #endif
07953 
07954     if (rsbac_initialized)
07955       {
07956         rsbac_printk(KERN_WARNING "rsbac_init(): RSBAC already initialized\n");
07957         return(-RSBAC_EREINIT);
07958       }
07959     if (!current->fs)
07960       {
07961         rsbac_printk(KERN_WARNING "rsbac_init(): current->fs is invalid!\n");
07962         return(-RSBAC_EINVALIDPOINTER);
07963       }
07964 
07965     rsbac_root_dev = root_dev;
07966 
07967 #if  (defined(CONFIG_RSBAC_AUTO_WRITE) && (CONFIG_RSBAC_AUTO_WRITE > 0)) \
07968    || defined(CONFIG_RSBAC_INIT_THREAD)
07969     /* init the rsbacd wait queue head */
07970     init_waitqueue_head(&rsbacd_wait);
07971 #endif
07972 
07973 #ifdef CONFIG_RSBAC_INIT_THREAD
07974 /* trigger dependency */
07975 #ifdef CONFIG_RSBAC_MAX_INIT_TIME
07976 #endif
07977     rsbac_printk(KERN_INFO "rsbac_init(): Setting init timeout to %u seconds (%u jiffies).\n",
07978            RSBAC_MAX_INIT_TIME, RSBAC_MAX_INIT_TIME * HZ);
07979     init_timer(&rsbac_timer);
07980     rsbac_timer.function = wakeup_rsbacd;
07981     rsbac_timer.data = 0;
07982     rsbac_timer.expires = jiffies + (RSBAC_MAX_INIT_TIME * HZ);
07983     add_timer(&rsbac_timer);
07984 
07985 /* Start rsbac thread for init */
07986     rsbacd_pid = kernel_thread(rsbac_initd, NULL, 0);
07987     rsbac_printk(KERN_INFO "rsbac_init(): Started rsbac_initd thread with pid %u\n",
07988            rsbacd_pid);
07989 
07990     if(!rsbac_initialized)
07991       interruptible_sleep_on(&rsbacd_wait);
07992     if(!rsbac_initialized)
07993       {
07994         rsbac_printk(KERN_ERR
07995                "rsbac_init(): *** RSBAC init timed out - RSBAC not correctly initialized! ***\n");
07996         rsbac_printk(KERN_ERR
07997                "rsbac_init(): *** Killing rsbac_initd! ***\n");
07998         sys_kill(rsbacd_pid, SIGKILL);
07999         rsbac_initialized = FALSE;
08000       }
08001 #else
08002     rsbac_do_init();
08003 #endif
08004 
08005 #if defined(CONFIG_RSBAC_AUTO_WRITE) && (CONFIG_RSBAC_AUTO_WRITE > 0)
08006     if(rsbac_initialized)
08007       {
08008         /* Start rsbacd thread for auto write */
08009         rsbacd_pid = kernel_thread(rsbacd, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
08010         if(rsbacd_pid < 0)
08011           {
08012             rsbac_printk(KERN_ERR
08013                    "rsbac_init(): *** Starting rsbacd thread failed with error %i! ***\n",
08014                    rsbacd_pid);
08015           }
08016         else
08017           {
08018             rsbac_printk(KERN_INFO "rsbac_init(): Started rsbacd thread with pid %u\n",
08019                    rsbacd_pid);
08020           }
08021       }
08022 #endif
08023 
08024 /* Ready. */
08025 /*    schedule(); */
08026 #ifdef CONFIG_RSBAC_INIT_THREAD
08027     sys_wait4(-1, NULL, WNOHANG, NULL);
08028 #endif
08029 
08030 /* Add all processes to list of processes as init processes */
08031 #if defined(CONFIG_RSBAC_MAC) || defined(CONFIG_RSBAC_RC)
08032     {
08033       #ifdef CONFIG_RSBAC_MAC
08034       struct rsbac_mac_user_aci_t mac_u_aci;
08035       #endif
08036       #ifdef CONFIG_RSBAC_RC
08037       struct rsbac_rc_user_aci_t    rc_u_aci;
08038       struct rsbac_rc_process_aci_t rc_init_p_aci = DEFAULT_RC_P_INIT_ACI;
08039       #endif
08040       rsbac_uid_t user = RSBAC_SYSADM_UID;
08041       rsbac_pid_t pid = 1;
08042       struct task_struct * p;
08043 
08044       rsbac_printk(KERN_INFO "rsbac_init(): Adjusting attributes of existing processes\n");
08045 /* Prepare entries: change standard values to root's values */
08046       #ifdef CONFIG_RSBAC_MAC
08047       if(!rsbac_list_get_data(user_handles.mac, &user, &mac_u_aci))
08048         {
08049           mac_init_p_aci.owner_sec_level = mac_u_aci.security_level;
08050           mac_init_p_aci.owner_initial_sec_level = mac_u_aci.initial_security_level;
08051           mac_init_p_aci.current_sec_level = mac_u_aci.initial_security_level;
08052           mac_init_p_aci.owner_min_sec_level = mac_u_aci.min_security_level;
08053           mac_init_p_aci.mac_owner_categories = mac_u_aci.mac_categories;
08054           mac_init_p_aci.mac_owner_initial_categories = mac_u_aci.mac_initial_categories;
08055           mac_init_p_aci.mac_curr_categories = mac_u_aci.mac_initial_categories;
08056           mac_init_p_aci.mac_owner_min_categories = mac_u_aci.mac_min_categories;
08057           mac_init_p_aci.min_write_open = mac_u_aci.security_level;
08058           mac_init_p_aci.max_read_open = mac_u_aci.min_security_level;
08059           mac_init_p_aci.min_write_categories = mac_u_aci.mac_categories;
08060           mac_init_p_aci.max_read_categories = mac_u_aci.mac_min_categories;
08061           mac_init_p_aci.mac_process_flags
08062            = (mac_u_aci.mac_user_flags & RSBAC_MAC_P_FLAGS) | RSBAC_MAC_DEF_INIT_P_FLAGS;
08063         }
08064       #endif
08065 
08066 /* Set process aci - first init */
08067       #ifdef CONFIG_RSBAC_MAC
08068       if(rsbac_list_add(process_handles.mac[mac_p_hash(pid)], &pid, &mac_init_p_aci))
08069         rsbac_printk(KERN_WARNING
08070                "rsbac_do_init(): MAC ACI for Init process 1 could not be added!");
08071       #endif
08072       #ifdef CONFIG_RSBAC_RC
08073       /* Get boot role */
08074       if(rsbac_rc_get_boot_role(&rc_init_p_aci.rc_role))
08075         { /* none: use root's role */
08076           if(!rsbac_list_get_data(user_handles.rc, &user, &rc_u_aci))
08077             {
08078               rc_init_p_aci.rc_role = rc_u_aci.rc_role;
08079             }
08080           else
08081             { /* last resort: general role */
08082               rsbac_ds_get_error("rsbac_do_init", A_rc_def_role);
08083               rc_init_p_aci.rc_role = RSBAC_RC_GENERAL_ROLE;
08084             }
08085         }
08086       rc_kernel_p_aci.rc_role = rc_init_p_aci.rc_role;
08087       if(rsbac_list_add(process_handles.rc[rc_p_hash(pid)], &pid, &rc_init_p_aci))
08088         rsbac_printk(KERN_WARNING
08089                "rsbac_do_init(): RC ACI for Init process 1 could not be added!");
08090       #endif
08091       read_lock(&tasklist_lock);
08092 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
08093       for_each_task(p)
08094 #else
08095       for_each_process(p)
08096 #endif
08097         {
08098           /* not for kernel and init though... */
08099           if(!p->pid || (p->pid == 1))
08100             continue;
08101           pid = p->pid;
08102 #ifdef CONFIG_RSBAC_DEBUG
08103           if (rsbac_debug_ds)
08104             {
08105               rsbac_printk(KERN_DEBUG "rsbac_do_init(): setting aci for process %u\n",
08106                      pid);
08107             }
08108 #endif
08109           #ifdef CONFIG_RSBAC_MAC
08110           if(rsbac_list_add(process_handles.mac[mac_p_hash(pid)], &pid, &mac_init_p_aci))
08111             rsbac_printk(KERN_WARNING
08112                    "rsbac_do_init(): MAC ACI for Init process %u could not be added!",
08113                    pid);
08114           #endif
08115           #ifdef CONFIG_RSBAC_RC
08116           if(!p->mm)
08117             {
08118               if(rsbac_list_add(process_handles.rc[rc_p_hash(pid)], &pid, &rc_kernel_p_aci))
08119                 rsbac_printk(KERN_WARNING
08120                        "rsbac_do_init(): RC ACI for Kernel process %u could not be added!",
08121                        pid);
08122             }
08123           #endif
08124         }
08125       read_unlock(&tasklist_lock);
08126     }
08127 #endif /* MAC or RC */
08128 
08129     rsbac_printk(KERN_INFO "rsbac_init(): Ready.\n");
08130     return(err);
08131   }

rsbac_boolean_t rsbac_is_initialized void   ) 
 

Definition at line 8138 of file aci_data_structures.c.

References rsbac_initialized.

Referenced by rsbac_acl_add_to_acl_entry(), rsbac_acl_get_mask(), rsbac_acl_get_rights(), rsbac_acl_get_single_right(), rsbac_acl_get_tlist(), rsbac_acl_remove_acl(), rsbac_acl_remove_acl_entry(), rsbac_acl_remove_from_acl_entry(), rsbac_acl_set_acl_entry(), rsbac_acl_set_mask(), rsbac_adf_request_int(), rsbac_adf_set_attr(), rsbac_auth_add_to_f_capset(), rsbac_auth_add_to_p_capset(), rsbac_auth_clear_f_capset(), rsbac_auth_clear_p_capset(), rsbac_auth_copy_fp_capset(), rsbac_auth_copy_pp_capset(), rsbac_auth_get_f_caplist(), rsbac_auth_get_p_caplist(), rsbac_auth_p_capset_member(), rsbac_auth_remove_from_f_capset(), rsbac_auth_remove_from_p_capset(), rsbac_check_acl(), rsbac_init_acl(), rsbac_init_auth(), rsbac_init_daz(), rsbac_init_mac(), rsbac_init_pm(), rsbac_init_rc(), rsbac_init_um(), rsbac_mac_add_to_f_truset(), rsbac_mac_add_to_p_truset(), rsbac_mac_clear_f_truset(), rsbac_mac_clear_p_truset(), rsbac_mac_copy_fp_truset(), rsbac_mac_copy_pp_truset(), rsbac_mac_get_f_trulist(), rsbac_mac_get_p_trulist(), rsbac_mac_p_truset_member(), rsbac_mac_remove_from_f_truset(), rsbac_mac_remove_from_p_truset(), rsbac_mount_acl(), rsbac_mount_auth(), rsbac_mount_mac(), rsbac_pm(), rsbac_pm_change_current_task(), rsbac_rc_check_comp(), rsbac_rc_copy_role(), rsbac_rc_copy_type(), rsbac_rc_get_item(), rsbac_rc_get_list(), rsbac_rc_set_item(), rsbac_reg_init(), rsbac_stats_acl(), rsbac_stats_auth(), rsbac_stats_mac(), rsbac_stats_pm(), rsbac_stats_rc(), rsbac_stats_um(), rsbac_um_add_gm(), rsbac_um_add_group(), rsbac_um_add_user(), rsbac_um_get_group_item(), rsbac_um_get_user_item(), rsbac_um_mod_group(), rsbac_um_mod_user(), rsbac_um_remove_gm(), rsbac_umount_acl(), rsbac_umount_auth(), and rsbac_umount_mac().

08139   {
08140     return rsbac_initialized;
08141   }

int rsbac_kthread_notify rsbac_pid_t  pid  ) 
 

Definition at line 8143 of file aci_data_structures.c.

References process_handles, rsbac_initialized, rsbac_list_add(), and rsbac_printk().

08144   {
08145     if (!rsbac_initialized)
08146       return 0;
08147 /* Set process aci */
08148       #ifdef CONFIG_RSBAC_MAC
08149       if(rsbac_list_add(process_handles.mac[mac_p_hash(pid)], &pid, &mac_init_p_aci))
08150         rsbac_printk(KERN_WARNING
08151                "rsbac_do_init(): MAC ACI for kernel process %u could not be added!",
08152                pid);
08153       #endif
08154       #ifdef CONFIG_RSBAC_RC
08155       if(rsbac_list_add(process_handles.rc[rc_p_hash(pid)], &pid, &rc_kernel_p_aci))
08156         rsbac_printk(KERN_WARNING
08157                "rsbac_do_init(): RC ACI for kernel process %u could not be added!",
08158                pid);
08159       #endif
08160       return 0;
08161   }

int rsbac_mount struct super_block *  sb_p,
struct dentry *  d_covers
 

Definition at line 8165 of file aci_data_structures.c.

References add_device_item(), clear_device_item(), create_device_item(), device_list_head, get_error_name(), lookup_device(), NULL, register_fd_lists(), rsbac_debug_no_write, RSBAC_ECOULDNOTADDDEVICE, RSBAC_EINVALIDPOINTER, RSBAC_ENOTINITIALIZED, rsbac_init(), rsbac_initialized, rsbac_kfree(), rsbac_kmalloc(), rsbac_list_mount(), RSBAC_MAXNAMELEN, rsbac_mount_acl(), rsbac_mount_auth(), rsbac_mount_mac(), rsbac_mount_reg(), rsbac_printk(), rsbac_root_dev, rsbac_write_sem, sysfs_covered_p, SYSFS_MAGIC, sysfs_sb_p, and TRUE.

Referenced by get_attr_fd(), rsbac_aef_sb_post_addmount(), rsbac_aef_sb_umount_busy(), rsbac_do_init(), rsbac_get_super_block(), rsbac_ta_remove_target(), and set_attr_fd().

08166   {
08167     int err = 0;
08168     struct rsbac_device_list_item_t * device_p;
08169     struct rsbac_device_list_item_t * new_device_p;
08170     u_long flags;
08171     rsbac_boolean_t old_no_write;
08172 
08173     if(!sb_p)
08174       {
08175         rsbac_printk(KERN_WARNING
08176                "rsbac_mount(): called with NULL pointer\n");
08177         return -RSBAC_EINVALIDPOINTER;
08178       }
08179     if (!rsbac_initialized)
08180       {
08181         #ifdef CONFIG_RSBAC_INIT_DELAY
08182         #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
08183         if(   !RSBAC_MAJOR(rsbac_delayed_root)
08184            && !RSBAC_MINOR(rsbac_delayed_root)
08185            && rsbac_delayed_root_str[0]
08186           )
08187           { /* translate string to kdev_t */
08188             char * p = rsbac_delayed_root_str;
08189             u_int major = 0;
08190             u_int minor = 0;
08191 
08192             major = simple_strtoul(p, NULL, 0);
08193             while((*p != ':') && (*p != '\0'))
08194               p++;
08195             if(*p)
08196               {
08197                 p++;
08198                 minor = simple_strtoul(p, NULL, 0);
08199               }
08200             rsbac_delayed_root = RSBAC_MKDEV(major,minor);
08201           }
08202         #endif
08203         if(   !rsbac_no_delay_init
08204            && (   (   !RSBAC_MAJOR(rsbac_delayed_root)
08205                    && !RSBAC_MINOR(rsbac_delayed_root)
08206                    && (MAJOR(sb_p->s_dev) > 1)
08207                   )
08208                || (   (   RSBAC_MAJOR(rsbac_delayed_root)
08209                        || RSBAC_MINOR(rsbac_delayed_root)
08210                       )
08211                    && (   (MAJOR(sb_p->s_dev) == RSBAC_MAJOR(rsbac_delayed_root))
08212                        && (   !RSBAC_MINOR(rsbac_delayed_root)
08213                            || (MINOR(sb_p->s_dev) == RSBAC_MINOR(rsbac_delayed_root))
08214                           )
08215                       )
08216                   )
08217               )
08218           )
08219           {
08220             if(RSBAC_MAJOR(rsbac_delayed_root) || RSBAC_MINOR(rsbac_delayed_root))
08221               {
08222                 rsbac_printk(KERN_INFO
08223                        "rsbac_mount(): forcing delayed RSBAC init on DEV %02u:%02u, matching %02u:%02u!\n",
08224                        MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev),
08225                        RSBAC_MAJOR(rsbac_delayed_root), RSBAC_MINOR(rsbac_delayed_root));
08226               }
08227             else
08228               {
08229                 rsbac_printk(KERN_INFO
08230                        "rsbac_mount(): forcing delayed RSBAC init on DEV %02u:%02u!\n",
08231                        MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
08232               }
08233             rsbac_init(sb_p->s_dev);
08234             return 0;
08235           }
08236         #endif
08237 
08238         rsbac_printk(KERN_WARNING
08239                "rsbac_mount(): RSBAC not initialized while mounting DEV %02u:%02u, delaying\n",
08240                MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
08241 
08242 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
08243         if(   (sb_p->s_magic == SYSFS_MAGIC)
08244            && !RSBAC_MAJOR(sb_p->s_dev)
08245           )
08246           {
08247             rsbac_printk(KERN_WARNING
08248                    "rsbac_mount(): sysfs mount detected, keeping values for later use\n");
08249             sysfs_sb_p = sb_p;
08250             sysfs_covered_p = d_covers;
08251           }
08252 #endif
08253         #ifdef CONFIG_DEVFS_MOUNT
08254         if(   (sb_p->s_magic == DEVFS_SUPER_MAGIC)
08255            && !RSBAC_MAJOR(sb_p->s_dev)
08256           )
08257           {
08258             rsbac_printk(KERN_WARNING
08259                    "rsbac_mount(): devfs mount detected, keeping values for later use\n");
08260             devfs_sb_p = sb_p;
08261             devfs_covered_p = d_covers;
08262           }
08263         #endif
08264         return(-RSBAC_ENOTINITIALIZED);
08265       }
08266 #ifdef CONFIG_RSBAC_DEBUG
08267     if (rsbac_debug_ds)
08268       {
08269         rsbac_printk(KERN_DEBUG "rsbac_mount(): mounting device %02u:%02u\n",
08270                MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
08271       }
08272     if(rsbac_debug_stack)
08273       {
08274         unsigned long * n = (unsigned long *) (current+1);
08275 
08276         while (!*n)
08277           n++;
08278         rsbac_printk(KERN_DEBUG "rsbac_mount: free stack: %lu\n",
08279                (unsigned long) n - (unsigned long)(current+1));
08280       }
08281 #endif
08282     down(&rsbac_write_sem);
08283     old_no_write = rsbac_debug_no_write;
08284     rsbac_debug_no_write = TRUE;
08285     up(&rsbac_write_sem);
08286     /* wait for read access to device_list_head */
08287     rsbac_read_lock(&device_list_head.lock, &flags);
08288     device_p = lookup_device(sb_p->s_dev);
08289     /* repeated mount? */
08290     if(device_p)
08291       {
08292         rsbac_printk(KERN_INFO "rsbac_mount: repeated mount %u of device %02u:%02u\n",
08293                device_p->mount_count, MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
08294         device_p->mount_count++;
08295         if(   d_covers
08296            && !device_p->d_covers
08297            && (MAJOR(sb_p->s_dev) != MAJOR(rsbac_root_dev))
08298            && (MINOR(sb_p->s_dev) != MINOR(rsbac_root_dev))
08299           )
08300           {
08301             rsbac_printk(KERN_WARNING "rsbac_mount: replacing NULL d_covers with new value %p as inheritance parent\n",
08302                    d_covers);
08303             device_p->d_covers = d_covers;
08304           }
08305         rsbac_read_unlock(&device_list_head.lock, &flags);
08306       }
08307     else
08308       {
08309         rsbac_read_unlock(&device_list_head.lock, &flags);
08310         /* OK, go on */
08311         new_device_p = create_device_item(sb_p, d_covers); 
08312 #ifdef CONFIG_RSBAC_DEBUG
08313         if(rsbac_debug_stack)
08314           {
08315             unsigned long * n = (unsigned long *) (current+1);
08316 
08317             while (!*n)
08318               n++;
08319             rsbac_printk(KERN_DEBUG "rsbac_mount: after creating device item: free stack: %lu\n",
08320                    (unsigned long) n - (unsigned long)(current+1));
08321           }
08322 #endif
08323         if(!new_device_p)
08324           {
08325             rsbac_debug_no_write = old_no_write;
08326             return -RSBAC_ECOULDNOTADDDEVICE;
08327           }
08328 
08329         rsbac_read_lock(&device_list_head.lock, &flags);
08330         /* make sure to only add, if this device item has not been added in the meantime */
08331         device_p = lookup_device(sb_p->s_dev);
08332         if(device_p)
08333           {
08334             rsbac_printk(KERN_WARNING
08335                    "rsbac_mount(): mount race for device %02u:%02u detected!\n",
08336                    MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
08337             device_p->mount_count++;
08338             rsbac_read_unlock(&device_list_head.lock, &flags);
08339             clear_device_item(new_device_p);
08340           }
08341         else
08342           {
08343             rsbac_read_unlock(&device_list_head.lock, &flags);
08344             rsbac_write_lock(&device_list_head.lock, &flags);
08345             device_p = add_device_item(new_device_p);
08346             rsbac_write_unlock(&device_list_head.lock, &flags);
08347             if(!device_p)
08348               {
08349                 rsbac_printk(KERN_WARNING "rsbac_mount: adding device %02u:%02u failed!\n",
08350                        MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
08351                 clear_device_item(new_device_p);
08352                 rsbac_debug_no_write = old_no_write;
08353                 return -RSBAC_ECOULDNOTADDDEVICE;
08354               }
08355           }
08356 
08357         /* Generic lists */
08358         rsbac_list_mount(sb_p->s_dev);
08359         /* we do not lock device head - we know the device_p and hope for the best... */
08360         /* also, we are within kernel mount sem */
08361         if((err = register_fd_lists(new_device_p, sb_p->s_dev)))
08362           {
08363             char * tmp;
08364 
08365             tmp = rsbac_kmalloc(RSBAC_MAXNAMELEN);
08366             if(tmp)
08367               {
08368                 rsbac_printk(KERN_WARNING
08369                        "rsbac_mount(): File/Dir ACI registration failed for dev %02u:%02u, err %s!\n",
08370                        MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev), get_error_name(tmp,err));
08371                 rsbac_kfree(tmp);
08372               }
08373           }
08374 #ifdef CONFIG_RSBAC_DEBUG
08375         if(rsbac_debug_stack)
08376           {
08377             unsigned long * n = (unsigned long *) (current+1);
08378 
08379             while (!*n)
08380               n++;
08381             rsbac_printk(KERN_DEBUG "rsbac_mount: after registering fd lists: free stack: %lu\n",
08382                    (unsigned long) n - (unsigned long)(current+1));
08383           }
08384 #endif
08385       }
08386 
08387     /* call other mount functions */
08388     /****** MAC *******/
08389     #if defined(CONFIG_RSBAC_MAC)
08390     rsbac_mount_mac(sb_p->s_dev);
08391 #ifdef CONFIG_RSBAC_DEBUG
08392     if(rsbac_debug_stack)
08393       {
08394         unsigned long * n = (unsigned long *) (current+1);
08395 
08396         while (!*n)
08397           n++;
08398         rsbac_printk(KERN_DEBUG "rsbac_mount: after mount_mac: free stack: %lu\n",
08399                (unsigned long) n - (unsigned long)(current+1));
08400       }
08401 #endif
08402     #endif
08403     /****** AUTH *******/
08404     #if defined(CONFIG_RSBAC_AUTH)
08405     rsbac_mount_auth(sb_p->s_dev);
08406 #ifdef CONFIG_RSBAC_DEBUG
08407     if(rsbac_debug_stack)
08408       {
08409         unsigned long * n = (unsigned long *) (current+1);
08410 
08411         while (!*n)
08412           n++;
08413         rsbac_printk(KERN_DEBUG "rsbac_mount: after mount_auth: free stack: %lu\n",
08414                (unsigned long) n - (unsigned long)(current+1));
08415       }
08416 #endif
08417     #endif
08418     /****** ACL *******/
08419     #if defined(CONFIG_RSBAC_ACL)
08420     rsbac_mount_acl(sb_p->s_dev);
08421 #ifdef CONFIG_RSBAC_DEBUG
08422     if(rsbac_debug_stack)
08423       {
08424         unsigned long * n = (unsigned long *) (current+1);
08425 
08426         while (!*n)
08427           n++;
08428         rsbac_printk(KERN_DEBUG "rsbac_mount: after mount_acl: free stack: %lu\n",
08429                (unsigned long) n - (unsigned long)(current+1));
08430       }
08431 #endif
08432     #endif
08433     /****** REG *******/
08434     #if defined(CONFIG_RSBAC_REG)
08435     rsbac_mount_reg(sb_p->s_dev);
08436 #ifdef CONFIG_RSBAC_DEBUG
08437     if(rsbac_debug_stack)
08438       {
08439         unsigned long * n = (unsigned long *) (current+1);
08440 
08441         while (!*n)
08442           n++;
08443         rsbac_printk(KERN_DEBUG "rsbac_mount: after mount_reg: free stack: %lu\n",
08444                (unsigned long) n - (unsigned long)(current+1));
08445       }
08446 #endif
08447     #endif  /* REG */
08448 
08449     rsbac_debug_no_write = old_no_write;
08450     return(err);
08451   }

void rsbac_read_close struct file *  file_p  ) 
 

Definition at line 2642 of file aci_data_structures.c.

References NULL.

Referenced by read_info(), read_list(), read_lol_list(), and rsbac_write_close().

02643   {
02644         /* cleanup copied from __fput */
02645         struct dentry * dentry = file_p->f_dentry;
02646         struct inode * inode = dentry->d_inode;
02647 
02648         if (file_p->f_op && file_p->f_op->release)
02649                 file_p->f_op->release(inode, file_p);
02650         file_p->f_dentry = NULL;
02651         if (file_p->f_mode & FMODE_WRITE)
02652                 put_write_access(inode);
02653         dput(dentry);
02654   }

int rsbac_read_open char *  name,
struct file *  file_p,
kdev_t  kdev
 

Definition at line 2150 of file aci_data_structures.c.

References FALSE, init_private_file(), lookup_aci_path_dentry(), NULL, RSBAC_EINVALIDPOINTER, RSBAC_ENOMEM, RSBAC_ENOTFOUND, RSBAC_EREADFAILED, rsbac_kfree(), rsbac_kmalloc(), rsbac_lookup_one_len(), RSBAC_MAXNAMELEN, and rsbac_printk().

Referenced by read_info(), read_list(), and read_lol_list().

02153   {
02154     struct dentry                 * dir_dentry_p;
02155     struct dentry                 * file_dentry_p;
02156     int                             tmperr, err;
02157 
02158     if(!name || !file_p)
02159       {
02160 #ifdef CONFIG_RSBAC_DEBUG
02161         if (rsbac_debug_ds)
02162           {
02163             rsbac_printk(KERN_DEBUG "rsbac_read_open(): called with NULL pointer!");
02164           }
02165 #endif
02166         return(-RSBAC_EINVALIDPOINTER);
02167       }
02168 
02169     /* lookup dentry of ACI_PATH on root device, lock is released there */
02170     if ((err=lookup_aci_path_dentry(NULL, &dir_dentry_p, FALSE, kdev)))
02171       {
02172         return(err);
02173       }
02174 
02175     /* open file for reading - this must be done 'by hand', because     */
02176     /* standard system calls are now extended by rsbac decision calls.  */
02177     file_dentry_p = rsbac_lookup_one_len(name, dir_dentry_p, strlen(name));
02178     if (!file_dentry_p || IS_ERR (file_dentry_p))
02179       { /* error in lookup */
02180         return(-RSBAC_EREADFAILED);
02181       }
02182     if (!file_dentry_p->d_inode)
02183       { /* file not found: trying backup */
02184         char * bname;
02185         int  name_len = strlen(name);
02186 
02187         dput(file_dentry_p);
02188         bname = rsbac_kmalloc(RSBAC_MAXNAMELEN);
02189         if(!bname)
02190           {
02191             return -RSBAC_ENOMEM;
02192           }
02193 
02194         strcpy(bname,name);
02195         bname[name_len] = 'b';
02196         name_len++;
02197         bname[name_len] = (char) 0;
02198 #ifdef CONFIG_RSBAC_DEBUG
02199         if (rsbac_debug_ds)
02200           {
02201             rsbac_printk(KERN_DEBUG "rsbac_read_open(): could not lookup file %s, trying backup %s\n",
02202                    name,bname);
02203           }
02204 #endif
02205         file_dentry_p = rsbac_lookup_one_len(bname, dir_dentry_p, strlen(bname));
02206         rsbac_kfree(bname);
02207         if (!file_dentry_p || IS_ERR (file_dentry_p))
02208           { /* error in lookup */
02209             return(-RSBAC_EREADFAILED);
02210           }
02211         if (!file_dentry_p->d_inode)
02212           { /* backup file also not found: return error */
02213 #ifdef CONFIG_RSBAC_DEBUG
02214             if (rsbac_debug_ds)
02215               {
02216                 rsbac_printk(KERN_DEBUG "rsbac_read_open(): could not lookup backup file %sb\n",
02217                        name);
02218               }
02219 #endif
02220             dput(file_dentry_p);
02221             return(-RSBAC_ENOTFOUND);
02222           }
02223       }
02224     if ( !(S_ISREG(file_dentry_p->d_inode->i_mode)) )
02225       { /* this is not a file! -> error! */
02226         rsbac_printk(KERN_WARNING "rsbac_read_open(): expected file is not a file!\n");
02227         dput(file_dentry_p);
02228         return(-RSBAC_EREADFAILED);
02229       }
02230 
02231     /* Now we fill the file structure and */
02232     /* if there is an open func for this file, use it, otherwise ignore */
02233     if ((tmperr = init_private_file(file_p, file_dentry_p,O_RDONLY)))
02234       {
02235         dput(file_dentry_p);
02236         rsbac_printk(KERN_WARNING "rsbac_read_open(): could not open file '%s'!\n", name);
02237         return -RSBAC_EREADFAILED;
02238       }
02239 
02240     /* if there is no read func, we get a problem -> error */
02241     if ((!file_p->f_op) || (!file_p->f_op->read))
02242       {
02243         if (!file_p->f_op)
02244           {
02245             rsbac_printk(KERN_WARNING "rsbac_read_open(): no f_op for file '%s'!\n", name);
02246           }
02247         else
02248           {
02249             rsbac_printk(KERN_WARNING "rsbac_read_open(): no file read func for file '%s'!\n", name);
02250             if (file_p->f_op->release)
02251               file_p->f_op->release(file_dentry_p->d_inode, file_p);
02252           }
02253         dput(file_dentry_p);
02254         return -RSBAC_EREADFAILED;
02255       }
02256     return 0;
02257   } /* end of rsbac_read_open_device_p */

int rsbac_stats void   ) 
 

Definition at line 8618 of file aci_data_structures.c.

References dev_handles, dev_major_handles, device_list_head, ipc_handles, process_handles, rsbac_adf_request_count, rsbac_adf_set_attr_count, RSBAC_ENOTINITIALIZED, rsbac_initialized, rsbac_list_count(), rsbac_printk(), rsbac_stats_acl(), rsbac_stats_auth(), rsbac_stats_pm(), rsbac_stats_rc(), T_DEV, T_DIR, T_FIFO, T_FILE, T_IPC, T_NETDEV, T_NETOBJ, T_NETTEMP, T_PROCESS, T_SCD, T_SYMLINK, T_USER, and user_handles.

Referenced by sys_rsbac_stats().

08619   {
08620     struct rsbac_device_list_item_t   * device_p;
08621     int                                 i;
08622     u_long                              fd_count = 0, fd_sum = 0;
08623     u_long                              dev_sum = 0;
08624     u_long                              ipc_sum = 0;
08625     u_long                              user_sum = 0;
08626     u_long                              process_sum = 0;
08627 #if defined(CONFIG_RSBAC_UM)
08628     u_long                              group_sum = 0;
08629 #endif
08630 #if defined(CONFIG_RSBAC_NET_OBJ)
08631     u_long                              nettemp_sum = 0;
08632     u_long                              lnetobj_sum = 0;
08633     u_long                              rnetobj_sum = 0;
08634 #endif
08635     u_long                              total_sum = 0;
08636     long                                tmp_count;
08637     u_long                              dflags;
08638 
08639     if (!rsbac_initialized)
08640       {
08641         rsbac_printk(KERN_WARNING "rsbac_stats(): RSBAC not initialized\n");
08642         return(-RSBAC_ENOTINITIALIZED);
08643       }
08644     /* wait for read access to device_list_head */
08645     rsbac_read_lock(&device_list_head.lock, &dflags);
08646     /* OK, go on */
08647 /*    rsbac_printk(KERN_INFO "rsbac_stats(): currently %u processes working on file/dir aci\n",
08648                      device_list_head.lock.lock); */
08649     device_p = device_list_head.head;
08650     while (device_p)
08651       { /* for all sublists */
08652         fd_count = 0;
08653         for (i=0; i < RSBAC_GEN_NR_FD_LISTS; i++)
08654           {
08655             tmp_count = rsbac_list_count(device_p->handles.gen[i]);
08656             if(tmp_count > 0)
08657               fd_count+=tmp_count;
08658           }
08659         rsbac_printk(KERN_INFO "Device %02u:%02u fd_items: %lu GEN",
08660                RSBAC_MAJOR(device_p->id), RSBAC_MINOR(device_p->id), fd_count);
08661         fd_sum += fd_count;
08662 
08663 #if defined(CONFIG_RSBAC_MAC)
08664         fd_count = 0;
08665         for (i=0; i < RSBAC_MAC_NR_FD_LISTS; i++)
08666           {
08667             tmp_count = rsbac_list_count(device_p->handles.mac[i]);
08668             if(tmp_count > 0)
08669               fd_count+=tmp_count;
08670           }
08671         rsbac_printk(", %lu MAC",
08672                fd_count);
08673         fd_sum += fd_count;
08674 #endif
08675 
08676 #if defined(CONFIG_RSBAC_PM)
08677         fd_count = 0;
08678         for (i=0; i < RSBAC_PM_NR_FD_LISTS; i++)
08679           {
08680             tmp_count = rsbac_list_count(device_p->handles.pm[i]);
08681             if(tmp_count > 0)
08682               fd_count+=tmp_count;
08683           }
08684         rsbac_printk(", %lu PM",
08685                fd_count);
08686         fd_sum += fd_count;
08687 #endif
08688 
08689 #if defined(CONFIG_RSBAC_DAZ)
08690         fd_count = 0;
08691         for (i=0; i < RSBAC_DAZ_NR_FD_LISTS; i++)
08692           {
08693             tmp_count = rsbac_list_count(device_p->handles.daz[i]);
08694             if(tmp_count > 0)
08695               fd_count+=tmp_count;
08696           }
08697         rsbac_printk(", %lu DAZ",
08698                fd_count);
08699         fd_sum += fd_count;
08700 #if defined(CONFIG_RSBAC_DAZ_CACHE)
08701         fd_count = 0;
08702         for (i=0; i < RSBAC_DAZ_SCANNED_NR_FD_LISTS; i++)
08703           {
08704             tmp_count = rsbac_list_count(device_p->handles.dazs[i]);
08705             if(tmp_count > 0)
08706               fd_count+=tmp_count;
08707           }
08708         rsbac_printk(", %lu DAZ_SCANNED",
08709                fd_count);
08710         fd_sum += fd_count;
08711 #endif
08712 #endif
08713 
08714 #if defined(CONFIG_RSBAC_FF)
08715         fd_count = 0;
08716         for (i=0; i < RSBAC_FF_NR_FD_LISTS; i++)
08717           {
08718             tmp_count = rsbac_list_count(device_p->handles.ff[i]);
08719             if(tmp_count > 0)
08720               fd_count+=tmp_count;
08721           }
08722         rsbac_printk(", %lu FF",
08723                fd_count);
08724         fd_sum += fd_count;
08725 #endif
08726 
08727 #if defined(CONFIG_RSBAC_RC)
08728         fd_count = 0;
08729         for (i=0; i < RSBAC_RC_NR_FD_LISTS; i++)
08730           {
08731             tmp_count = rsbac_list_count(device_p->handles.rc[i]);
08732             if(tmp_count > 0)
08733               fd_count+=tmp_count;
08734           }
08735         rsbac_printk(", %lu RC",
08736                fd_count);
08737         fd_sum += fd_count;
08738 #endif
08739 
08740 #if defined(CONFIG_RSBAC_AUTH)
08741         fd_count = 0;
08742         for (i=0; i < RSBAC_AUTH_NR_FD_LISTS; i++)
08743           {
08744             tmp_count = rsbac_list_count(device_p->handles.auth[i]);
08745             if(tmp_count > 0)
08746               fd_count+=tmp_count;
08747           }
08748         rsbac_printk(", %lu AUTH",
08749                fd_count);
08750         fd_sum += fd_count;
08751 #endif
08752 
08753 #if defined(CONFIG_RSBAC_CAP)
08754         fd_count = 0;
08755         for (i=0; i < RSBAC_CAP_NR_FD_LISTS; i++)
08756           {
08757             tmp_count = rsbac_list_count(device_p->handles.cap[i]);
08758             if(tmp_count > 0)
08759               fd_count+=tmp_count;
08760           }
08761         rsbac_printk(", %lu CAP",
08762                fd_count);
08763         fd_sum += fd_count;
08764 #endif
08765 #if defined(CONFIG_RSBAC_RES)
08766         fd_count = 0;
08767         for (i=0; i < RSBAC_RES_NR_FD_LISTS; i++)
08768           {
08769             tmp_count = rsbac_list_count(device_p->handles.res[i]);
08770             if(tmp_count > 0)
08771               fd_count+=tmp_count;
08772           }
08773         rsbac_printk(", %lu RES",
08774                fd_count);
08775         fd_sum += fd_count;
08776 #endif
08777 #if defined(CONFIG_RSBAC_PAX)
08778         fd_count = 0;
08779         for (i=0; i < RSBAC_PAX_NR_FD_LISTS; i++)
08780           {
08781             tmp_count = rsbac_list_count(device_p->handles.pax[i]);
08782             if(tmp_count > 0)
08783               fd_count+=tmp_count;
08784           }
08785         rsbac_printk(", %lu PAX",
08786                fd_count);
08787         fd_sum += fd_count;
08788 #endif
08789 
08790         rsbac_printk("\n");
08791         device_p = device_p->next;
08792       }
08793     rsbac_printk(KERN_INFO "rsbac_stats(): Sum of %u Devices with %lu fd-items\n",
08794                  device_list_head.count, fd_sum);
08795     /* free access to device_list_head */
08796     rsbac_read_unlock(&device_list_head.lock, &dflags);
08797     total_sum += fd_sum;
08798     
08799     /* dev lists */
08800     tmp_count = rsbac_list_count(dev_handles.gen);
08801     rsbac_printk(KERN_INFO "DEV items: %lu GEN",
08802                    tmp_count);
08803     dev_sum += tmp_count;
08804 #if defined(CONFIG_RSBAC_MAC)
08805     tmp_count = rsbac_list_count(dev_handles.mac);
08806     rsbac_printk(", %lu MAC",
08807                    tmp_count);
08808     dev_sum += tmp_count;
08809 #endif
08810 #if defined(CONFIG_RSBAC_PM)
08811     tmp_count = rsbac_list_count(dev_handles.pm);
08812     rsbac_printk(", %lu PM",
08813                    tmp_count);
08814     dev_sum += tmp_count;
08815 #endif
08816 #if defined(CONFIG_RSBAC_RC)
08817     tmp_count = rsbac_list_count(dev_major_handles.rc);
08818     rsbac_printk(", %lu major RC",
08819                    tmp_count);
08820     dev_sum += tmp_count;
08821     tmp_count = rsbac_list_count(dev_handles.rc);
08822     rsbac_printk(", %lu RC",
08823                    tmp_count);
08824     dev_sum += tmp_count;
08825 #endif
08826     rsbac_printk("\n");
08827     rsbac_printk(KERN_INFO "Sum of %lu DEV items\n",
08828                    dev_sum);
08829     total_sum += dev_sum;
08830 
08831     /* ipc lists */
08832     rsbac_printk(KERN_INFO "IPC items: no GEN");
08833 #if defined(CONFIG_RSBAC_MAC)
08834     tmp_count = rsbac_list_count(ipc_handles.mac);
08835     rsbac_printk(", %lu MAC",
08836                    tmp_count);
08837     ipc_sum += tmp_count;
08838 #endif
08839 #if defined(CONFIG_RSBAC_PM)
08840     tmp_count = rsbac_list_count(ipc_handles.pm);
08841     rsbac_printk(", %lu PM",
08842                    tmp_count);
08843     ipc_sum += tmp_count;
08844 #endif
08845 #if defined(CONFIG_RSBAC_RC)
08846     tmp_count = rsbac_list_count(ipc_handles.rc);
08847     rsbac_printk(", %lu RC",
08848                    tmp_count);
08849     ipc_sum += tmp_count;
08850 #endif
08851 #if defined(CONFIG_RSBAC_JAIL)
08852     tmp_count = rsbac_list_count(ipc_handles.jail);
08853     rsbac_printk(", %lu JAIL",
08854                    tmp_count);
08855     ipc_sum += tmp_count;
08856 #endif
08857     rsbac_printk("\n");
08858     rsbac_printk(KERN_INFO "Sum of %lu IPC items\n",
08859                    ipc_sum);
08860     total_sum += ipc_sum;
08861 
08862     /* user lists */
08863     tmp_count = rsbac_list_count(user_handles.gen);
08864     rsbac_printk(KERN_INFO "USER items: %lu GEN",
08865                    tmp_count);
08866     user_sum += tmp_count;
08867 #if defined(CONFIG_RSBAC_MAC)
08868     tmp_count = rsbac_list_count(user_handles.mac);
08869     rsbac_printk(", %lu MAC",
08870                    tmp_count);
08871     user_sum += tmp_count;
08872 #endif
08873 #if defined(CONFIG_RSBAC_PM)
08874     tmp_count = rsbac_list_count(user_handles.pm);
08875     rsbac_printk(", %lu PM",
08876                    tmp_count);
08877     user_sum += tmp_count;
08878 #endif
08879 #if defined(CONFIG_RSBAC_DAZ)
08880     tmp_count = rsbac_list_count(user_handles.daz);
08881     rsbac_printk(", %lu DAZ",
08882                    tmp_count);
08883     user_sum += tmp_count;
08884 #endif
08885 #if defined(CONFIG_RSBAC_RC)
08886     tmp_count = rsbac_list_count(user_handles.rc);
08887     rsbac_printk(", %lu RC",
08888                    tmp_count);
08889     user_sum += tmp_count;
08890 #endif
08891 #if defined(CONFIG_RSBAC_AUTH)
08892     tmp_count = rsbac_list_count(user_handles.auth);
08893     rsbac_printk(", %lu AUTH",
08894                    tmp_count);
08895     user_sum += tmp_count;
08896 #endif
08897 #if defined(CONFIG_RSBAC_CAP)
08898     tmp_count = rsbac_list_count(user_handles.cap);
08899     rsbac_printk(", %lu CAP",
08900            tmp_count);
08901     user_sum += tmp_count;
08902 #endif
08903 #if defined(CONFIG_RSBAC_JAIL)
08904     tmp_count = rsbac_list_count(user_handles.jail);
08905     rsbac_printk(", %lu JAIL",
08906            tmp_count);
08907     user_sum += tmp_count;
08908 #endif
08909 #if defined(CONFIG_RSBAC_RES)
08910     tmp_count = rsbac_list_count(user_handles.res);
08911     rsbac_printk(", %lu RES",
08912            tmp_count);
08913     user_sum += tmp_count;
08914 #endif
08915 #if defined(CONFIG_RSBAC_PAX)
08916     tmp_count = rsbac_list_count(user_handles.pax);
08917     rsbac_printk(", %lu PAX",
08918                    tmp_count);
08919     user_sum += tmp_count;
08920 #endif
08921     rsbac_printk("\n");
08922     rsbac_printk(KERN_INFO "Sum of %lu USER items\n",
08923                    user_sum);
08924     total_sum += user_sum;
08925 
08926     /* process lists */
08927     tmp_count = 0;
08928     for(i=0; i<CONFIG_RSBAC_GEN_NR_P_LISTS; i++)
08929       tmp_count += rsbac_list_count(process_handles.gen[i]);
08930     rsbac_printk(KERN_INFO "PROCESS items: %lu GEN",
08931                    tmp_count);
08932     process_sum += tmp_count;
08933 #if defined(CONFIG_RSBAC_MAC)
08934     tmp_count = 0;
08935     for(i=0; i<CONFIG_RSBAC_MAC_NR_P_LISTS; i++)
08936       tmp_count += rsbac_list_count(process_handles.mac[i]);
08937     rsbac_printk(", %lu MAC",
08938                    tmp_count);
08939     process_sum += tmp_count;
08940 #endif
08941 #if defined(CONFIG_RSBAC_PM)
08942     tmp_count = rsbac_list_count(process_handles.pm);
08943     rsbac_printk(", %lu PM",
08944                    tmp_count);
08945     process_sum += tmp_count;
08946 #endif
08947 #if defined(CONFIG_RSBAC_DAZ)
08948     tmp_count = rsbac_list_count(process_handles.daz);
08949     rsbac_printk(", %lu DAZ",
08950                    tmp_count);
08951     process_sum += tmp_count;
08952 #endif
08953 #if defined(CONFIG_RSBAC_RC)
08954     tmp_count = 0;
08955     for(i=0; i<CONFIG_RSBAC_RC_NR_P_LISTS; i++)
08956       tmp_count += rsbac_list_count(process_handles.rc[i]);
08957     rsbac_printk(", %lu RC",
08958                    tmp_count);
08959     process_sum += tmp_count;
08960 #endif
08961 #if defined(CONFIG_RSBAC_AUTH)
08962     tmp_count = rsbac_list_count(process_handles.auth);
08963     rsbac_printk(", %lu AUTH",
08964                    tmp_count);
08965     process_sum += tmp_count;
08966 #endif
08967 #if defined(CONFIG_RSBAC_CAP)
08968     tmp_count = rsbac_list_count(process_handles.cap);
08969     rsbac_printk(", %lu CAP",
08970                    tmp_count);
08971     process_sum += tmp_count;
08972 #endif
08973 #if defined(CONFIG_RSBAC_JAIL)
08974     tmp_count = 0;
08975     for(i=0; i<CONFIG_RSBAC_JAIL_NR_P_LISTS; i++)
08976       tmp_count += rsbac_list_count(process_handles.jail[i]);
08977     rsbac_printk(", %lu JAIL",
08978                    tmp_count);
08979     process_sum += tmp_count;
08980 #endif
08981     rsbac_printk("\n");
08982     rsbac_printk(KERN_INFO "Sum of %lu PROCESS items\n",
08983                    process_sum);
08984     total_sum += process_sum;
08985 
08986 #if defined(CONFIG_RSBAC_UM)
08987     /* group lists */
08988     rsbac_printk(KERN_INFO "GROUP items: ");
08989 #if defined(CONFIG_RSBAC_RC_UM_PROT)
08990     tmp_count = rsbac_list_count(group_handles.rc);
08991     rsbac_printk("%lu RC",
08992            tmp_count);
08993     user_sum += tmp_count;
08994 #endif
08995     rsbac_printk("\n");
08996     rsbac_printk(KERN_INFO "Sum of %lu GROUP items\n",
08997                    group_sum);
08998     total_sum += group_sum;
08999 #endif
09000 
09001 #if defined(CONFIG_RSBAC_NET_OBJ)
09002     /* nettemp lists */
09003     rsbac_printk(KERN_INFO "NETTEMP items: ");
09004 #if defined(CONFIG_RSBAC_MAC)
09005     tmp_count = rsbac_list_count(nettemp_handles.mac);
09006     rsbac_printk("%lu MAC, ",
09007                    tmp_count);
09008     nettemp_sum += tmp_count;
09009 #endif
09010 #if defined(CONFIG_RSBAC_PM)
09011     tmp_count = rsbac_list_count(nettemp_handles.pm);
09012     rsbac_printk("%lu PM, ",
09013                    tmp_count);
09014     nettemp_sum += tmp_count;
09015 #endif
09016 #if defined(CONFIG_RSBAC_RC)
09017     tmp_count = rsbac_list_count(nettemp_handles.rc);
09018     rsbac_printk("%lu RC, ",
09019                    tmp_count);
09020     nettemp_sum += tmp_count;
09021 #endif
09022     rsbac_printk("\n");
09023     rsbac_printk(KERN_INFO "Sum of %lu NETTEMP items\n",
09024                    nettemp_sum);
09025     total_sum += nettemp_sum;
09026 
09027     /* local netobj lists */
09028     rsbac_printk(KERN_INFO "Local NETOBJ items:");
09029 #if defined(CONFIG_RSBAC_MAC)
09030     tmp_count = rsbac_list_count(lnetobj_handles.mac);
09031     rsbac_printk(" %lu MAC,",
09032                    tmp_count);
09033     lnetobj_sum += tmp_count;
09034 #endif
09035 #if defined(CONFIG_RSBAC_PM)
09036     tmp_count = rsbac_list_count(lnetobj_handles.pm);
09037     rsbac_printk(" %lu PM,",
09038                    tmp_count);
09039     lnetobj_sum += tmp_count;
09040 #endif
09041 #if defined(CONFIG_RSBAC_RC)
09042     tmp_count = rsbac_list_count(lnetobj_handles.rc);
09043     rsbac_printk(" %lu RC",
09044                    tmp_count);
09045     lnetobj_sum += tmp_count;
09046 #endif
09047     rsbac_printk("\n");
09048     rsbac_printk(KERN_INFO "Sum of %lu Local NETOBJ items\n",
09049                    lnetobj_sum);
09050     total_sum += lnetobj_sum;
09051 
09052     /* remote netobj lists */
09053     rsbac_printk(KERN_INFO "Remote NETOBJ items:");
09054 #if defined(CONFIG_RSBAC_MAC)
09055     tmp_count = rsbac_list_count(rnetobj_handles.mac);
09056     rsbac_printk(" %lu MAC,",
09057                    tmp_count);
09058     rnetobj_sum += tmp_count;
09059 #endif
09060 #if defined(CONFIG_RSBAC_PM)
09061     tmp_count = rsbac_list_count(rnetobj_handles.pm);
09062     rsbac_printk(" %lu PM,",
09063                    tmp_count);
09064     rnetobj_sum += tmp_count;
09065 #endif
09066 #if defined(CONFIG_RSBAC_RC)
09067     tmp_count = rsbac_list_count(rnetobj_handles.rc);
09068     rsbac_printk(" %lu RC",
09069                    tmp_count);
09070     rnetobj_sum += tmp_count;
09071 #endif
09072     rsbac_printk("\n");
09073     rsbac_printk(KERN_INFO "Sum of %lu Remote NETOBJ items\n",
09074                    rnetobj_sum);
09075     total_sum += rnetobj_sum;
09076 #endif /* NET_OBJ */
09077 
09078     rsbac_printk(KERN_INFO
09079            "Total of %lu registered rsbac-items\n",
09080            total_sum);
09081     
09082     rsbac_printk(KERN_INFO
09083            "adf_request calls: file: %lu, dir: %lu, fifo: %lu, symlink: %lu, dev: %lu, ipc: %lu, scd: %lu, user: %lu, process: %lu, netdev: %lu, nettemp: %lu, netobj: %lu\n",
09084            rsbac_adf_request_count[T_FILE],
09085            rsbac_adf_request_count[T_DIR],
09086            rsbac_adf_request_count[T_FIFO],
09087            rsbac_adf_request_count[T_SYMLINK],
09088            rsbac_adf_request_count[T_DEV],
09089            rsbac_adf_request_count[T_IPC],
09090            rsbac_adf_request_count[T_SCD],
09091            rsbac_adf_request_count[T_USER],
09092            rsbac_adf_request_count[T_PROCESS],
09093            rsbac_adf_request_count[T_NETDEV],
09094            rsbac_adf_request_count[T_NETTEMP],
09095            rsbac_adf_request_count[T_NETOBJ]);
09096     rsbac_printk(KERN_INFO
09097            "adf_set_attr calls: file: %lu, dir: %lu, fifo: %lu, symlink: %lu, dev: %lu, ipc: %lu, scd: %lu, user: %lu, process: %lu, netdev: %lu, nettemp: %lu, netobj: %lu\n",
09098            rsbac_adf_set_attr_count[T_FILE],
09099            rsbac_adf_set_attr_count[T_DIR],
09100            rsbac_adf_set_attr_count[T_FIFO],
09101            rsbac_adf_set_attr_count[T_SYMLINK],
09102            rsbac_adf_set_attr_count[T_DEV],
09103            rsbac_adf_set_attr_count[T_IPC],
09104            rsbac_adf_set_attr_count[T_SCD],
09105            rsbac_adf_set_attr_count[T_USER],
09106            rsbac_adf_set_attr_count[T_PROCESS],
09107            rsbac_adf_set_attr_count[T_NETDEV],
09108            rsbac_adf_set_attr_count[T_NETTEMP],
09109            rsbac_adf_set_attr_count[T_NETOBJ]);
09110 
09111     #if defined(CONFIG_RSBAC_PM)
09112     rsbac_stats_pm();
09113     #endif
09114     #if defined(CONFIG_RSBAC_RC)
09115     rsbac_stats_rc();
09116     #endif
09117     #if defined(CONFIG_RSBAC_AUTH)
09118     rsbac_stats_auth();
09119     #endif
09120     #if defined(CONFIG_RSBAC_ACL)
09121     rsbac_stats_acl();
09122     #endif
09123     return(0);
09124   }

int rsbac_ta_get_attr rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t  tid,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value,
rsbac_boolean_t  inherit
 

Definition at line 12027 of file aci_data_structures.c.

References rsbac_target_id_t::dev, get_attr_dev(), get_attr_fd(), get_attr_ipc(), get_attr_process(), get_attr_user(), RSBAC_EINVALIDPOINTER, RSBAC_EINVALIDTARGET, RSBAC_ENOTINITIALIZED, rsbac_initialized, rsbac_printk(), T_DEV, T_DIR, T_FIFO, T_FILE, T_GROUP, T_IPC, T_NETDEV, T_NETOBJ, T_NETTEMP, T_PROCESS, T_SYMLINK, and T_USER.

Referenced by rsbac_pm(), sys_rsbac_get_attr(), and sys_rsbac_get_attr_n().

12035   {
12036     int err = 0;
12037 
12038     if (!rsbac_initialized)
12039       {
12040         rsbac_printk(KERN_WARNING "rsbac_get_attr(): RSBAC not initialized\n");
12041          return(-RSBAC_ENOTINITIALIZED);
12042       }
12043     if (!value)
12044       return(-RSBAC_EINVALIDPOINTER);
12045     if (in_interrupt())
12046       {
12047         rsbac_printk(KERN_WARNING "rsbac_get_attr(): called from interrupt!\n");
12048       }
12049     #ifdef CONFIG_RSBAC_XSTATS
12050     get_attr_count[target]++;
12051     #endif
12052     switch (target)
12053       {
12054         case T_FILE:
12055         case T_DIR:
12056         case T_FIFO:
12057         case T_SYMLINK:
12058           return get_attr_fd(ta_number, module, target, &tid,
12059                              attr, value, inherit);
12060 
12061         case T_DEV:
12062           return get_attr_dev(ta_number, module, target, tid.dev,
12063                              attr, value, inherit);
12064 
12065         case T_IPC:
12066           return get_attr_ipc(ta_number, module, target, &tid,
12067                              attr, value, inherit);
12068              
12069         case T_USER:
12070           return get_attr_user(ta_number, module, target, &tid,
12071                              attr, value, inherit);
12072             
12073         case T_PROCESS:
12074           return get_attr_process(ta_number, module, target, &tid,
12075                              attr, value, inherit);
12076 
12077 #ifdef CONFIG_RSBAC_UM
12078         case T_GROUP:
12079           return get_attr_group(ta_number, module, target, &tid,
12080                              attr, value, inherit);
12081 #endif /* CONFIG_RSBAC_UM */
12082 
12083 #ifdef CONFIG_RSBAC_NET_DEV
12084         case T_NETDEV:
12085           return get_attr_netdev(ta_number, module, target, &tid,
12086                              attr, value, inherit);
12087 #endif
12088 
12089 #ifdef CONFIG_RSBAC_NET_OBJ
12090         case T_NETTEMP:
12091           return get_attr_nettemp(ta_number, module, target, &tid,
12092                              attr, value, inherit);
12093 
12094         case T_NETOBJ:
12095           return get_attr_netobj(ta_number, module, target, &tid,
12096                              attr, value, inherit);
12097 #endif /* NET_OBJ */
12098 
12099         /* switch target: no valid target */
12100         default:  
12101           return -RSBAC_EINVALIDTARGET;
12102       }
12103 
12104     return err;
12105   }      /* end of rsbac_get_attr() */

int rsbac_ta_list_all_dev rsbac_list_ta_number_t  ta_number,
struct rsbac_dev_desc_t **  id_pp
 

Definition at line 14758 of file aci_data_structures.c.

References D_block, D_block_major, dev_handles, dev_major_handles, NULL, RSBAC_ENOMEM, rsbac_ta_list_count(), rsbac_ta_list_exist(), rsbac_ta_list_get_all_desc(), rsbac_vfree, and rsbac_vmalloc.

Referenced by sys_rsbac_list_all_dev().

14759   {
14760     int count=0;
14761     int tmp_count;
14762 
14763     tmp_count = rsbac_ta_list_count(ta_number, dev_handles.gen);
14764     if(tmp_count > 0)
14765       count += tmp_count;
14766 #if defined(CONFIG_RSBAC_MAC)
14767     tmp_count = rsbac_ta_list_count(ta_number, dev_handles.mac);
14768     if(tmp_count > 0)
14769       count += tmp_count;
14770 #endif
14771 #if defined(CONFIG_RSBAC_PM)
14772     tmp_count = rsbac_ta_list_count(ta_number, dev_handles.pm);
14773     if(tmp_count > 0)
14774       count += tmp_count;
14775 #endif
14776 #if defined(CONFIG_RSBAC_RC)
14777     tmp_count = rsbac_ta_list_count(ta_number, dev_major_handles.rc);
14778     if(tmp_count > 0)
14779       count += tmp_count;
14780     tmp_count = rsbac_ta_list_count(ta_number, dev_handles.rc);
14781     if(tmp_count > 0)
14782       count += tmp_count;
14783 #endif
14784     if(id_pp)
14785       {
14786         struct rsbac_dev_desc_t * i_id_p = NULL;
14787         char * pos = NULL;
14788 #if defined(CONFIG_RSBAC_MAC) || defined(CONFIG_RSBAC_PM) || defined(CONFIG_RSBAC_RC)
14789         u_int i;
14790 #endif
14791 
14792         if(count > 0)
14793           {
14794             int i_count = 0;
14795 
14796             i_count = count + 20; /* max value to expect */
14797             *id_pp = rsbac_vmalloc(i_count * sizeof(**id_pp));
14798             if(!*id_pp)
14799               return -RSBAC_ENOMEM;
14800             pos = (char *) *id_pp;
14801             tmp_count = rsbac_ta_list_get_all_desc(ta_number,
14802                                                    dev_handles.gen,
14803                                                    (void **) &i_id_p);
14804             if(tmp_count > 0)
14805               {
14806                 if(tmp_count > i_count)
14807                   tmp_count = i_count;
14808                 memcpy(pos, i_id_p, tmp_count * sizeof(*i_id_p));
14809                 rsbac_vfree(i_id_p);
14810                 count = tmp_count;
14811                 i_count -= tmp_count;
14812                 pos += tmp_count * sizeof(*i_id_p);
14813               }
14814             else
14815               count = 0;
14816 #if defined(CONFIG_RSBAC_MAC)
14817             if(i_count)
14818               {
14819                 tmp_count = rsbac_ta_list_get_all_desc(ta_number, dev_handles.mac, (void **) &i_id_p);
14820                 if(tmp_count > 0)
14821                   {
14822                     if(tmp_count > i_count)
14823                       tmp_count = i_count;
14824                     for(i=0; i< tmp_count; i++)
14825                       {
14826                         if(!rsbac_ta_list_exist(ta_number, dev_handles.gen, &i_id_p[i]))
14827                           {
14828                             memcpy(pos, &i_id_p[i], sizeof(*i_id_p));
14829                             pos += sizeof(*i_id_p);
14830                             count++;
14831                             i_count--;
14832                           }
14833                       }
14834                     rsbac_vfree(i_id_p);
14835                   }
14836               }
14837 #endif
14838 #if defined(CONFIG_RSBAC_PM)
14839             if(i_count)
14840               {
14841                 tmp_count = rsbac_ta_list_get_all_desc(ta_number, dev_handles.mac, (void **) &i_id_p);
14842                 if(tmp_count > 0)
14843                   {
14844                     if(tmp_count > i_count)
14845                       tmp_count = i_count;
14846                     for(i=0; i< tmp_count; i++)
14847                       {
14848                         if(!rsbac_ta_list_exist(ta_number, dev_handles.gen, &i_id_p[i]))
14849 #if defined(CONFIG_RSBAC_MAC)
14850                         if(!rsbac_ta_list_exist(ta_number, dev_handles.mac, &i_id_p[i]))
14851 #endif
14852                           {
14853                             memcpy(pos, &i_id_p[i], sizeof(*i_id_p));
14854                             pos += sizeof(*i_id_p);
14855                             count++;
14856                             i_count--;
14857                           }
14858                       }
14859                     rsbac_vfree(i_id_p);
14860                   }
14861               }
14862 #endif
14863 #if defined(CONFIG_RSBAC_RC)
14864             if(i_count)
14865               {
14866                 tmp_count = rsbac_ta_list_get_all_desc(ta_number, dev_major_handles.rc, (void **) &i_id_p);
14867                 if(tmp_count > 0)
14868                   {
14869                     if(tmp_count > i_count)
14870                       tmp_count = i_count;
14871                     for(i=0; i< tmp_count; i++)
14872                       {
14873                         i_id_p[i].type += (D_block_major - D_block);
14874                         memcpy(pos, &i_id_p[i], sizeof(*i_id_p));
14875                         pos += sizeof(*i_id_p);
14876                         count++;
14877                         i_count--;
14878                       }
14879                     rsbac_vfree(i_id_p);
14880                   }
14881               }
14882             if(i_count)
14883               {
14884                 tmp_count = rsbac_ta_list_get_all_desc(ta_number, dev_handles.rc, (void **) &i_id_p);
14885                 if(tmp_count > 0)
14886                   {
14887                     if(tmp_count > i_count)
14888                       tmp_count = i_count;
14889                     for(i=0; i< tmp_count; i++)
14890                       {
14891                         if(!rsbac_ta_list_exist(ta_number, dev_handles.gen, &i_id_p[i]))
14892 #if defined(CONFIG_RSBAC_MAC)
14893                         if(!rsbac_ta_list_exist(ta_number, dev_handles.mac, &i_id_p[i]))
14894 #endif
14895 #if defined(CONFIG_RSBAC_PM)
14896                         if(!rsbac_ta_list_exist(ta_number, dev_handles.pm, &i_id_p[i]))
14897 #endif
14898                           {
14899                             memcpy(pos, &i_id_p[i], sizeof(*i_id_p));
14900                             pos += sizeof(*i_id_p);
14901                             count++;
14902                             i_count--;
14903                           }
14904                       }
14905                     rsbac_vfree(i_id_p);
14906                   }
14907               }
14908 #endif
14909             if(!count)
14910               rsbac_vfree(*id_pp);
14911           }
14912       }
14913     return count;
14914   }

int rsbac_ta_list_all_group rsbac_list_ta_number_t  ta_number,
rsbac_gid_t **  id_pp
 

Definition at line 15083 of file aci_data_structures.c.

References NULL, RSBAC_ENOMEM, rsbac_ta_list_count(), rsbac_ta_list_get_all_desc(), rsbac_vfree, and rsbac_vmalloc.

Referenced by sys_rsbac_list_all_group().

15084   {
15085 #if defined(CONFIG_RSBAC_RC_UM_PROT)
15086     int count=0;
15087     int tmp_count;
15088 
15089     tmp_count = rsbac_ta_list_count(ta_number, group_handles.rc);
15090     if(tmp_count > 0)
15091       count += tmp_count;
15092     if(id_pp)
15093       {
15094         if(count > 0)
15095           {
15096             int i_count;
15097             rsbac_gid_t * i_id_p = NULL;
15098 
15099             i_count = count + 20; /* max value to expect */
15100             *id_pp = rsbac_vmalloc(i_count * sizeof(**id_pp));
15101             if(!*id_pp)
15102               return -RSBAC_ENOMEM;
15103             tmp_count = rsbac_ta_list_get_all_desc(ta_number,
15104                                                    group_handles.rc,
15105                                                    (void **) &i_id_p);
15106             if(tmp_count > 0)
15107               {
15108                 if(tmp_count > i_count)
15109                   tmp_count = i_count;
15110                 memcpy(*id_pp, i_id_p, tmp_count * sizeof(*i_id_p));
15111                 rsbac_vfree(i_id_p);
15112                 count = tmp_count;
15113                 i_count -= tmp_count;
15114               }
15115             else
15116               count = 0;
15117             if(!count)
15118               rsbac_vfree(*id_pp);
15119           }
15120       }
15121     return count;
15122 #else
15123     return 0;
15124 #endif
15125   }

int rsbac_ta_list_all_user rsbac_list_ta_number_t  ta_number,
rsbac_uid_t **  id_pp
 

Definition at line 14963 of file aci_data_structures.c.

References copy_new_uids(), NULL, RSBAC_ENOMEM, rsbac_ta_list_count(), rsbac_ta_list_get_all_desc(), rsbac_vfree, rsbac_vmalloc, and user_handles.

Referenced by sys_rsbac_list_all_user().

14964   {
14965     int count=0;
14966     int tmp_count;
14967 
14968     tmp_count = rsbac_ta_list_count(ta_number, user_handles.gen);
14969     if(tmp_count > 0)
14970       count += tmp_count;
14971 #if defined(CONFIG_RSBAC_MAC)
14972     tmp_count = rsbac_ta_list_count(ta_number, user_handles.mac);
14973     if(tmp_count > 0)
14974       count += tmp_count;
14975 #endif
14976 #if defined(CONFIG_RSBAC_PM)
14977     tmp_count = rsbac_ta_list_count(ta_number, user_handles.pm);
14978     if(tmp_count > 0)
14979       count += tmp_count;
14980 #endif
14981 #if defined(CONFIG_RSBAC_DAZ)
14982     tmp_count = rsbac_ta_list_count(ta_number, user_handles.daz);
14983     if(tmp_count > 0)
14984       count += tmp_count;
14985 #endif
14986 #if defined(CONFIG_RSBAC_FF)
14987     tmp_count = rsbac_ta_list_count(ta_number, user_handles.ff);
14988     if(tmp_count > 0)
14989       count += tmp_count;
14990 #endif
14991 #if defined(CONFIG_RSBAC_RC)
14992     tmp_count = rsbac_ta_list_count(ta_number, user_handles.rc);
14993     if(tmp_count > 0)
14994       count += tmp_count;
14995 #endif
14996 #if defined(CONFIG_RSBAC_AUTH)
14997     tmp_count = rsbac_ta_list_count(ta_number, user_handles.auth);
14998     if(tmp_count > 0)
14999       count += tmp_count;
15000 #endif
15001 #if defined(CONFIG_RSBAC_CAP)
15002     tmp_count = rsbac_ta_list_count(ta_number, user_handles.cap);
15003     if(tmp_count > 0)
15004       count += tmp_count;
15005 #endif
15006 #if defined(CONFIG_RSBAC_JAIL)
15007     tmp_count = rsbac_ta_list_count(ta_number, user_handles.jail);
15008     if(tmp_count > 0)
15009       count += tmp_count;
15010 #endif
15011 #if defined(CONFIG_RSBAC_PAX)
15012     tmp_count = rsbac_ta_list_count(ta_number, user_handles.pax);
15013     if(tmp_count > 0)
15014       count += tmp_count;
15015 #endif
15016 #if defined(CONFIG_RSBAC_RES)
15017     tmp_count = rsbac_ta_list_count(ta_number, user_handles.res);
15018     if(tmp_count > 0)
15019       count += tmp_count;
15020 #endif
15021     if(id_pp)
15022       {
15023         if(count > 0)
15024           {
15025             int i_count;
15026             rsbac_uid_t * i_id_p = NULL;
15027 
15028             i_count = count + 20; /* max value to expect */
15029             *id_pp = rsbac_vmalloc(i_count * sizeof(**id_pp));
15030             if(!*id_pp)
15031               return -RSBAC_ENOMEM;
15032             tmp_count = rsbac_ta_list_get_all_desc(ta_number,
15033                                                    user_handles.gen,
15034                                                    (void **) &i_id_p);
15035             if(tmp_count > 0)
15036               {
15037                 if(tmp_count > i_count)
15038                   tmp_count = i_count;
15039                 memcpy(*id_pp, i_id_p, tmp_count * sizeof(*i_id_p));
15040                 rsbac_vfree(i_id_p);
15041                 count = tmp_count;
15042                 i_count -= tmp_count;
15043               }
15044             else
15045               count = 0;
15046 #if defined(CONFIG_RSBAC_MAC)
15047             copy_new_uids(user_handles.mac, ta_number, &count, &i_count, *id_pp);
15048 #endif
15049 #if defined(CONFIG_RSBAC_PM)
15050             copy_new_uids(user_handles.pm, ta_number, &count, &i_count, *id_pp);
15051 #endif
15052 #if defined(CONFIG_RSBAC_DAZ)
15053             copy_new_uids(user_handles.daz, ta_number, &count, &i_count, *id_pp);
15054 #endif
15055 #if defined(CONFIG_RSBAC_FF)
15056             copy_new_uids(user_handles.ff, ta_number, &count, &i_count, *id_pp);
15057 #endif
15058 #if defined(CONFIG_RSBAC_RC)
15059             copy_new_uids(user_handles.rc, ta_number, &count, &i_count, *id_pp);
15060 #endif
15061 #if defined(CONFIG_RSBAC_AUTH)
15062             copy_new_uids(user_handles.auth, ta_number, &count, &i_count, *id_pp);
15063 #endif
15064 #if defined(CONFIG_RSBAC_CAP)
15065             copy_new_uids(user_handles.cap, ta_number, &count, &i_count, *id_pp);
15066 #endif
15067 #if defined(CONFIG_RSBAC_JAIL)
15068             copy_new_uids(user_handles.jail, ta_number, &count, &i_count, *id_pp);
15069 #endif
15070 #if defined(CONFIG_RSBAC_PAX)
15071             copy_new_uids(user_handles.pax, ta_number, &count, &i_count, *id_pp);
15072 #endif
15073 #if defined(CONFIG_RSBAC_RES)
15074             copy_new_uids(user_handles.res, ta_number, &count, &i_count, *id_pp);
15075 #endif
15076             if(!count)
15077               rsbac_vfree(*id_pp);
15078           }
15079       }
15080     return count;
15081   }

int rsbac_ta_remove_target rsbac_list_ta_number_t  ta_number,
enum rsbac_target_t  target,
union rsbac_target_id_t  tid
 

Definition at line 14322 of file aci_data_structures.c.

References D_char, rsbac_target_id_t::dev, dev_handles, device_list_head, gen_fd_hash(), gen_p_hash(), rsbac_target_id_t::group, rsbac_target_id_t::ipc, ipc_handles, lookup_device(), rsbac_target_id_t::netdev, rsbac_target_id_t::netobj, rsbac_target_id_t::nettemp, NULL, rsbac_target_id_t::process, process_handles, rsbac_acl_remove_acl(), rsbac_auth_remove_f_capsets(), rsbac_auth_remove_p_capsets(), RSBAC_EINVALIDDEV, RSBAC_EINVALIDTARGET, RSBAC_ENOTINITIALIZED, rsbac_initialized, rsbac_mac_remove_f_trusets(), rsbac_mac_remove_p_trusets(), rsbac_mount(), rsbac_printk(), rsbac_ta_list_remove(), rsbac_net_obj_desc_t::sock_p, T_DEV, T_DIR, T_FIFO, T_FILE, T_GROUP, T_IPC, T_NETDEV, T_NETOBJ, T_NETTEMP, T_NETTEMP_NT, T_PROCESS, T_SYMLINK, T_USER, rsbac_dev_desc_t::type, rsbac_target_id_t::user, and user_handles.

Referenced by rsbac_pm(), sys_rsbac_remove_target(), and sys_rsbac_remove_target_n().

14326     { 
14327       int error=0;
14328       struct rsbac_device_list_item_t   * device_p;
14329       u_long                              dflags;
14330     
14331       if (!rsbac_initialized)
14332         {
14333           rsbac_printk(KERN_WARNING "rsbac_remove_target(): RSBAC not initialized\n");
14334           return(-RSBAC_ENOTINITIALIZED);
14335         }
14336       if (in_interrupt())
14337         {
14338           rsbac_printk(KERN_WARNING "rsbac_remove_target(): called from interrupt!\n");
14339         }
14340       switch (target)
14341         {
14342           case T_FILE:
14343           case T_DIR:
14344           case T_FIFO:
14345           case T_SYMLINK:
14346 /*
14347 #ifdef CONFIG_RSBAC_DEBUG
14348             if (rsbac_debug_ds)
14349               rsbac_printk(KERN_DEBUG "%s\n",
14350                         "rsbac_remove_target(): Removing file/dir/fifo/symlink ACI");
14351 #endif
14352 */
14353 #if defined(CONFIG_RSBAC_MAC)
14354             /* file and dir items can also have mac_f_trusets -> remove first */
14355             if(   (target == T_FILE)
14356                || (target == T_DIR)
14357               )
14358               error = rsbac_mac_remove_f_trusets(tid.file);
14359 #endif
14360 #if defined(CONFIG_RSBAC_AUTH)
14361             /* file and dir items can also have auth_f_capsets -> remove first */
14362             if(   (target == T_FILE)
14363                || (target == T_DIR)
14364               )
14365               error = rsbac_auth_remove_f_capsets(tid.file);
14366 #endif
14367 #if defined(CONFIG_RSBAC_ACL)
14368             /* items can also have an acl_fd_item -> remove first */
14369             error = rsbac_acl_remove_acl(ta_number, target, tid);
14370 #endif
14371             /* wait for read access to device_list_head */
14372             rsbac_read_lock(&device_list_head.lock, &dflags);
14373             /* OK, go on */
14374 
14375             /* lookup device */
14376             device_p = lookup_device(tid.file.device);
14377             if (!device_p)
14378               {
14379                 struct super_block * sb_p;
14380 
14381                 rsbac_read_unlock(&device_list_head.lock, &dflags);
14382 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
14383                 sb_p = user_get_super(tid.file.device);
14384 #else
14385                 sb_p = get_super(tid.file.device);
14386 #endif
14387                 if(sb_p)
14388                   {
14389                     rsbac_printk(KERN_INFO
14390                            "rsbac_remove_target(): auto-mounting device %02u:%02u\n",
14391                            RSBAC_MAJOR(tid.file.device), RSBAC_MINOR(tid.file.device));
14392                     rsbac_mount(sb_p, NULL);
14393                     /* free super_block pointer */
14394                     drop_super(sb_p);
14395                     rsbac_read_lock(&device_list_head.lock, &dflags);
14396                     device_p = lookup_device(tid.file.device);
14397                     if (!device_p)
14398                       {
14399                         rsbac_printk(KERN_WARNING
14400                                "rsbac_remove_target(): unknown device %02u:%02u\n",
14401                                RSBAC_MAJOR(tid.file.device), RSBAC_MINOR(tid.file.device));
14402                         rsbac_read_unlock(&device_list_head.lock, &dflags);
14403                         return -RSBAC_EINVALIDDEV;
14404                       }
14405                   }
14406                 else
14407                   return -RSBAC_EINVALIDDEV;
14408               }
14409                 rsbac_ta_list_remove(ta_number,
14410                                   device_p->handles.gen[gen_fd_hash(tid.file.inode)],
14411                                   &tid.file.inode);
14412 #if defined(CONFIG_RSBAC_MAC)
14413                 rsbac_ta_list_remove(ta_number,
14414                                   device_p->handles.mac[mac_fd_hash(tid.file.inode)],
14415                                   &tid.file.inode);
14416 #endif
14417 #if defined(CONFIG_RSBAC_PM)
14418                 rsbac_ta_list_remove(ta_number,
14419                                   device_p->handles.pm[pm_fd_hash(tid.file.inode)],
14420                                   &tid.file.inode);
14421 #endif
14422 #if defined(CONFIG_RSBAC_DAZ)
14423                 rsbac_ta_list_remove(ta_number,
14424                                   device_p->handles.daz[daz_fd_hash(tid.file.inode)],
14425                                   &tid.file.inode);
14426 #if defined(CONFIG_RSBAC_DAZ_CACHE)
14427                 rsbac_ta_list_remove(ta_number,
14428                                   device_p->handles.dazs[daz_scanned_fd_hash(tid.file.inode)],
14429                                   &tid.file.inode);
14430 #endif
14431 #endif
14432 #if defined(CONFIG_RSBAC_FF)
14433                 rsbac_ta_list_remove(ta_number,
14434                                   device_p->handles.ff[ff_fd_hash(tid.file.inode)],
14435                                   &tid.file.inode);
14436 #endif
14437 #if defined(CONFIG_RSBAC_RC)
14438                 rsbac_ta_list_remove(ta_number,
14439                                   device_p->handles.rc[rc_fd_hash(tid.file.inode)],
14440                                   &tid.file.inode);
14441 #endif
14442 #if defined(CONFIG_RSBAC_AUTH)
14443                 rsbac_ta_list_remove(ta_number,
14444                                   device_p->handles.auth[auth_fd_hash(tid.file.inode)],
14445                                   &tid.file.inode);
14446 #endif
14447 #if defined(CONFIG_RSBAC_CAP)
14448                 rsbac_ta_list_remove(ta_number,
14449                                   device_p->handles.cap[cap_fd_hash(tid.file.inode)],
14450                                   &tid.file.inode);
14451 #endif
14452 #if defined(CONFIG_RSBAC_PAX)
14453                 rsbac_ta_list_remove(ta_number,
14454                                   device_p->handles.pax[pax_fd_hash(tid.file.inode)],
14455                                   &tid.file.inode);
14456 #endif
14457 #if defined(CONFIG_RSBAC_RES)
14458                 rsbac_ta_list_remove(ta_number,
14459                                   device_p->handles.res[res_fd_hash(tid.file.inode)],
14460                                   &tid.file.inode);
14461 #endif
14462 
14463             /* free access to device_list_head */
14464             rsbac_read_unlock(&device_list_head.lock, &dflags);
14465             break;
14466 
14467           case T_DEV:
14468             {
14469               if(tid.dev.type > D_char)
14470                 return -RSBAC_EINVALIDTARGET;
14471 /*
14472 #ifdef CONFIG_RSBAC_DEBUG
14473               if (rsbac_debug_ds) rsbac_printk(KERN_DEBUG "%s\n",
14474                         "rsbac_remove_target(): Removing dev ACI");
14475 #endif
14476 */
14477               rsbac_ta_list_remove(ta_number,
14478                                   dev_handles.gen,
14479                                 &tid.dev);
14480 #if defined(CONFIG_RSBAC_MAC)
14481               rsbac_ta_list_remove(ta_number,
14482                                   dev_handles.mac,
14483                                 &tid.dev);
14484 #endif
14485 #if defined(CONFIG_RSBAC_PM)
14486               rsbac_ta_list_remove(ta_number,
14487                                   dev_handles.pm,
14488                                 &tid.dev);
14489 #endif
14490 #if defined(CONFIG_RSBAC_RC)
14491               rsbac_ta_list_remove(ta_number,
14492                                   dev_handles.rc,
14493                                 &tid.dev);
14494 #endif
14495             }
14496             break;
14497 
14498           case T_IPC:
14499 /*
14500 #ifdef CONFIG_RSBAC_DEBUG
14501             if (rsbac_debug_ds)
14502               rsbac_printk(KERN_DEBUG
14503                      "rsbac_remove_target(): Removing ipc ACI\n");
14504 #endif
14505 */
14506 #if defined(CONFIG_RSBAC_MAC)
14507             rsbac_ta_list_remove(ta_number,
14508                                   ipc_handles.mac,
14509                               &tid.ipc);
14510 #endif
14511 #if defined(CONFIG_RSBAC_PM)
14512             rsbac_ta_list_remove(ta_number,
14513                                   ipc_handles.pm,
14514                               &tid.ipc);
14515 #endif
14516 #if defined(CONFIG_RSBAC_RC)
14517             rsbac_ta_list_remove(ta_number,
14518                                   ipc_handles.rc,
14519                               &tid.ipc);
14520 #endif
14521 #if defined(CONFIG_RSBAC_JAIL)
14522             rsbac_ta_list_remove(ta_number,
14523                                   ipc_handles.jail,
14524                               &tid.ipc);
14525 #endif
14526             break;
14527 
14528           case T_USER:
14529 /*
14530 #ifdef CONFIG_RSBAC_DEBUG
14531             if (rsbac_debug_ds) rsbac_printk(KERN_DEBUG "%s\n",
14532                         "rsbac_remove_target(): Removing user ACI");
14533 #endif
14534 */
14535             rsbac_ta_list_remove(ta_number,
14536                                   user_handles.gen,
14537                               &tid.user);
14538 #if defined(CONFIG_RSBAC_MAC)
14539             rsbac_ta_list_remove(ta_number,
14540                                   user_handles.mac,
14541                               &tid.user);
14542 #endif
14543 #if defined(CONFIG_RSBAC_PM)
14544             rsbac_ta_list_remove(ta_number,
14545                                   user_handles.pm,
14546                               &tid.user);
14547 #endif
14548 #if defined(CONFIG_RSBAC_DAZ)
14549             rsbac_ta_list_remove(ta_number,
14550                                   user_handles.daz,
14551                               &tid.user);
14552 #endif
14553 #if defined(CONFIG_RSBAC_FF)
14554             rsbac_ta_list_remove(ta_number,
14555                                   user_handles.ff,
14556                               &tid.user);
14557 #endif
14558 #if defined(CONFIG_RSBAC_RC)
14559             rsbac_ta_list_remove(ta_number,
14560                                   user_handles.rc,
14561                               &tid.user);
14562 #endif
14563 #if defined(CONFIG_RSBAC_AUTH)
14564             rsbac_ta_list_remove(ta_number,
14565                                   user_handles.auth,
14566                               &tid.user);
14567 #endif
14568 #if defined(CONFIG_RSBAC_CAP)
14569             rsbac_ta_list_remove(ta_number,
14570                                   user_handles.cap,
14571                               &tid.user);
14572 #endif
14573 #if defined(CONFIG_RSBAC_JAIL)
14574             rsbac_ta_list_remove(ta_number,
14575                                   user_handles.jail,
14576                               &tid.user);
14577 #endif
14578 #if defined(CONFIG_RSBAC_PAX)
14579             rsbac_ta_list_remove(ta_number,
14580                                   user_handles.pax,
14581                               &tid.user);
14582 #endif
14583 #if defined(CONFIG_RSBAC_RES)
14584             rsbac_ta_list_remove(ta_number,
14585                                   user_handles.res,
14586                               &tid.user);
14587 #endif
14588             break;
14589 
14590           case T_PROCESS:
14591 /* too noisy... kicked out.
14592 #ifdef CONFIG_RSBAC_DEBUG
14593             if (rsbac_debug_ds)
14594               rsbac_printk(KERN_DEBUG
14595                      "rsbac_remove_target(): Removing process ACI\n");
14596 #endif
14597 */
14598 #if defined(CONFIG_RSBAC_ACL)
14599             /* process items can also have an acl_p_item -> remove first */
14600             error = rsbac_acl_remove_acl(ta_number, target, tid);
14601 #endif
14602             rsbac_ta_list_remove(ta_number,
14603                                   process_handles.gen[gen_p_hash(tid.process)],
14604                               &tid.process);
14605 #if defined(CONFIG_RSBAC_MAC)
14606             /* process items can also have mac_p_trusets -> remove first */
14607             error = rsbac_mac_remove_p_trusets(tid.process);
14608             rsbac_ta_list_remove(ta_number,
14609                                   process_handles.mac[mac_p_hash(tid.process)],
14610                               &tid.process);
14611 #endif
14612 #if defined(CONFIG_RSBAC_PM)
14613             rsbac_ta_list_remove(ta_number,
14614                                   process_handles.pm,
14615                               &tid.process);
14616 #endif
14617 #if defined(CONFIG_RSBAC_DAZ)
14618             rsbac_ta_list_remove(ta_number,
14619                                   process_handles.daz,
14620                               &tid.process);
14621 #endif
14622 #if defined(CONFIG_RSBAC_RC)
14623             rsbac_ta_list_remove(ta_number,
14624                                   process_handles.rc[rc_p_hash(tid.process)],
14625                               &tid.process);
14626 #endif
14627 #if defined(CONFIG_RSBAC_AUTH)
14628             /* process items can also have auth_p_capsets -> remove first */
14629             error = rsbac_auth_remove_p_capsets(tid.process);
14630             rsbac_ta_list_remove(ta_number,
14631                                   process_handles.auth,
14632                               &tid.process);
14633 #endif
14634 #if defined(CONFIG_RSBAC_CAP)
14635             rsbac_ta_list_remove(ta_number,
14636                                   process_handles.cap,
14637                               &tid.process);
14638 #endif
14639 #if defined(CONFIG_RSBAC_JAIL)
14640             rsbac_ta_list_remove(ta_number,
14641                                   process_handles.jail[jail_p_hash(tid.process)],
14642                               &tid.process);
14643 #endif
14644             break;
14645 
14646 #ifdef CONFIG_RSBAC_UM
14647           case T_GROUP:
14648 /*
14649 #ifdef CONFIG_RSBAC_DEBUG
14650             if (rsbac_debug_ds)
14651               rsbac_printk(KERN_DEBUG
14652                      "rsbac_remove_target(): Removing group ACI\n");
14653 #endif
14654 */
14655 #if defined(CONFIG_RSBAC_RC_UM_PROT)
14656             rsbac_ta_list_remove(ta_number,
14657                                   group_handles.rc,
14658                               &tid.group);
14659 #endif
14660             break;
14661 #endif /* CONFIG_RSBAC_UM */
14662 
14663 #ifdef CONFIG_RSBAC_NET_DEV
14664           case T_NETDEV:
14665 #if defined(CONFIG_RSBAC_IND_NETDEV_LOG)
14666             rsbac_ta_list_remove(ta_number,
14667                                   netdev_handles.gen,
14668                               &tid.netdev);
14669 #endif
14670 #if defined(CONFIG_RSBAC_RC)
14671             rsbac_ta_list_remove(ta_number,
14672                                   netdev_handles.rc,
14673                               &tid.netdev);
14674 #endif
14675             break;
14676 #endif
14677 
14678 #ifdef CONFIG_RSBAC_NET_OBJ
14679           case T_NETTEMP:
14680 /* too noisy... kicked out.
14681 #ifdef CONFIG_RSBAC_DEBUG
14682             if (rsbac_debug_ds)
14683               rsbac_printk(KERN_DEBUG
14684                      "rsbac_remove_target(): Removing nettemp ACI\n");
14685 #endif
14686 */
14687 #if defined(CONFIG_RSBAC_IND_NETOBJ_LOG)
14688             rsbac_ta_list_remove(ta_number,
14689                                   nettemp_handles.gen,
14690                               &tid.nettemp);
14691 #endif
14692 #if defined(CONFIG_RSBAC_MAC)
14693             rsbac_ta_list_remove(ta_number,
14694                                   nettemp_handles.mac,
14695                               &tid.nettemp);
14696 #endif
14697 #if defined(CONFIG_RSBAC_PM)
14698             rsbac_ta_list_remove(ta_number,
14699                                   nettemp_handles.pm,
14700                               &tid.nettemp);
14701 #endif
14702 #if defined(CONFIG_RSBAC_RC)
14703             rsbac_ta_list_remove(ta_number,
14704                                   nettemp_handles.rc,
14705                               &tid.nettemp);
14706 #endif
14707 #if defined(CONFIG_RSBAC_ACL_NET_OBJ_PROT)
14708             rsbac_acl_remove_acl(ta_number, T_NETTEMP_NT, tid);
14709             rsbac_acl_remove_acl(ta_number, T_NETTEMP, tid);
14710 #endif
14711             break;
14712 
14713           case T_NETOBJ:
14714 /* too noisy... kicked out.
14715 #ifdef CONFIG_RSBAC_DEBUG
14716             if (rsbac_debug_ds)
14717               rsbac_printk(KERN_DEBUG
14718                      "rsbac_remove_target(): Removing netobj ACI\n");
14719 #endif
14720 */
14721 #if defined(CONFIG_RSBAC_MAC)
14722             rsbac_ta_list_remove(ta_number,
14723                                   lnetobj_handles.mac,
14724                               &tid.netobj.sock_p);
14725             rsbac_ta_list_remove(ta_number,
14726                                   rnetobj_handles.mac,
14727                               &tid.netobj.sock_p);
14728 #endif
14729 #if defined(CONFIG_RSBAC_PM)
14730             rsbac_ta_list_remove(ta_number,
14731                                  lnetobj_handles.pm,
14732                                  &tid.netobj.sock_p);
14733             rsbac_ta_list_remove(ta_number,
14734                                  rnetobj_handles.pm,
14735                                  &tid.netobj.sock_p);
14736 #endif
14737 #if defined(CONFIG_RSBAC_RC)
14738             rsbac_ta_list_remove(ta_number,
14739                                  lnetobj_handles.rc,
14740                                  &tid.netobj.sock_p);
14741             rsbac_ta_list_remove(ta_number,
14742                                  rnetobj_handles.rc,
14743                                  &tid.netobj.sock_p);
14744 #endif
14745             break;
14746 
14747 #endif /* NET_OBJ */
14748 
14749           default:
14750             return(-RSBAC_EINVALIDTARGET);          
14751         }
14752       #ifdef CONFIG_RSBAC_XSTATS
14753       remove_count[target]++;
14754       #endif
14755       return(error);
14756     } /* end of rsbac_remove_target() */

int rsbac_ta_set_attr rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t  tid,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t  value
 

Definition at line 14239 of file aci_data_structures.c.

References rsbac_target_id_t::dev, RSBAC_EINVALIDTARGET, RSBAC_ENOTINITIALIZED, rsbac_initialized, rsbac_printk(), set_attr_dev(), set_attr_fd(), set_attr_ipc(), set_attr_process(), set_attr_user(), T_DEV, T_DIR, T_FIFO, T_FILE, T_GROUP, T_IPC, T_NETDEV, T_NETOBJ, T_NETTEMP, T_PROCESS, T_SYMLINK, and T_USER.

Referenced by rsbac_pm(), sys_rsbac_set_attr(), and sys_rsbac_set_attr_n().

14246     { 
14247       int err = 0;
14248 /*
14249 #ifdef CONFIG_RSBAC_DEBUG
14250       char tmp[RSBAC_MAXNAMELEN];
14251 #endif
14252 */   
14253       if (!rsbac_initialized)
14254         {
14255           rsbac_printk(KERN_WARNING "rsbac_set_attr(): RSBAC not initialized\n");
14256           return(-RSBAC_ENOTINITIALIZED);
14257         }
14258       if (in_interrupt())
14259         {
14260           rsbac_printk(KERN_WARNING "rsbac_set_attr(): called from interrupt!\n");
14261         }
14262       switch (target)
14263         {
14264           case T_FILE:
14265           case T_DIR:
14266           case T_FIFO:
14267           case T_SYMLINK:
14268             err = set_attr_fd(ta_number, module, target, &tid, attr, &value);
14269             break;
14270            
14271           case T_DEV:
14272             err = set_attr_dev(ta_number, module, target, tid.dev, attr, &value);
14273             break;
14274 
14275           case T_IPC:
14276             err = set_attr_ipc(ta_number, module, target, &tid, attr, &value);
14277             break;
14278             
14279           case T_USER:
14280             err = set_attr_user(ta_number, module, target, &tid, attr, &value);
14281             break;
14282             
14283           case T_PROCESS:
14284             err = set_attr_process(ta_number, module, target, &tid, attr, &value);
14285             break;
14286 
14287 #ifdef CONFIG_RSBAC_UM
14288           case T_GROUP:
14289             err = set_attr_group(ta_number, module, target, &tid, attr, &value);
14290             break;
14291 #endif /* CONFIG_RSBAC_UM */
14292 
14293 #ifdef CONFIG_RSBAC_NET_DEV
14294           case T_NETDEV:
14295             err = set_attr_netdev(ta_number, module, target, &tid, attr, &value);
14296             break;
14297 #endif
14298 
14299 #ifdef CONFIG_RSBAC_NET_OBJ
14300           case T_NETTEMP:
14301             err = set_attr_nettemp(ta_number, module, target, &tid, attr, &value);
14302             break;
14303 
14304           case T_NETOBJ:
14305             err = set_attr_netobj(ta_number, module, target, &tid, attr, &value);
14306             break;
14307 #endif /* NET_OBJ */
14308 
14309           /* switch(target): no valid target */
14310           default:  
14311             return(-RSBAC_EINVALIDTARGET);          
14312         }
14313       #ifdef CONFIG_RSBAC_XSTATS
14314       if(!err)
14315         set_attr_count[target]++;
14316       #endif
14317       return(err);
14318     }      /* end of rsbac_set_attr() */

int rsbac_umount struct super_block *  sb_p,
struct dentry *  d_covers
 

Definition at line 8456 of file aci_data_structures.c.

References device_list_head, lookup_device(), NULL, remove_device_item(), rsbac_debug_no_write, RSBAC_EINVALIDPOINTER, RSBAC_ENOTINITIALIZED, rsbac_initialized, rsbac_list_umount(), rsbac_printk(), rsbac_umount_acl(), rsbac_umount_auth(), rsbac_umount_mac(), rsbac_umount_reg(), rsbac_write(), rsbac_write_sem, sysfs_covered_p, SYSFS_MAGIC, sysfs_sb_p, and TRUE.

Referenced by rsbac_aef_sb_umount().

08457   {
08458     u_long flags;
08459     struct rsbac_device_list_item_t * device_p;
08460     kdev_t kdev;
08461 
08462     if(!sb_p)
08463       {
08464         rsbac_printk(KERN_WARNING
08465                "rsbac_umount(): called with NULL pointer\n");
08466         return -RSBAC_EINVALIDPOINTER;
08467       }
08468     if (!rsbac_initialized)
08469       {
08470         rsbac_printk(KERN_WARNING "rsbac_umount(): RSBAC not initialized\n");
08471 
08472 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
08473         if(   (sb_p->s_magic == SYSFS_MAGIC)
08474            && !RSBAC_MAJOR(sb_p->s_dev)
08475            && sysfs_sb_p
08476            && sysfs_covered_p
08477           )
08478           {
08479             rsbac_printk(KERN_WARNING
08480                    "rsbac_umount(): sysfs umount detected, removing auto-mount values\n");
08481             sysfs_sb_p = NULL;
08482             sysfs_covered_p = NULL;
08483           }
08484 #endif
08485         #ifdef CONFIG_DEVFS_MOUNT
08486         if(   (sb_p->s_magic == DEVFS_SUPER_MAGIC)
08487            && !RSBAC_MAJOR(sb_p->s_dev)
08488            && devfs_sb_p
08489            && devfs_covered_p
08490           )
08491           {
08492             rsbac_printk(KERN_WARNING
08493                    "rsbac_umount(): devfs umount detected, removing auto-mount values\n");
08494             devfs_sb_p = NULL;
08495             devfs_covered_p = NULL;
08496           }
08497         #endif
08498 
08499         return(-RSBAC_ENOTINITIALIZED);
08500       }
08501 
08502 #ifdef CONFIG_RSBAC_DEBUG
08503     if (rsbac_debug_ds)
08504       {
08505         rsbac_printk(KERN_DEBUG "rsbac_umount(): umounting device %02u:%02u\n",
08506                MAJOR(sb_p->s_dev), MINOR(sb_p->s_dev));
08507       }
08508 #endif
08509 
08510     kdev = sb_p->s_dev;
08511 
08512     /* sync attribute lists */
08513 #if defined(CONFIG_RSBAC_AUTO_WRITE)
08514     if(!rsbac_debug_no_write)
08515       {
08516         down(&rsbac_write_sem);
08517         /* recheck no_write with lock - might have been set in between */
08518         if(!rsbac_debug_no_write)
08519           {
08520             rsbac_write(TRUE);
08521           }
08522         up(&rsbac_write_sem);
08523       }
08524 #endif /* CONFIG_RSBAC_AUTO_WRITE */
08525     /* call other umount functions */
08526     /****** MAC *******/
08527     #if defined(CONFIG_RSBAC_MAC)
08528     rsbac_umount_mac(kdev);
08529     #endif
08530     /****** AUTH *******/
08531     #if defined(CONFIG_RSBAC_AUTH)
08532     rsbac_umount_auth(kdev);
08533     #endif
08534     /****** ACL *******/
08535     #if defined(CONFIG_RSBAC_ACL)
08536     rsbac_umount_acl(kdev);
08537     #endif
08538     /****** REG *******/
08539     #if defined(CONFIG_RSBAC_REG)
08540     rsbac_umount_reg(kdev);
08541     #endif  /* REG */
08542 
08543     /* wait for write access to device_list_head */
08544     rsbac_write_lock(&device_list_head.lock, &flags);
08545     /* OK, nobody else is working on it... */
08546     device_p = lookup_device(kdev);
08547     if(device_p)
08548       {
08549         if(device_p->mount_count == 1)
08550           {
08551             /* Generic lists */
08552             rsbac_list_umount(kdev);
08553             remove_device_item(kdev);
08554           }
08555         else
08556           {
08557             if(device_p->mount_count > 1)
08558               {
08559                 device_p->mount_count--;
08560                 if(device_p->d_covers == d_covers)
08561                   {
08562                     rsbac_printk(KERN_WARNING "rsbac_umount: removed primary mount for device %02u:%02u, inheritance broken!\n",
08563                            RSBAC_MAJOR(kdev), RSBAC_MINOR(kdev));
08564                     device_p->d_covers = NULL;
08565                   }
08566               }
08567             else
08568               {
08569                 rsbac_printk(KERN_WARNING "rsbac_umount: device %02u:%02u has mount_count < 1!\n",
08570                        RSBAC_MAJOR(kdev), RSBAC_MINOR(kdev));
08571               }
08572           }
08573       }
08574     /* allow access */
08575     rsbac_write_unlock(&device_list_head.lock, &flags);
08576 
08577     return(0);
08578   }

void rsbac_write_close struct file *  file_p  ) 
 

Definition at line 2659 of file aci_data_structures.c.

References rsbac_read_close().

Referenced by rsbac_list_write_buffers(), rsbac_list_write_lol_buffers(), and write_info().

02660   {
02661     rsbac_read_close(file_p);
02662   }

int rsbac_write_open char *  name,
struct file *  file_p,
kdev_t  kdev
 

Definition at line 2273 of file aci_data_structures.c.

References check_parent, init_private_file(), lookup_aci_path_dentry(), NULL, rsbac_clear_file(), RSBAC_EINVALIDDEV, RSBAC_EINVALIDPOINTER, RSBAC_ENOMEM, RSBAC_ENOTWRITABLE, RSBAC_EWRITEFAILED, rsbac_get_super_block(), rsbac_kfree(), rsbac_kmalloc(), rsbac_lookup_one_len(), RSBAC_MAXNAMELEN, rsbac_printk(), TRUE, and writable().

Referenced by rsbac_list_write_buffers(), rsbac_list_write_lol_buffers(), and write_info().

02276   {
02277     struct dentry                   * dir_dentry_p = NULL;
02278     struct dentry                   * ldir_dentry_p = NULL;
02279     struct dentry                   * file_dentry_p = NULL;
02280     int                               err = 0;
02281     int                               tmperr = 0;
02282     struct super_block              * sb_p;
02283     
02284         if(!file_p || !name)
02285           {
02286 #ifdef CONFIG_RSBAC_DEBUG
02287             if (rsbac_debug_write)
02288               {
02289                 rsbac_printk(KERN_DEBUG "rsbac_write_open(): called with NULL pointer!\n");
02290               }
02291 #endif
02292             return(-RSBAC_EINVALIDPOINTER);
02293           }
02294 
02295         /* get super_block-pointer */
02296         sb_p = rsbac_get_super_block(kdev);
02297         if (!sb_p)
02298           {
02299             rsbac_printk(KERN_WARNING
02300                    "rsbac_write_open(): invalid device %02u:%02u\n",
02301                    RSBAC_MAJOR(kdev), RSBAC_MINOR(kdev));
02302             return (-RSBAC_EINVALIDDEV);
02303           }
02304         if(!writable(sb_p))
02305           {
02306 #ifdef CONFIG_RSBAC_DEBUG
02307             if (rsbac_debug_write)
02308               {
02309                 rsbac_printk(KERN_DEBUG
02310                        "rsbac_write_open(): called for non-writable device\n");
02311               }
02312 #endif
02313             err = -RSBAC_ENOTWRITABLE;
02314             goto out;
02315           }
02316           
02317         /* lookup dentry of ACI_PATH on this device (create, if needed and possible),
02318          * returns errorcode, if failed */
02319         if ((tmperr = lookup_aci_path_dentry(sb_p, &dir_dentry_p, TRUE,
02320                                              kdev)))
02321           {
02322             err = tmperr;
02323             goto out;
02324           }
02325 
02326         /* open file for reading - this must be done 'by hand', because     */
02327         /* standard system calls are now extended by rsbac decision calls.  */
02328         file_dentry_p = rsbac_lookup_one_len(name, dir_dentry_p, strlen(name));
02329         if (!file_dentry_p || IS_ERR(file_dentry_p))
02330           {
02331 #ifdef CONFIG_RSBAC_DEBUG
02332             if (rsbac_debug_write)
02333               {
02334                 rsbac_printk(KERN_DEBUG
02335                        "rsbac_write_open(): lookup of %s returned error %li\n",
02336                        name, PTR_ERR(file_dentry_p));
02337               }
02338 #endif
02339             err = -RSBAC_EWRITEFAILED;
02340             goto out;
02341           }
02342 
02343 #if 1
02344         if (file_dentry_p->d_inode)
02345           { /* file was found: try to rename it as backup file */
02346             if (   !dir_dentry_p->d_inode->i_op
02347                 || !dir_dentry_p->d_inode->i_op->rename)
02348               {
02349                 rsbac_printk(KERN_WARNING
02350                        "rsbac_write_open(): File system supports no rename - no backup of %s made!",
02351                        name);
02352               }
02353             else
02354               {
02355                 char * bname;
02356                 int  name_len = strlen(name);
02357                 struct dentry * new_file_dentry_p = NULL;
02358                 struct dentry * old_dir_p, * new_dir_p;
02359 
02360                 bname = rsbac_kmalloc(RSBAC_MAXNAMELEN);
02361                 if(!bname)
02362                   {
02363                     err = -RSBAC_ENOMEM;
02364                     goto out_dput;
02365                   }
02366                 strcpy(bname,name);
02367                 bname[name_len] = 'b';
02368                 bname[name_len+1] = (char) 0;
02369                 new_file_dentry_p = rsbac_lookup_one_len(bname, dir_dentry_p, strlen(bname));
02370                 if(new_file_dentry_p && !IS_ERR(new_file_dentry_p))
02371                   {
02372                     /* lock parent == rsbac-dir for rest of rename */
02373                     old_dir_p = dget(file_dentry_p->d_parent);
02374                     new_dir_p = dget(new_file_dentry_p->d_parent);
02375                     double_lock(new_dir_p, old_dir_p);
02376 
02377                     DQUOT_INIT(old_dir_p->d_inode);
02378                     DQUOT_INIT(new_dir_p->d_inode);
02379                     /* try to rename file in rsbac dir */
02380                     /* if (rsbac_debug_write)
02381                      * rsbac_printk(KERN_DEBUG "rsbac_write_open(): calling rename function\n");
02382                      */
02383                     err = dir_dentry_p->d_inode->i_op->rename(old_dir_p->d_inode,
02384                                                               file_dentry_p,
02385                                                               new_dir_p->d_inode,
02386                                                               new_file_dentry_p);
02387                     /* unlock dir (dputs both dentries) */
02388                     double_unlock(new_dir_p, old_dir_p);
02389                     if(err)
02390                       {
02391                         rsbac_printk(KERN_WARNING
02392                                "rsbac_write_open(): could not rename %s to %s on dev %02u:%02u, error %i - no backup!\n",
02393                                name,bname, RSBAC_MAJOR(kdev),RSBAC_MINOR(kdev), err);
02394                       }
02395                     else
02396                       {
02397                         /* The following d_move() should become unconditional */
02398                         if (!(sb_p->s_type->fs_flags & FS_ODD_RENAME))
02399                           d_move(file_dentry_p, new_file_dentry_p);
02400                         inode_dir_notify(old_dir_p->d_inode, DN_RENAME);
02401                       }
02402                     dput(new_file_dentry_p);
02403                     dput(file_dentry_p);
02404                     /* re-init dentry structure */
02405                     file_dentry_p = rsbac_lookup_one_len(name, dir_dentry_p, strlen(name));
02406                     if (!file_dentry_p || IS_ERR (file_dentry_p))
02407                       {
02408 #ifdef CONFIG_RSBAC_DEBUG
02409                         if (rsbac_debug_write)
02410                           {
02411                             rsbac_printk(KERN_DEBUG
02412                                    "rsbac_write_open(): relookup of %s returned error %li\n",
02413                                    name, PTR_ERR(file_dentry_p));
02414                           }
02415 #endif
02416                         err = -RSBAC_EWRITEFAILED;
02417                         goto out;
02418                       }
02419                     if (file_dentry_p->d_inode)
02420                       {
02421                         rsbac_printk(KERN_WARNING
02422                                "rsbac_write_open(): relookup of %s returned dentry with existing inode %li, trying unlink\n",
02423                                name, file_dentry_p->d_inode->i_ino);
02424                         /* file was found: try to delete it */
02425                         if (   !dir_dentry_p->d_inode->i_op
02426                             || !dir_dentry_p->d_inode->i_op->unlink)
02427                           {
02428                             rsbac_printk(KERN_WARNING
02429                                    "rsbac_write_open(): File system supports no unlink - %s not deleted!",
02430                                    name);
02431                             rsbac_kfree(bname);
02432                             err = -RSBAC_EWRITEFAILED;
02433                             goto out_dput;
02434                           }
02435                         else
02436                           {
02437                             old_dir_p = lock_parent(file_dentry_p);
02438 
02439                             DQUOT_INIT(old_dir_p->d_inode);
02440                             err = -ENOENT;
02441 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
02442                             if (check_parent(old_dir_p, file_dentry_p))
02443                               {
02444 #endif
02445                                 err = dir_dentry_p->d_inode->i_op->unlink(old_dir_p->d_inode,
02446                                                                           file_dentry_p);
02447 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
02448                               }
02449                             else
02450                               {
02451                                 rsbac_printk(KERN_WARNING
02452                                        "rsbac_write_open(): could not unlink %s on dev %02u:%02u, parent check failed!\n",
02453                                        name, RSBAC_MAJOR(kdev),RSBAC_MINOR(kdev));
02454                               }
02455 #endif
02456                             /* unlock parent dir */
02457                             unlock_dir(old_dir_p);
02458                             /* free file dentry */
02459                             dput(file_dentry_p);
02460                             if(err)
02461                               {
02462                                 rsbac_printk(KERN_WARNING
02463                                        "rsbac_write_open(): could not unlink %s on dev %02u:%02u, error %i!\n",
02464                                        name, RSBAC_MAJOR(kdev),RSBAC_MINOR(kdev), err);
02465                               }
02466                             /* re-init dentry structure */
02467                             file_dentry_p = rsbac_lookup_one_len(name, dir_dentry_p, strlen(name));
02468                             if (!file_dentry_p || IS_ERR (file_dentry_p))
02469                               {
02470 #ifdef CONFIG_RSBAC_DEBUG
02471                                 if (rsbac_debug_write)
02472                                   {
02473                                     rsbac_printk(KERN_DEBUG
02474                                            "rsbac_write_open(): relookup of %s returned error %li\n",
02475                                            name, PTR_ERR(file_dentry_p));
02476                                   }
02477 #endif
02478                                 rsbac_kfree(bname);
02479                                 err = -RSBAC_EWRITEFAILED;
02480                                 goto out;
02481                               }
02482                             if (file_dentry_p->d_inode)
02483                               {
02484                                 rsbac_printk(KERN_WARNING
02485                                        "rsbac_write_open(): relookup of %s returned dentry with existing inode %li\n",
02486                                        name, file_dentry_p->d_inode->i_ino);
02487                                 rsbac_kfree(bname);
02488                                 err = -RSBAC_EWRITEFAILED;
02489                                 goto out_dput;
02490                               }
02491                           }
02492                       }
02493                   }
02494                 else
02495                   {
02496                     rsbac_printk(KERN_WARNING
02497                            "rsbac_write_open(): rsbac_lookup_(dentry|one) for backup file %s on dev %02u:%02u failed with error %li - no backup!\n",
02498                            bname, RSBAC_MAJOR(kdev),RSBAC_MINOR(kdev), PTR_ERR(new_file_dentry_p));
02499                   }
02500                 rsbac_kfree(bname);
02501               }
02502           }
02503 #endif /* backup part */
02504 
02505         if(!file_dentry_p->d_inode)
02506           {
02507             /* file not found or renamed away: try to create a new one */
02508             if (   !dir_dentry_p->d_inode->i_op
02509                 || !dir_dentry_p->d_inode->i_op->create)
02510               {
02511                 rsbac_printk(KERN_WARNING "%s\n",
02512                        "rsbac_write_open(): File system supports no create!");
02513                        err = -RSBAC_EWRITEFAILED;
02514                        goto out_dput;
02515               }
02516 
02517             /* lock parent == rsbac-dir for create */
02518             ldir_dentry_p = lock_parent(file_dentry_p);
02519             if(IS_ERR(ldir_dentry_p))
02520               {
02521 #ifdef CONFIG_RSBAC_DEBUG
02522                 if (rsbac_debug_write)
02523                   {
02524                     rsbac_printk(KERN_DEBUG
02525                            "rsbac_write_open(): lock_parent of %s returned error %li\n",
02526                            name, PTR_ERR(ldir_dentry_p));
02527                   }
02528 #endif
02529                 err = -RSBAC_EWRITEFAILED;
02530                 goto out_dput;
02531               }
02532 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
02533             if (!check_parent(ldir_dentry_p, file_dentry_p))
02534               {
02535 #ifdef CONFIG_RSBAC_DEBUG
02536                 if (rsbac_debug_write)
02537                   {
02538                     rsbac_printk(KERN_DEBUG
02539                            "rsbac_write_open(): check_parent of %s returned error\n",
02540                            name);
02541                   }
02542 #endif
02543                 unlock_dir(ldir_dentry_p);
02544                 err = -RSBAC_EWRITEFAILED;
02545                 goto out_dput;
02546               }
02547 #endif
02548             /* try to create file in rsbac dir */
02549             /* if (rsbac_debug_write)
02550              *   rsbac_printk(KERN_DEBUG "%s\n",
02551              *          "rsbac_write_open(): calling create function");
02552              */
02553             DQUOT_INIT(ldir_dentry_p->d_inode);
02554 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
02555             err = dir_dentry_p->d_inode->i_op->create(ldir_dentry_p->d_inode,
02556                                                       file_dentry_p,
02557                                                       RSBAC_ACI_FILE_MODE,
02558                                                       NULL);
02559 #else
02560             err = dir_dentry_p->d_inode->i_op->create(ldir_dentry_p->d_inode,
02561                                                       file_dentry_p,
02562                                                       RSBAC_ACI_FILE_MODE);
02563 #endif
02564             unlock_dir(ldir_dentry_p);
02565 
02566             if (err)
02567               {
02568                 goto out_dput;
02569               }
02570             /* create was successful */
02571           }
02572 
02573         if ( !(S_ISREG(file_dentry_p->d_inode->i_mode)) )
02574           { /* this is not a file! -> error! */
02575             rsbac_printk(KERN_WARNING
02576                    "rsbac_write_open(): expected file is not a file, mode is %o!\n",
02577                    file_dentry_p->d_inode->i_mode);
02578             err = -RSBAC_EWRITEFAILED;
02579             goto out_dput;
02580           }
02581         /* Now we fill the file structure and */
02582         /* if there is an open func for this file, use it, otherwise ignore */
02583         if ((tmperr = init_private_file(file_p, file_dentry_p,O_RDONLY)))
02584           {
02585             rsbac_printk(KERN_WARNING "rsbac_write_open(): could not init file!\n");
02586             err = -RSBAC_EWRITEFAILED;
02587             goto out_dput;
02588           }
02589 
02590         /* Without a write function we get into troubles -> error */
02591         if ((!file_p->f_op) || (!file_p->f_op->write))
02592           {
02593             rsbac_printk(KERN_WARNING
02594                    "rsbac_write_open(): file write function missing!\n");
02595             if(file_p->f_op && file_p->f_op->release)
02596               {
02597                   file_p->f_op->release(file_dentry_p->d_inode, file_p);
02598               }
02599             err = -RSBAC_EWRITEFAILED;
02600             goto out_dput;
02601           }
02602 
02603         /* trying to get write access                                   */
02604         /* if (rsbac_debug_write)
02605          *   rsbac_printk(KERN_DEBUG "rsbac_write_open(): trying to get write access!\n");
02606          */
02607         if (get_write_access(file_dentry_p->d_inode))
02608           {
02609             rsbac_printk(KERN_WARNING
02610                    "rsbac_write_open(): could not get write access!\n");
02611             if (file_p->f_op->release)
02612               file_p->f_op->release(file_dentry_p->d_inode, file_p);
02613             err = -RSBAC_EWRITEFAILED;
02614             goto out_dput;
02615           }
02616         /* truncating */
02617         if(rsbac_clear_file(file_dentry_p))
02618           {
02619             if (file_p->f_op->release)
02620               file_p->f_op->release(file_dentry_p->d_inode, file_p);
02621             put_write_access(file_dentry_p->d_inode);
02622             rsbac_printk(KERN_WARNING
02623                    "rsbac_write_open(): could not truncate!\n");
02624             err = -RSBAC_EWRITEFAILED;
02625             goto out_dput;
02626           }
02627     /* set synchronous mode for this file */
02628     file_p->f_flags |= O_SYNC;
02629 
02630 out:
02631     return err;
02632 
02633 out_dput:
02634     dput(file_dentry_p);
02635     goto out;
02636   }

static int set_attr_dev rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
struct rsbac_dev_desc_t  dev,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value_p
[static]
 

Definition at line 12547 of file aci_data_structures.c.

References A_log_array_high, A_log_array_low, A_mac_categories, A_mac_check, A_pm_object_class, A_pm_object_type, A_rc_type, A_security_level, D_block, D_block_major, D_char, D_char_major, DEFAULT_GEN_DEV_ACI, dev_handles, dev_major_handles, GEN, handle, rsbac_attribute_value_t::log_array_high, rsbac_gen_dev_aci_t::log_array_high, rsbac_attribute_value_t::log_array_low, rsbac_gen_dev_aci_t::log_array_low, MAC, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_check, rsbac_dev_desc_t::major, rsbac_dev_desc_t::minor, NULL, PM, rsbac_attribute_value_t::pm_object_class, rsbac_attribute_value_t::pm_object_type, RC, rsbac_attribute_value_t::rc_type, RC_type_max_value, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, RSBAC_EINVALIDTARGET, RSBAC_EINVALIDVALUE, rsbac_ta_list_add_ttl(), rsbac_ta_list_get_data_ttl(), rsbac_attribute_value_t::security_level, and rsbac_dev_desc_t::type.

Referenced by rsbac_ta_set_attr().

12554     { 
12555       int err = 0;
12556 
12557 /*
12558 #ifdef CONFIG_RSBAC_DEBUG
12559       if (rsbac_debug_ds)
12560         rsbac_printk(KERN_DEBUG
12561                "rsbac_set_attr(): Setting dev attribute\n");
12562 #endif
12563 */
12564       switch(module)
12565         {
12566           case GEN:
12567             {
12568               struct rsbac_gen_dev_aci_t aci = DEFAULT_GEN_DEV_ACI;
12569 
12570               if(dev.type > D_char)
12571                 return -RSBAC_EINVALIDTARGET;
12572               rsbac_ta_list_get_data_ttl(ta_number,
12573                                   dev_handles.gen,
12574                                   NULL,
12575                                   &dev,
12576                                   &aci);
12577               switch (attr)
12578                 {
12579                   case A_log_array_low:
12580                     aci.log_array_low = value_p->log_array_low;
12581                     break;
12582                   case A_log_array_high:
12583                     aci.log_array_high = value_p->log_array_high;
12584                     break;
12585                   default:
12586                     err = -RSBAC_EINVALIDATTR;
12587                 }
12588               if(!err)
12589                 {
12590                   err = rsbac_ta_list_add_ttl(ta_number,
12591                                        dev_handles.gen,
12592                                        0,
12593                                        &dev,
12594                                        &aci);
12595                 }
12596             }
12597             break;
12598 
12599 #if defined(CONFIG_RSBAC_MAC)
12600           case MAC:
12601             {
12602               struct rsbac_mac_dev_aci_t aci = DEFAULT_MAC_DEV_ACI;
12603 
12604               if(dev.type > D_char)
12605                 return -RSBAC_EINVALIDTARGET;
12606               rsbac_ta_list_get_data_ttl(ta_number,
12607                                   dev_handles.mac,
12608                                   NULL,
12609                                   &dev,
12610                                   &aci);
12611               switch (attr)
12612                 {
12613                   case A_security_level:
12614                     aci.sec_level = value_p->security_level;
12615                     break;
12616                   case A_mac_categories:
12617                     aci.mac_categories = value_p->mac_categories;
12618                     break;
12619                   case A_mac_check:
12620                     aci.mac_check = value_p->mac_check;
12621                     break;
12622                   default:
12623                     err = -RSBAC_EINVALIDATTR;
12624                 }
12625               if(!err)
12626                 {
12627                   err = rsbac_ta_list_add_ttl(ta_number,
12628                                        dev_handles.mac,
12629                                        0,
12630                                        &dev,
12631                                        &aci);
12632                 }
12633             }
12634             break;
12635 #endif
12636 
12637 #if defined(CONFIG_RSBAC_PM)
12638           case PM:
12639             {
12640               struct rsbac_pm_dev_aci_t aci = DEFAULT_PM_DEV_ACI;
12641 
12642               if(dev.type > D_char)
12643                 return -RSBAC_EINVALIDTARGET;
12644               rsbac_ta_list_get_data_ttl(ta_number,
12645                                   dev_handles.pm,
12646                                   NULL,
12647                                   &dev,
12648                                   &aci);
12649               switch (attr)
12650                 {
12651                   case A_pm_object_type:
12652                     aci.pm_object_type = value_p->pm_object_type;
12653                     break;
12654                   case A_pm_object_class:
12655                     aci.pm_object_class = value_p->pm_object_class;
12656                     break;
12657                   default:
12658                     err = -RSBAC_EINVALIDATTR;
12659                 }
12660               if(!err)
12661                 {
12662                   err = rsbac_ta_list_add_ttl(ta_number,
12663                                        dev_handles.pm,
12664                                        0,
12665                                        &dev,
12666                                        &aci);
12667                 }
12668             }
12669             break;
12670 #endif
12671 
12672 #if defined(CONFIG_RSBAC_RC)
12673           case RC:
12674             {
12675               rsbac_rc_type_id_t type = value_p->rc_type;
12676               struct rsbac_dev_desc_t dev_desc;
12677               rsbac_list_handle_t handle;
12678 
12679               switch(dev.type)
12680                 {
12681                   case D_char:
12682                     dev_desc.type = D_char;
12683                     handle = dev_handles.rc;
12684                     break;
12685                   case D_block:
12686                     dev_desc.type = D_block;
12687                     handle = dev_handles.rc;
12688                     break;
12689                   case D_char_major:
12690                     if(type > RC_type_max_value)
12691                       return -RSBAC_EINVALIDVALUE;
12692                     dev_desc.type = D_char;
12693                     handle = dev_major_handles.rc;
12694                     break;
12695                   case D_block_major:
12696                     if(type > RC_type_max_value)
12697                       return -RSBAC_EINVALIDVALUE;
12698                     dev_desc.type = D_block;
12699                     handle = dev_major_handles.rc;
12700                     break;
12701                   default:
12702                     return -RSBAC_EINVALIDTARGET;
12703                 }
12704               dev_desc.major = dev.major;
12705               dev_desc.minor = dev.minor;
12706 
12707               switch (attr)
12708                 {
12709                   case A_rc_type:
12710                     err = rsbac_ta_list_add_ttl(ta_number,
12711                                          handle,
12712                                          0,
12713                                          &dev_desc,
12714                                          &type);
12715                     break; 
12716                   default:
12717                     err = -RSBAC_EINVALIDATTR;
12718                 }
12719             }
12720             break;
12721 #endif
12722 
12723           default:
12724             err = -RSBAC_EINVALIDMODULE;
12725         }
12726 
12727 return err;
12728     }

static int set_attr_fd rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value_p
[static]
 

Definition at line 12109 of file aci_data_structures.c.

References A_auid_exempt, A_auth_learn, A_auth_may_set_cap, A_auth_may_setuid, A_daz_scanned, A_daz_scanner, A_fake_root_uid, A_ff_flags, A_linux_dac_disable, A_log_array_high, A_log_array_low, A_log_program_based, A_mac_auto, A_mac_categories, A_mac_file_flags, A_mac_prop_trusted, A_max_caps, A_min_caps, A_pax_flags, A_pm_object_class, A_pm_object_type, A_pm_tp, A_rc_force_role, A_rc_initial_role, A_rc_type_fd, A_res_max, A_res_min, A_security_level, A_symlink_add_mac_level, A_symlink_add_rc_role, A_symlink_add_remote_ip, A_symlink_add_uid, rsbac_attribute_value_t::auid_exempt, rsbac_gen_fd_aci_t::auid_exempt, AUTH, rsbac_attribute_value_t::auth_learn, rsbac_attribute_value_t::auth_may_set_cap, rsbac_attribute_value_t::auth_may_setuid, CAP, DAZ, rsbac_attribute_value_t::daz_scanned, rsbac_attribute_value_t::daz_scanner, DEFAULT_GEN_FD_ACI, device_list_head, rsbac_attribute_value_t::fake_root_uid, rsbac_gen_fd_aci_t::fake_root_uid, FF, rsbac_attribute_value_t::ff_flags, GEN, gen_fd_hash(), rsbac_attribute_value_t::linux_dac_disable, rsbac_gen_fd_aci_t::linux_dac_disable, rsbac_attribute_value_t::log_array_high, rsbac_gen_fd_aci_t::log_array_high, rsbac_attribute_value_t::log_array_low, rsbac_gen_fd_aci_t::log_array_low, rsbac_attribute_value_t::log_program_based, rsbac_gen_fd_aci_t::log_program_based, lookup_device(), MAC, rsbac_attribute_value_t::mac_auto, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_file_flags, rsbac_attribute_value_t::mac_prop_trusted, rsbac_attribute_value_t::max_caps, rsbac_attribute_value_t::min_caps, NULL, PAX, rsbac_attribute_value_t::pax_flags, PM, rsbac_attribute_value_t::pm_object_class, rsbac_attribute_value_t::pm_object_type, rsbac_attribute_value_t::pm_tp, RC, rsbac_attribute_value_t::rc_force_role, rsbac_attribute_value_t::rc_initial_role, rsbac_attribute_value_t::rc_type_fd, RES, rsbac_attribute_value_t::res_array, RSBAC_EINVALIDATTR, RSBAC_EINVALIDDEV, RSBAC_EINVALIDMODULE, rsbac_list_add_ttl(), RSBAC_MAC_F_FLAGS, rsbac_mount(), RSBAC_PAX_ALL_FLAGS, rsbac_printk(), rsbac_ta_list_add_ttl(), rsbac_ta_list_get_data_ttl(), rsbac_ta_list_remove(), rsbac_attribute_value_t::security_level, rsbac_attribute_value_t::symlink_add_mac_level, rsbac_gen_fd_aci_t::symlink_add_mac_level, rsbac_attribute_value_t::symlink_add_rc_role, rsbac_gen_fd_aci_t::symlink_add_rc_role, rsbac_attribute_value_t::symlink_add_remote_ip, rsbac_gen_fd_aci_t::symlink_add_remote_ip, rsbac_attribute_value_t::symlink_add_uid, and rsbac_gen_fd_aci_t::symlink_add_uid.

Referenced by rsbac_ta_set_attr().

12116     { 
12117       int err = 0;
12118       struct rsbac_device_list_item_t   * device_p;
12119       u_long                              dflags;
12120 
12121 /*
12122 #ifdef CONFIG_RSBAC_DEBUG
12123       if (rsbac_debug_ds)
12124           rsbac_printk(KERN_DEBUG "rsbac_set_attr(): Setting file/dir/fifo/symlink attribute %u for device %02u:%02u, inode %lu, dentry_p %p\n",
12125                  attr, RSBAC_MAJOR(tid_p->file.device),RSBAC_MINOR(tid_p->file.device), (u_long) tid_p->file.inode, tid_p->file.dentry_p);
12126 #endif
12127 */
12128       /* wait for read access to device_list_head */
12129       rsbac_read_lock(&device_list_head.lock, &dflags);
12130       /* OK, go on */
12131 /*
12132 #ifdef CONFIG_RSBAC_DEBUG
12133       if (rsbac_debug_ds)
12134           rsbac_printk(KERN_DEBUG
12135                  "rsbac_set_attr(): passed device read lock\n");
12136 #endif
12137 */
12138 
12139       /* lookup device */
12140       device_p = lookup_device(tid_p->file.device);
12141       if (!device_p)
12142         {
12143           struct super_block * sb_p;
12144 
12145           rsbac_read_unlock(&device_list_head.lock, &dflags);
12146 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
12147           sb_p = user_get_super(tid_p->file.device);
12148 #else
12149           sb_p = get_super(tid_p->file.device);
12150 #endif
12151           if(sb_p)
12152             {
12153               rsbac_printk(KERN_INFO
12154                      "rsbac_set_attr(): auto-mounting device %02u:%02u\n",
12155                      RSBAC_MAJOR(tid_p->file.device), RSBAC_MINOR(tid_p->file.device));
12156               rsbac_mount(sb_p, NULL);
12157               /* free super_block pointer */
12158               drop_super(sb_p);
12159               rsbac_read_lock(&device_list_head.lock, &dflags);
12160               device_p = lookup_device(tid_p->file.device);
12161               if (!device_p)
12162                 {
12163                   rsbac_printk(KERN_WARNING
12164                          "rsbac_set_attr(): unknown device %02u:%02u\n",
12165                          RSBAC_MAJOR(tid_p->file.device), RSBAC_MINOR(tid_p->file.device));
12166                   rsbac_read_unlock(&device_list_head.lock, &dflags);
12167                   return -RSBAC_EINVALIDDEV;
12168                 }
12169             }
12170           else
12171             return -RSBAC_EINVALIDDEV;
12172         }
12173       switch(module)
12174         {
12175           case GEN:
12176             {
12177               struct rsbac_gen_fd_aci_t aci = DEFAULT_GEN_FD_ACI;
12178 
12179               rsbac_ta_list_get_data_ttl(ta_number,
12180                                   device_p->handles.gen[gen_fd_hash(tid_p->file.inode)],
12181                                   NULL,
12182                                   &tid_p->file.inode,
12183                                   &aci);
12184               switch (attr)
12185                 {
12186                   case A_log_array_low:
12187                     aci.log_array_low = value_p->log_array_low;
12188                     break;
12189                   case A_log_array_high:
12190                     aci.log_array_high = value_p->log_array_high;
12191                     break;
12192                   case A_log_program_based:
12193                     aci.log_program_based = value_p->log_program_based;
12194                     break;
12195                   case A_symlink_add_remote_ip:
12196                     aci.symlink_add_remote_ip = value_p->symlink_add_remote_ip;
12197                     break;
12198                   case A_symlink_add_uid:
12199                     aci.symlink_add_uid = value_p->symlink_add_uid;
12200                     break;
12201                   case A_symlink_add_mac_level:
12202                     aci.symlink_add_mac_level = value_p->symlink_add_mac_level;
12203                     break;
12204                   case A_symlink_add_rc_role:
12205                     aci.symlink_add_rc_role = value_p->symlink_add_rc_role;
12206                     break;
12207                   case A_linux_dac_disable:
12208                     aci.linux_dac_disable = value_p->linux_dac_disable;
12209                     break;
12210                   case A_fake_root_uid:
12211                     aci.fake_root_uid = value_p->fake_root_uid;
12212                     break;
12213                   case A_auid_exempt:
12214                     aci.auid_exempt = value_p->auid_exempt;
12215                     break;
12216                   default:
12217                     err = -RSBAC_EINVALIDATTR;
12218                 }
12219               if(!err)
12220                 {
12221                   err = rsbac_ta_list_add_ttl(ta_number,
12222                                        device_p->handles.gen[gen_fd_hash(tid_p->file.inode)],
12223                                        0,
12224                                        &tid_p->file.inode,
12225                                        &aci);
12226                 }
12227             }
12228             break;
12229 
12230 #if defined(CONFIG_RSBAC_MAC)
12231           case MAC:
12232             {
12233               struct rsbac_mac_fd_aci_t aci = DEFAULT_MAC_FD_ACI;
12234 
12235               rsbac_ta_list_get_data_ttl(ta_number,
12236                                   device_p->handles.mac[mac_fd_hash(tid_p->file.inode)],
12237                                   NULL,
12238                                   &tid_p->file.inode,
12239                                   &aci);
12240               switch (attr)
12241                 {
12242                   case A_security_level:
12243                     aci.sec_level = value_p->security_level;
12244                     break;
12245                   case A_mac_categories:
12246                     aci.mac_categories = value_p->mac_categories;
12247                     break;
12248                   case A_mac_auto:
12249                     aci.mac_auto = value_p->mac_auto;
12250                     break;
12251                   case A_mac_prop_trusted:
12252                     aci.mac_prop_trusted = value_p->mac_prop_trusted;
12253                     break;
12254                   case A_mac_file_flags:
12255                     aci.mac_file_flags = value_p->mac_file_flags & RSBAC_MAC_F_FLAGS;
12256                     break;
12257 
12258                   default:
12259                     err = -RSBAC_EINVALIDATTR;
12260                 }
12261               if(!err)
12262                 {
12263                   err = rsbac_ta_list_add_ttl(ta_number,
12264                                        device_p->handles.mac[mac_fd_hash(tid_p->file.inode)],
12265                                        0,
12266                                        &tid_p->file.inode,
12267                                        &aci);
12268                 }
12269             }
12270             break;
12271 #endif /* MAC */
12272 
12273 #if defined(CONFIG_RSBAC_PM)
12274           case PM:
12275             {
12276               struct rsbac_pm_fd_aci_t aci = DEFAULT_PM_FD_ACI;
12277 
12278               rsbac_ta_list_get_data_ttl(ta_number,
12279                                   device_p->handles.pm[pm_fd_hash(tid_p->file.inode)],
12280                                   NULL,
12281                                   &tid_p->file.inode,
12282                                   &aci);
12283               switch (attr)
12284                 {
12285                   case A_pm_object_class:
12286                     aci.pm_object_class = value_p->pm_object_class;
12287                     break;
12288                   case A_pm_tp:
12289                     aci.pm_tp = value_p->pm_tp;
12290                     break;
12291                   case A_pm_object_type:
12292                     aci.pm_object_type = value_p->pm_object_type;
12293                     break;
12294                   default:
12295                     err = -RSBAC_EINVALIDATTR;
12296                 }
12297               if(!err)
12298                 {
12299                   err = rsbac_ta_list_add_ttl(ta_number,
12300                                        device_p->handles.pm[pm_fd_hash(tid_p->file.inode)],
12301                                        0,
12302                                        &tid_p->file.inode,
12303                                        &aci);
12304                 }
12305             }
12306             break;
12307 #endif /* PM */
12308 
12309 #if defined(CONFIG_RSBAC_DAZ)
12310           case DAZ:
12311             {
12312 #if defined(CONFIG_RSBAC_DAZ_CACHE)
12313               if(attr == A_daz_scanned)
12314                 {
12315                   err = rsbac_list_add_ttl(device_p->handles.dazs[daz_scanned_fd_hash(tid_p->file.inode)],
12316                                            rsbac_daz_ttl,
12317                                            &tid_p->file.inode,
12318                                            &value_p->daz_scanned);
12319                 }
12320               else
12321 #endif
12322                 {
12323                   struct rsbac_daz_fd_aci_t aci = DEFAULT_DAZ_FD_ACI;
12324 
12325                   rsbac_ta_list_get_data_ttl(ta_number,
12326                                       device_p->handles.daz[daz_fd_hash(tid_p->file.inode)],
12327                                       NULL,
12328                                       &tid_p->file.inode,
12329                                       &aci);
12330                   switch (attr)
12331                     {
12332                       case A_daz_scanner:
12333                         aci.daz_scanner = value_p->daz_scanner;
12334                         break;
12335                       default:
12336                         err = -RSBAC_EINVALIDATTR;
12337                     }
12338                   if(!err)
12339                     {
12340                       err = rsbac_ta_list_add_ttl(ta_number,
12341                                            device_p->handles.daz[daz_fd_hash(tid_p->file.inode)],
12342                                            0,
12343                                            &tid_p->file.inode,
12344                                            &aci);
12345                     }
12346                 }
12347             }
12348             break;
12349 #endif /* DAZ */
12350 
12351 #if defined(CONFIG_RSBAC_FF)
12352           case FF:
12353             {
12354               switch (attr)
12355                 {
12356                   case A_ff_flags:
12357                     err = rsbac_ta_list_add_ttl(ta_number,
12358                                          device_p->handles.ff[ff_fd_hash(tid_p->file.inode)],
12359                                          0,
12360                                          &tid_p->file.inode,
12361                                          &value_p->ff_flags);
12362                     break;
12363 
12364                   default:
12365                     err = -RSBAC_EINVALIDATTR;
12366                 }
12367             }
12368             break;
12369 #endif /* FF */
12370 
12371 #if defined(CONFIG_RSBAC_RC)
12372           case RC:
12373             {
12374               struct rsbac_rc_fd_aci_t aci = DEFAULT_RC_FD_ACI;
12375 
12376               rsbac_ta_list_get_data_ttl(ta_number,
12377                                   device_p->handles.rc[rc_fd_hash(tid_p->file.inode)],
12378                                   NULL,
12379                                   &tid_p->file.inode,
12380                                   &aci);
12381               switch (attr)
12382                 {
12383                   case A_rc_type_fd:
12384                     aci.rc_type_fd = value_p->rc_type_fd;
12385                     break;
12386                   case A_rc_force_role:
12387                     aci.rc_force_role = value_p->rc_force_role;
12388                     break;
12389                   case A_rc_initial_role:
12390                     aci.rc_initial_role = value_p->rc_initial_role;
12391                     break;
12392 
12393                   default:
12394                     err = -RSBAC_EINVALIDATTR;
12395                 }
12396               if(!err)
12397                 {
12398                   err = rsbac_ta_list_add_ttl(ta_number,
12399                                        device_p->handles.rc[rc_fd_hash(tid_p->file.inode)],
12400                                        0,
12401                                        &tid_p->file.inode,
12402                                        &aci);
12403                 }
12404             }
12405             break;
12406 #endif /* RC */
12407 
12408 #if defined(CONFIG_RSBAC_AUTH)
12409           case AUTH:
12410             {
12411               struct rsbac_auth_fd_aci_t aci = DEFAULT_AUTH_FD_ACI;
12412 
12413               rsbac_ta_list_get_data_ttl(ta_number,
12414                                   device_p->handles.auth[auth_fd_hash(tid_p->file.inode)],
12415                                   NULL,
12416                                   &tid_p->file.inode,
12417                                   &aci);
12418               switch (attr)
12419                 {
12420                   case A_auth_may_setuid:
12421                     aci.auth_may_setuid = value_p->auth_may_setuid;
12422                     break;
12423                   case A_auth_may_set_cap:
12424                     aci.auth_may_set_cap = value_p->auth_may_set_cap;
12425                     break;
12426                   case A_auth_learn:
12427                     aci.auth_learn = value_p->auth_learn;
12428                     break;
12429                   default:
12430                     err = -RSBAC_EINVALIDATTR;
12431                 }
12432               if(!err)
12433                 {
12434                   err = rsbac_ta_list_add_ttl(ta_number,
12435                                        device_p->handles.auth[auth_fd_hash(tid_p->file.inode)],
12436                                        0,
12437                                        &tid_p->file.inode,
12438                                        &aci);
12439                 }
12440             }
12441             break;
12442 #endif /* AUTH */
12443 
12444 #if defined(CONFIG_RSBAC_CAP)
12445           case CAP:
12446             {
12447               struct rsbac_cap_fd_aci_t aci = DEFAULT_CAP_FD_ACI;
12448 
12449               rsbac_ta_list_get_data_ttl(ta_number,
12450                                   device_p->handles.cap[cap_fd_hash(tid_p->file.inode)],
12451                                   NULL,
12452                                   &tid_p->file.inode,
12453                                   &aci);
12454               switch (attr)
12455                 {
12456                   case A_min_caps:
12457                     aci.min_caps = value_p->min_caps;
12458                     break;
12459                   case A_max_caps:
12460                     aci.max_caps = value_p->max_caps;
12461                     break;
12462                   default:
12463                     err = -RSBAC_EINVALIDATTR;
12464                 }
12465               if(!err)
12466                 {
12467                   err = rsbac_ta_list_add_ttl(ta_number,
12468                                        device_p->handles.cap[cap_fd_hash(tid_p->file.inode)],
12469                                        0,
12470                                        &tid_p->file.inode,
12471                                        &aci);
12472                 }
12473             }
12474             break;
12475 #endif
12476 
12477 #if defined(CONFIG_RSBAC_RES)
12478           case RES:
12479             {
12480               struct rsbac_res_fd_aci_t aci = DEFAULT_RES_FD_ACI;
12481 
12482               rsbac_ta_list_get_data_ttl(ta_number,
12483                                   device_p->handles.res[res_fd_hash(tid_p->file.inode)],
12484                                   NULL,
12485                                   &tid_p->file.inode,
12486                                   &aci);
12487               switch (attr)
12488                 {
12489                   case A_res_min:
12490                     memcpy(&aci.res_min, &value_p->res_array, sizeof(aci.res_min));
12491                     break;
12492                   case A_res_max:
12493                     memcpy(&aci.res_max, &value_p->res_array, sizeof(aci.res_max));
12494                     break;
12495                   default:
12496                     err = -RSBAC_EINVALIDATTR;
12497                 }
12498               if(!err)
12499                 {
12500                   struct rsbac_res_fd_aci_t def_aci = DEFAULT_RES_FD_ACI;
12501 
12502                   if(memcmp(&aci, &def_aci, sizeof(aci)))
12503                     err = rsbac_ta_list_add_ttl(ta_number,
12504                                                 device_p->handles.res[res_fd_hash(tid_p->file.inode)],
12505                                                 0,
12506                                                 &tid_p->file.inode,
12507                                                 &aci);
12508                   else
12509                     err = rsbac_ta_list_remove(ta_number,
12510                                                 device_p->handles.res[res_fd_hash(tid_p->file.inode)],
12511                                                 &tid_p->file.inode);
12512                 }
12513             }
12514             break;
12515 #endif
12516 
12517 #if defined(CONFIG_RSBAC_PAX)
12518           case PAX:
12519             {
12520               switch (attr)
12521                 {
12522                   case A_pax_flags:
12523                     value_p->pax_flags &= RSBAC_PAX_ALL_FLAGS;
12524                     err = rsbac_ta_list_add_ttl(ta_number,
12525                                          device_p->handles.pax[pax_fd_hash(tid_p->file.inode)],
12526                                          0,
12527                                          &tid_p->file.inode,
12528                                          &value_p->pax_flags);
12529                     break;
12530 
12531                   default:
12532                     err = -RSBAC_EINVALIDATTR;
12533                 }
12534             }
12535             break;
12536 #endif /* PAX */
12537 
12538           default:
12539             err = -RSBAC_EINVALIDMODULE;
12540         }
12541       /* free access to device_list_head */
12542       rsbac_read_unlock(&device_list_head.lock, &dflags);
12543 
12544       return err;
12545     }

static int set_attr_ipc rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value_p
[static]
 

Definition at line 12730 of file aci_data_structures.c.

References A_jail_id, A_mac_categories, A_pm_ipc_purpose, A_pm_object_class, A_pm_object_type, A_rc_type, A_security_level, rsbac_target_id_t::ipc, ipc_handles, JAIL, rsbac_attribute_value_t::jail_id, MAC, rsbac_attribute_value_t::mac_categories, NULL, PM, rsbac_attribute_value_t::pm_ipc_purpose, rsbac_attribute_value_t::pm_object_class, rsbac_attribute_value_t::pm_object_type, RC, rsbac_attribute_value_t::rc_type, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, rsbac_ta_list_add_ttl(), rsbac_ta_list_get_data_ttl(), and rsbac_attribute_value_t::security_level.

Referenced by rsbac_ta_set_attr().

12737     { 
12738 int err = 0;
12739 
12740 /*
12741 #ifdef CONFIG_RSBAC_DEBUG
12742       if (rsbac_debug_ds) rsbac_printk(KERN_DEBUG "%s\n",
12743                   "rsbac_set_attr(): Setting ipc attribute");
12744 #endif
12745 */
12746       switch(module)
12747         {
12748 #if defined(CONFIG_RSBAC_MAC)
12749           case MAC:
12750             {
12751               struct rsbac_mac_ipc_aci_t aci = DEFAULT_MAC_IPC_ACI;
12752 
12753               rsbac_ta_list_get_data_ttl(ta_number,
12754                                   ipc_handles.mac,
12755                                   NULL,
12756                                   &tid_p->ipc,
12757                                   &aci);
12758               switch (attr)
12759                 {
12760                   case A_security_level:
12761                     aci.sec_level = value_p->security_level;
12762                     break;
12763                   case A_mac_categories:
12764                     aci.mac_categories = value_p->mac_categories;
12765                     break;
12766                   default:
12767                     err = -RSBAC_EINVALIDATTR;
12768                 }
12769               if(!err)
12770                 {
12771                   err = rsbac_ta_list_add_ttl(ta_number,
12772                                        ipc_handles.mac,
12773                                        0,
12774                                        &tid_p->ipc,
12775                                        &aci);
12776                 }
12777             }
12778             break;
12779 #endif
12780 
12781 #if defined(CONFIG_RSBAC_PM)
12782           case PM:
12783             {
12784               struct rsbac_pm_ipc_aci_t aci = DEFAULT_PM_IPC_ACI;
12785 
12786               rsbac_ta_list_get_data_ttl(ta_number,
12787                                   ipc_handles.pm,
12788                                   NULL,
12789                                   &tid_p->ipc,
12790                                   &aci);
12791               switch (attr)
12792                 {
12793                   case A_pm_object_type:
12794                     aci.pm_object_type = value_p->pm_object_type;
12795                     break;
12796                   case A_pm_ipc_purpose:
12797                     aci.pm_ipc_purpose = value_p->pm_ipc_purpose;
12798                     break;
12799                   case A_pm_object_class:
12800                     aci.pm_object_class = value_p->pm_object_class;
12801                     break;
12802                   default:
12803                     err = -RSBAC_EINVALIDATTR;
12804                 }
12805               if(!err)
12806                 {
12807                   err = rsbac_ta_list_add_ttl(ta_number,
12808                                        ipc_handles.pm,
12809                                        0,
12810                                        &tid_p->ipc,
12811                                        &aci);
12812                 }
12813             }
12814             break;
12815 #endif
12816 
12817 #if defined(CONFIG_RSBAC_RC)
12818           case RC:
12819             {
12820               rsbac_rc_type_id_t type = value_p->rc_type;
12821 
12822               switch (attr)
12823                 {
12824                   case A_rc_type:
12825                     err = rsbac_ta_list_add_ttl(ta_number,
12826                                          ipc_handles.rc,
12827                                          0,
12828                                          &tid_p->ipc,
12829                                          &type);
12830                     break;
12831                   default:
12832                     err = -RSBAC_EINVALIDATTR;
12833                 }
12834             }
12835             break;
12836 #endif
12837 
12838 #if defined(CONFIG_RSBAC_JAIL)
12839           case JAIL:
12840             {
12841               rsbac_jail_id_t id = value_p->jail_id;
12842 
12843               switch (attr)
12844                 {
12845                   case A_jail_id:
12846 /*
12847 #ifdef CONFIG_RSBAC_DEBUG
12848                     if(id)
12849                       rsbac_printk(KERN_DEBUG
12850                              "rsbac_set_attr(): Setting jail_id for IPC %s %lu to %u\n",
12851                              get_ipc_target_name(tmp, tid_p->ipc.type), tid_p->ipc.id.id_nr, id);
12852 #endif
12853 */
12854                     err = rsbac_ta_list_add_ttl(ta_number,
12855                                          ipc_handles.jail,
12856                                          0,
12857                                          &tid_p->ipc,
12858                                          &id);
12859                     break;
12860                   default:
12861                     err = -RSBAC_EINVALIDATTR;
12862                 }
12863             }
12864             break;
12865 #endif
12866 
12867           default:
12868             err = -RSBAC_EINVALIDMODULE;
12869         }
12870 
12871 return err;
12872     }

static int set_attr_process rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value_p
[static]
 

Definition at line 13273 of file aci_data_structures.c.

References A_audit_uid, A_auid_exempt, A_auth_last_auth, A_auth_learn, A_auth_may_set_cap, A_auth_may_setuid, A_cap_process_hiding, A_current_sec_level, A_daz_scanner, A_fake_root_uid, A_initial_security_level, A_jail_flags, A_jail_id, A_jail_ip, A_jail_max_caps, A_jail_scd_get, A_jail_scd_modify, A_log_program_based, A_mac_auto, A_mac_categories, A_mac_curr_categories, A_mac_initial_categories, A_mac_min_categories, A_mac_process_flags, A_max_caps_program, A_max_caps_user, A_max_read_categories, A_max_read_open, A_min_security_level, A_min_write_categories, A_min_write_open, A_pm_current_task, A_pm_process_type, A_pm_tp, A_rc_force_role, A_rc_role, A_rc_type, A_remote_ip, A_security_level, rsbac_attribute_value_t::audit_uid, rsbac_gen_process_aci_t::audit_uid, rsbac_attribute_value_t::auid_exempt, rsbac_gen_process_aci_t::auid_exempt, AUTH, rsbac_attribute_value_t::auth_last_auth, rsbac_attribute_value_t::auth_learn, rsbac_attribute_value_t::auth_may_set_cap, rsbac_attribute_value_t::auth_may_setuid, CAP, rsbac_attribute_value_t::cap_process_hiding, rsbac_attribute_value_t::current_sec_level, DAZ, rsbac_attribute_value_t::daz_scanner, DEFAULT_GEN_P_ACI, rsbac_attribute_value_t::fake_root_uid, rsbac_gen_process_aci_t::fake_root_uid, GEN, gen_p_hash(), JAIL, rsbac_attribute_value_t::jail_flags, rsbac_attribute_value_t::jail_id, rsbac_attribute_value_t::jail_ip, rsbac_attribute_value_t::jail_max_caps, rsbac_attribute_value_t::jail_scd_get, rsbac_attribute_value_t::jail_scd_modify, rsbac_attribute_value_t::log_program_based, rsbac_gen_process_aci_t::log_program_based, MAC, MAC_auto, rsbac_attribute_value_t::mac_auto, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_process_flags, rsbac_attribute_value_t::max_caps_program, rsbac_attribute_value_t::max_caps_user, rsbac_attribute_value_t::max_read_open, rsbac_attribute_value_t::min_write_open, NULL, PM, rsbac_attribute_value_t::pm_current_task, rsbac_attribute_value_t::pm_process_type, rsbac_attribute_value_t::pm_tp, rsbac_target_id_t::process, process_handles, RC, rsbac_attribute_value_t::rc_force_role, rsbac_attribute_value_t::rc_role, rsbac_attribute_value_t::rc_type, rsbac_attribute_value_t::remote_ip, rsbac_gen_process_aci_t::remote_ip, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, RSBAC_EINVALIDTARGET, RSBAC_MAC_P_FLAGS, rsbac_printk(), rsbac_ta_list_add_ttl(), rsbac_ta_list_get_data_ttl(), and rsbac_attribute_value_t::security_level.

Referenced by rsbac_ta_set_attr().

13280     { 
13281 int err = 0;
13282 
13283 /*
13284 #ifdef CONFIG_RSBAC_DEBUG
13285       if (rsbac_debug_ds)
13286         rsbac_printk(KERN_DEBUG
13287                "rsbac_set_attr(): Setting process attribute\n");
13288 #endif
13289 */
13290       if (!tid_p->process)
13291         {
13292           rsbac_printk(KERN_WARNING
13293                  "rsbac_set_attr(): Trying to set attribute for process 0!\n");
13294           return -RSBAC_EINVALIDTARGET;
13295         }
13296       switch(module)
13297         {
13298           case GEN:
13299             {
13300               struct rsbac_gen_process_aci_t aci = DEFAULT_GEN_P_ACI;
13301 
13302               rsbac_ta_list_get_data_ttl(ta_number,
13303                                   process_handles.gen[gen_p_hash(tid_p->process)],
13304                                   NULL,
13305                                   &tid_p->process,
13306                                   &aci);
13307               switch (attr)
13308                 {
13309                   case A_log_program_based:
13310                     aci.log_program_based = value_p->log_program_based;
13311                     break;
13312                   case A_fake_root_uid:
13313                     aci.fake_root_uid = value_p->fake_root_uid;
13314                     break;
13315                   case A_audit_uid:
13316                     aci.audit_uid = value_p->audit_uid;
13317                     break;
13318                   case A_auid_exempt:
13319                     aci.auid_exempt = value_p->auid_exempt;
13320                     break;
13321                   case A_remote_ip:
13322                     aci.remote_ip = value_p->remote_ip;
13323                     break;
13324                   default:
13325                     err = -RSBAC_EINVALIDATTR;
13326                 }
13327               if(!err)
13328                 {
13329                   err = rsbac_ta_list_add_ttl(ta_number,
13330                                        process_handles.gen[gen_p_hash(tid_p->process)],
13331                                        0,
13332                                        &tid_p->process,
13333                                        &aci);
13334                 }
13335             }
13336             break;
13337 
13338 #if defined(CONFIG_RSBAC_MAC)
13339           case MAC:
13340             {
13341               struct rsbac_mac_process_aci_t aci = DEFAULT_MAC_P_ACI;
13342 
13343               rsbac_ta_list_get_data_ttl(ta_number,
13344                                   process_handles.mac[mac_p_hash(tid_p->process)],
13345                                   NULL,
13346                                   &tid_p->process,
13347                                   &aci);
13348               switch (attr)
13349                 {
13350                   case A_security_level:
13351                     aci.owner_sec_level = value_p->security_level;
13352                     break;
13353                   case A_initial_security_level:
13354                     aci.owner_initial_sec_level = value_p->security_level;
13355                     break;
13356                   case A_min_security_level:
13357                     aci.owner_min_sec_level = value_p->security_level;
13358                     break;
13359                   case A_mac_categories:
13360                     aci.mac_owner_categories = value_p->mac_categories;
13361                     break;
13362                   case A_mac_initial_categories:
13363                     aci.mac_owner_initial_categories = value_p->mac_categories;
13364                     break;
13365                   case A_mac_min_categories:
13366                     aci.mac_owner_min_categories = value_p->mac_categories;
13367                     break;
13368                   case A_current_sec_level:
13369                     aci.current_sec_level = value_p->current_sec_level;
13370                     break;
13371                   case A_mac_curr_categories:
13372                     aci.mac_curr_categories = value_p->mac_categories;
13373                     break;
13374                   case A_min_write_open:
13375                     aci.min_write_open = value_p->min_write_open;
13376                     break;
13377                   case A_min_write_categories:
13378                     aci.min_write_categories = value_p->mac_categories;
13379                     break;
13380                   case A_max_read_open:
13381                     aci.max_read_open = value_p->max_read_open;
13382                     break;
13383                   case A_max_read_categories:
13384                     aci.max_read_categories = value_p->mac_categories;
13385                     break;
13386                   case A_mac_process_flags:
13387                     aci.mac_process_flags = value_p->mac_process_flags & RSBAC_MAC_P_FLAGS;
13388                     break;
13389                   case A_mac_auto:
13390                     if(value_p->mac_auto)
13391                       aci.mac_process_flags |= MAC_auto;
13392                     else
13393                       aci.mac_process_flags &= ~MAC_auto;
13394                     break;
13395                   default:
13396                     err = -RSBAC_EINVALIDATTR;
13397                 }
13398               if(!err)
13399                 {
13400                   err = rsbac_ta_list_add_ttl(ta_number,
13401                                        process_handles.mac[mac_p_hash(tid_p->process)],
13402                                        0,
13403                                        &tid_p->process,
13404                                        &aci);
13405                 }
13406             }
13407             break;
13408 #endif
13409 
13410 #if defined(CONFIG_RSBAC_PM)
13411           case PM:
13412             {
13413               struct rsbac_pm_process_aci_t aci = DEFAULT_PM_P_ACI;
13414 
13415               rsbac_ta_list_get_data_ttl(ta_number,
13416                                   process_handles.pm,
13417                                   NULL,
13418                                   &tid_p->process,
13419                                   &aci);
13420               switch (attr)
13421                 {
13422                   case A_pm_tp:
13423                     aci.pm_tp = value_p->pm_tp;
13424                     break;
13425                   case A_pm_current_task:
13426                     aci.pm_current_task = value_p->pm_current_task;
13427                     break;
13428                   case A_pm_process_type:
13429                     aci.pm_process_type = value_p->pm_process_type;
13430                     break;
13431                   default:
13432                     err = -RSBAC_EINVALIDATTR;
13433                 }
13434               if(!err)
13435                 {
13436                   err = rsbac_ta_list_add_ttl(ta_number,
13437                                        process_handles.pm,
13438                                        0,
13439                                        &tid_p->process,
13440                                        &aci);
13441                 }
13442             }
13443             break;
13444 #endif
13445 
13446 #if defined(CONFIG_RSBAC_DAZ)
13447           case DAZ:
13448             {
13449               struct rsbac_daz_process_aci_t aci = DEFAULT_DAZ_P_ACI;
13450 
13451               rsbac_ta_list_get_data_ttl(ta_number,
13452                                   process_handles.daz,
13453                                   NULL,
13454                                   &tid_p->process,
13455                                   &aci);
13456               switch (attr)
13457                 {
13458                   case A_daz_scanner:
13459                     aci.daz_scanner = value_p->daz_scanner;
13460                     break;
13461                   default:
13462                     err = -RSBAC_EINVALIDATTR;
13463                 }
13464               if(!err)
13465                 {
13466                   err = rsbac_ta_list_add_ttl(ta_number,
13467                                        process_handles.daz,
13468                                        0,
13469                                        &tid_p->process,
13470                                        &aci);
13471                 }
13472             }
13473             break;
13474 #endif
13475 
13476 #if defined(CONFIG_RSBAC_RC)
13477           case RC:
13478             {
13479               struct rsbac_rc_process_aci_t aci = DEFAULT_RC_P_ACI;
13480 
13481               rsbac_ta_list_get_data_ttl(ta_number,
13482                                   process_handles.rc[rc_p_hash(tid_p->process)],
13483                                   NULL,
13484                                   &tid_p->process,
13485                                   &aci);
13486               switch (attr)
13487                 {
13488                   case A_rc_role:
13489                     aci.rc_role = value_p->rc_role;
13490                     break;
13491                   case A_rc_type:
13492                     aci.rc_type = value_p->rc_type;
13493                     break;
13494                   case A_rc_force_role:
13495                     aci.rc_force_role = value_p->rc_force_role;
13496                     break;
13497                   default:
13498                     err = -RSBAC_EINVALIDATTR;
13499                 }
13500               if(!err)
13501                 {
13502                   err = rsbac_ta_list_add_ttl(ta_number,
13503                                        process_handles.rc[rc_p_hash(tid_p->process)],
13504                                        0,
13505                                        &tid_p->process,
13506                                        &aci);
13507                 }
13508             }
13509             break;
13510 #endif
13511 
13512 #if defined(CONFIG_RSBAC_AUTH)
13513           case AUTH:
13514             {
13515               struct rsbac_auth_process_aci_t aci = DEFAULT_AUTH_P_ACI;
13516 
13517               rsbac_ta_list_get_data_ttl(ta_number,
13518                                   process_handles.auth,
13519                                   NULL,
13520                                   &tid_p->process,
13521                                   &aci);
13522               switch (attr)
13523                 {
13524                   case A_auth_may_setuid:
13525                     aci.auth_may_setuid = value_p->auth_may_setuid;
13526                     break;
13527                   case A_auth_may_set_cap:
13528                     aci.auth_may_set_cap = value_p->auth_may_set_cap;
13529                     break;
13530 #if defined(CONFIG_RSBAC_AUTH_LEARN)
13531                   case A_auth_program_file:
13532                     aci.auth_program_file = value_p->auth_program_file;
13533                     break;
13534                   case A_auth_start_uid:
13535                     aci.auth_start_uid = value_p->auth_start_uid;
13536                     break;
13537                   #ifdef CONFIG_RSBAC_AUTH_DAC_OWNER
13538                   case A_auth_start_euid:
13539                     aci.auth_start_euid = value_p->auth_start_euid;
13540                     break;
13541                   #endif
13542                   #ifdef CONFIG_RSBAC_AUTH_GROUP
13543                   case A_auth_start_gid:
13544                     aci.auth_start_gid = value_p->auth_start_gid;
13545                     break;
13546                   #ifdef CONFIG_RSBAC_AUTH_DAC_GROUP
13547                   case A_auth_start_egid:
13548                     aci.auth_start_egid = value_p->auth_start_egid;
13549                     break;
13550                   #endif
13551                   #endif
13552                   case A_auth_learn:
13553                     aci.auth_learn = value_p->auth_learn;
13554                     break;
13555 #endif
13556                   case A_auth_last_auth:
13557                     aci.auth_last_auth = value_p->auth_last_auth;
13558                     break;
13559                   default:
13560                     err = -RSBAC_EINVALIDATTR;
13561                 }
13562               if(!err)
13563                 {
13564                   err = rsbac_ta_list_add_ttl(ta_number,
13565                                        process_handles.auth,
13566                                        0,
13567                                        &tid_p->process,
13568                                        &aci);
13569                 }
13570             }
13571             break;
13572 #endif
13573 
13574 #if defined(CONFIG_RSBAC_CAP)
13575           case CAP:
13576             {
13577               struct rsbac_cap_process_aci_t aci = DEFAULT_CAP_P_ACI;
13578 
13579               rsbac_ta_list_get_data_ttl(ta_number,
13580                                   process_handles.cap,
13581                                   NULL,
13582                                   &tid_p->process,
13583                                   &aci);
13584               switch (attr)
13585                 {
13586                   case A_cap_process_hiding:
13587                     aci.cap_process_hiding = value_p->cap_process_hiding;
13588                     break;
13589 #ifdef CONFIG_RSBAC_CAP_LOG_MISSING
13590                   case A_max_caps_user:
13591                     aci.max_caps_user = value_p->max_caps_user;
13592                     break;
13593                   case A_max_caps_program:
13594                     aci.max_caps_program = value_p->max_caps_program;
13595                     break;
13596 #endif
13597                   default:
13598                     err = -RSBAC_EINVALIDATTR;
13599                 }
13600               if(!err)
13601                 {
13602                   err = rsbac_ta_list_add_ttl(ta_number,
13603                                        process_handles.cap,
13604                                        0,
13605                                        &tid_p->process,
13606                                        &aci);
13607                 }
13608             }
13609             break;
13610 #endif
13611 
13612 #if defined(CONFIG_RSBAC_JAIL)
13613           case JAIL:
13614             {
13615               struct rsbac_jail_process_aci_t aci = DEFAULT_JAIL_P_ACI;
13616 
13617               rsbac_ta_list_get_data_ttl(ta_number,
13618                                   process_handles.jail[jail_p_hash(tid_p->process)],
13619                                   NULL,
13620                                   &tid_p->process,
13621                                   &aci);
13622               switch (attr)
13623                 {
13624                   case A_jail_id:
13625                     aci.id = value_p->jail_id;
13626                     break;
13627                   case A_jail_ip:
13628                     aci.ip = value_p->jail_ip;
13629                     break;
13630                   case A_jail_flags:
13631                     aci.flags = value_p->jail_flags;
13632                     break;
13633                   case A_jail_max_caps:
13634                     aci.max_caps = value_p->jail_max_caps;
13635                     break;
13636                   case A_jail_scd_get:
13637                     aci.scd_get = value_p->jail_scd_get;
13638                     break;
13639                   case A_jail_scd_modify:
13640                     aci.scd_modify = value_p->jail_scd_modify;
13641                     break;
13642                   default:
13643                     err = -RSBAC_EINVALIDATTR;
13644                 }
13645               if(!err)
13646                 {
13647                   err = rsbac_ta_list_add_ttl(ta_number,
13648                                        process_handles.jail[jail_p_hash(tid_p->process)],
13649                                        0,
13650                                        &tid_p->process,
13651                                        &aci);
13652                 }
13653             }
13654             break;
13655 #endif
13656 
13657           default:
13658             err = -RSBAC_EINVALIDMODULE;
13659         }
13660 
13661 return err;
13662     }

static int set_attr_user rsbac_list_ta_number_t  ta_number,
enum rsbac_switch_target_t  module,
enum rsbac_target_t  target,
union rsbac_target_id_t tid_p,
enum rsbac_attribute_t  attr,
union rsbac_attribute_value_t value_p
[static]
 

Definition at line 12874 of file aci_data_structures.c.

References A_auth_role, A_cap_role, A_daz_role, A_ff_role, A_initial_security_level, A_jail_role, A_log_user_based, A_mac_categories, A_mac_initial_categories, A_mac_min_categories, A_mac_role, A_mac_user_flags, A_max_caps, A_min_caps, A_min_security_level, A_pax_role, A_pm_role, A_pm_task_set, A_pseudo, A_rc_def_role, A_rc_type, A_res_max, A_res_min, A_res_role, A_security_level, A_system_role, AUTH, CAP, DAZ, DEFAULT_GEN_U_ACI, FF, GEN, JAIL, rsbac_attribute_value_t::log_user_based, rsbac_gen_user_aci_t::log_user_based, MAC, rsbac_attribute_value_t::mac_categories, rsbac_attribute_value_t::mac_user_flags, rsbac_attribute_value_t::max_caps, rsbac_attribute_value_t::min_caps, NULL, PAX, PM, rsbac_attribute_value_t::pm_role, rsbac_attribute_value_t::pm_task_set, rsbac_attribute_value_t::pseudo, rsbac_gen_user_aci_t::pseudo, RC, rsbac_attribute_value_t::rc_def_role, rsbac_attribute_value_t::rc_type, RES, rsbac_attribute_value_t::res_array, RSBAC_ALL_USERS, RSBAC_EINVALIDATTR, RSBAC_EINVALIDMODULE, RSBAC_EINVALIDVALUE, RSBAC_MAC_U_FLAGS, rsbac_ta_list_add_ttl(), rsbac_ta_list_get_data_ttl(), rsbac_ta_list_remove(), rsbac_attribute_value_t::security_level, rsbac_attribute_value_t::system_role, rsbac_target_id_t::user, and user_handles.

Referenced by rsbac_ta_set_attr().

12881     { 
12882 int err = 0;
12883 
12884 #ifdef CONFIG_RSBAC_DEBUG
12885 /*
12886       if (rsbac_debug_ds)
12887         rsbac_printk(KERN_DEBUG
12888                "rsbac_set_attr(): Setting %s user attribute %i for %u to %i\n",
12889                get_switch_target_name(tmp, module), attr, tid_p->user, value_p->dummy);
12890 */
12891 #endif
12892       switch(module)
12893         {
12894           case GEN:
12895             {
12896               struct rsbac_gen_user_aci_t aci = DEFAULT_GEN_U_ACI;
12897 
12898               rsbac_ta_list_get_data_ttl(ta_number,
12899                                   user_handles.gen,
12900                                   NULL,
12901                                   &tid_p->user,
12902                                   &aci);
12903               switch (attr)
12904                 {
12905                   case A_pseudo:
12906                     aci.pseudo = value_p->pseudo;
12907                     break;
12908                   case A_log_user_based:
12909                     aci.log_user_based = value_p->log_user_based;
12910                     break;
12911                   default:
12912                     err = -RSBAC_EINVALIDATTR;
12913                 }
12914               if(!err)
12915                 {
12916                   err = rsbac_ta_list_add_ttl(ta_number,
12917                                        user_handles.gen,
12918                                        0,
12919                                        &tid_p->user,
12920                                        &aci);
12921                 }
12922             }
12923             break;
12924 
12925 #if defined(CONFIG_RSBAC_MAC)
12926           case MAC:
12927             {
12928               struct rsbac_mac_user_aci_t aci = DEFAULT_MAC_U_ACI;
12929 
12930               rsbac_ta_list_get_data_ttl(ta_number,
12931                                   user_handles.mac,
12932                                   NULL,
12933                                   &tid_p->user,
12934                                   &aci);
12935               switch (attr)
12936                 {
12937                   case A_security_level:
12938                     if(value_p->security_level < aci.min_security_level)
12939                       err = -RSBAC_EINVALIDVALUE;
12940                     else
12941                       aci.security_level = value_p->security_level;
12942                     break;
12943                   case A_initial_security_level:
12944                     if(   (value_p->security_level < aci.min_security_level)
12945                        || (value_p->security_level > aci.security_level)
12946                       )
12947                       err = -RSBAC_EINVALIDVALUE;
12948                     else
12949                       aci.initial_security_level = value_p->security_level;
12950                     break;
12951                   case A_min_security_level:
12952                     if(value_p->security_level > aci.security_level)
12953                       err = -RSBAC_EINVALIDVALUE;
12954                     else
12955                       aci.min_security_level = value_p->security_level;
12956                     break;
12957                   case A_mac_categories:
12958                     if((value_p->mac_categories & aci.mac_min_categories) != aci.mac_min_categories)
12959                       err = -RSBAC_EINVALIDVALUE;
12960                     else
12961                       aci.mac_categories = value_p->mac_categories;
12962                     break;
12963                   case A_mac_initial_categories:
12964                     if(   ((value_p->mac_categories & aci.mac_min_categories) != aci.mac_min_categories)
12965                        || ((value_p->mac_categories & aci.mac_categories) != value_p->mac_categories)
12966                       )
12967                       err = -RSBAC_EINVALIDVALUE;
12968                     else
12969                       aci.mac_initial_categories = value_p->mac_categories;
12970                     break;
12971                   case A_mac_min_categories:
12972                     if((value_p->mac_categories & aci.mac_categories) != value_p->mac_categories)
12973                       err = -RSBAC_EINVALIDVALUE;
12974                     else
12975                       aci.mac_min_categories = value_p->mac_categories;
12976                     break;
12977                   case A_system_role:
12978                   case A_mac_role:
12979                     aci.system_role = value_p->system_role;
12980                     break;
12981                   case A_mac_user_flags:
12982                     aci.mac_user_flags = value_p->mac_user_flags & RSBAC_MAC_U_FLAGS;
12983                     break;
12984                   default:
12985                     err = -RSBAC_EINVALIDATTR;
12986                 }
12987               if(!err)
12988                 {
12989                   err = rsbac_ta_list_add_ttl(ta_number,
12990                                        user_handles.mac,
12991                                        0,
12992                                        &tid_p->user,
12993                                        &aci);
12994                 }
12995             }
12996             break;
12997 #endif
12998 
12999 #if defined(CONFIG_RSBAC_PM)
13000           case PM:
13001             {
13002               struct rsbac_pm_user_aci_t aci = DEFAULT_PM_U_ACI;
13003 
13004               rsbac_ta_list_get_data_ttl(ta_number,
13005                                   user_handles.pm,
13006                                   NULL,
13007                                   &tid_p->user,
13008                                   &aci);
13009               switch (attr)
13010                 {
13011                   case A_pm_task_set:
13012                     aci.pm_task_set = value_p->pm_task_set;
13013                     break;
13014                   case A_pm_role:
13015                     aci.pm_role = value_p->pm_role;
13016                     break;
13017                   default:
13018                     err = -RSBAC_EINVALIDATTR;
13019                 }
13020               if(!err)
13021                 {
13022                   err = rsbac_ta_list_add_ttl(ta_number,
13023                                        user_handles.pm,
13024                                        0,
13025                                        &tid_p->user,
13026                                        &aci);
13027                 }
13028             }
13029             break;
13030 #endif
13031 
13032 #if defined(CONFIG_RSBAC_DAZ)
13033           case DAZ:
13034             {
13035               rsbac_system_role_int_t role = value_p->system_role;
13036 
13037               switch (attr)
13038                 {
13039                   case A_system_role:
13040                   case A_daz_role:
13041                     err = rsbac_ta_list_add_ttl(ta_number,
13042                                          user_handles.daz,
13043                                          0,
13044                                          &tid_p->user,
13045                                          &role);
13046                     break; 
13047                   default:
13048                     err = -RSBAC_EINVALIDATTR;
13049                 }
13050             }
13051             break;
13052 #endif
13053 
13054 #if defined(CONFIG_RSBAC_FF)
13055           case FF:
13056             {
13057               rsbac_system_role_int_t role = value_p->system_role;
13058 
13059               switch (attr)
13060                 {
13061                   case A_system_role:
13062                   case A_ff_role:
13063                     err = rsbac_ta_list_add_ttl(ta_number,
13064                                          user_handles.ff,
13065                                          0,
13066                                          &tid_p->user,
13067                                          &role);
13068                     break; 
13069                   default:
13070                     err = -RSBAC_EINVALIDATTR;
13071                 }
13072             }
13073             break;
13074 #endif
13075 
13076 #if defined(CONFIG_RSBAC_RC)
13077           case RC:
13078             {
13079               struct rsbac_rc_user_aci_t aci = DEFAULT_RC_U_ACI;
13080 
13081               rsbac_ta_list_get_data_ttl(ta_number,
13082                                   user_handles.rc,
13083                                   NULL,
13084                                   &tid_p->user,
13085                                   &aci);
13086               switch (attr)
13087                 {
13088                   case A_rc_def_role:
13089                     aci.rc_role = value_p->rc_def_role;
13090                     break;
13091                   case A_rc_type:
13092                     aci.rc_type = value_p->rc_type;
13093                     break;
13094                   default:
13095                     err = -RSBAC_EINVALIDATTR;
13096                 }
13097               if(!err)
13098                 {
13099                   err = rsbac_ta_list_add_ttl(ta_number,
13100                                        user_handles.rc,
13101                                        0,
13102                                        &tid_p->user,
13103                                        &aci);
13104                 }
13105             }
13106             break;
13107 #endif
13108 
13109 #if defined(CONFIG_RSBAC_AUTH)
13110           case AUTH:
13111             {
13112               rsbac_system_role_int_t role = value_p->system_role;
13113 
13114               switch (attr)
13115                 {
13116                   case A_system_role:
13117                   case A_auth_role:
13118                     err = rsbac_ta_list_add_ttl(ta_number,
13119                                          user_handles.auth,
13120                                          0,
13121                                          &tid_p->user,
13122                                          &role);
13123                     break; 
13124                   default:
13125                     err = -RSBAC_EINVALIDATTR;
13126                 }
13127             }
13128             break;
13129 #endif
13130 
13131 #if defined(CONFIG_RSBAC_CAP)
13132           case CAP:
13133             {
13134               struct rsbac_cap_user_aci_t aci = DEFAULT_CAP_U_ACI;
13135 
13136               rsbac_ta_list_get_data_ttl(ta_number,
13137                                   user_handles.cap,
13138                                   NULL,
13139                                   &tid_p->user,
13140                                   &aci);
13141               switch (attr)
13142                 {
13143                   case A_system_role:
13144                   case A_cap_role:
13145                     aci.cap_role = value_p->system_role;
13146                     break;
13147                   case A_min_caps:
13148                     aci.min_caps = value_p->min_caps;
13149                     break;
13150                   case A_max_caps:
13151                     aci.max_caps = value_p->max_caps;
13152                     break;
13153                   default:
13154                     err = -RSBAC_EINVALIDATTR;
13155                 }
13156               if(!err)
13157                 {
13158                   err = rsbac_ta_list_add_ttl(ta_number,
13159                                        user_handles.cap,
13160                                        0,
13161                                        &tid_p->user,
13162                                        &aci);
13163                 }
13164             }
13165             break;
13166 #endif
13167 
13168 #if defined(CONFIG_RSBAC_JAIL)
13169           case JAIL:
13170             {
13171               rsbac_system_role_int_t role = value_p->system_role;
13172 
13173               switch (attr)
13174                 {
13175                   case A_system_role:
13176                   case A_jail_role:
13177                     err = rsbac_ta_list_add_ttl(ta_number,
13178                                          user_handles.jail,
13179                                          0,
13180                                          &tid_p->user,
13181                                          &role);
13182                     break; 
13183                   default:
13184                     err = -RSBAC_EINVALIDATTR;
13185                 }
13186             }
13187             break;
13188 #endif
13189 
13190 #if defined(CONFIG_RSBAC_RES)
13191           case RES:
13192             {
13193               struct rsbac_res_user_aci_t aci = DEFAULT_RES_U_ACI;
13194 
13195               rsbac_ta_list_get_data_ttl(ta_number,
13196                                   user_handles.res,
13197                                   NULL,
13198                                   &tid_p->user,
13199                                   &aci);
13200               switch (attr)
13201                 {
13202                   case A_system_role:
13203                   case A_res_role:
13204                     aci.res_role = value_p->system_role;
13205                     break;
13206                   case A_res_min:
13207                     memcpy(&aci.res_min, &value_p->res_array, sizeof(aci.res_min));
13208                     break;
13209                   case A_res_max:
13210                     memcpy(&aci.res_max, &value_p->res_array, sizeof(aci.res_max));
13211                     break;
13212                   default:
13213                     err = -RSBAC_EINVALIDATTR;
13214                 }
13215               if(!err)
13216                 {
13217                   struct rsbac_res_user_aci_t def_aci = DEFAULT_RES_U_ACI;
13218 
13219                   if(tid_p->user != RSBAC_ALL_USERS)
13220                     {
13221                       rsbac_uid_t all_users = RSBAC_ALL_USERS;
13222 
13223                       rsbac_ta_list_get_data_ttl(ta_number,
13224                                           user_handles.res,
13225                                           NULL,
13226                                           &all_users,
13227                                           &def_aci);
13228                     }
13229                   if(memcmp(&aci, &def_aci, sizeof(aci)))
13230                     err = rsbac_ta_list_add_ttl(ta_number,
13231                                          user_handles.res,
13232                                          0,
13233                                          &tid_p->user,
13234                                          &aci);
13235                   else
13236                     err = rsbac_ta_list_remove(ta_number,
13237                                                user_handles.res,
13238                                                &tid_p->user);
13239                 }
13240             }
13241             break;
13242 #endif
13243 
13244 #if defined(CONFIG_RSBAC_PAX)
13245           case PAX:
13246             {
13247               rsbac_system_role_int_t role = value_p->system_role;
13248 
13249               switch (attr)
13250                 {
13251                   case A_system_role:
13252                   case A_pax_role:
13253                     err = rsbac_ta_list_add_ttl(ta_number,
13254                                          user_handles.pax,
13255                                          0,
13256                                          &tid_p->user,
13257                                          &role);
13258                     break; 
13259                   default:
13260                     err = -RSBAC_EINVALIDATTR;
13261                 }
13262             }
13263             break;
13264 #endif
13265 
13266           default:
13267             err = -RSBAC_EINVALIDMODULE;
13268         }
13269 
13270 return err;
13271     }

static void wakeup_auto u_long  dummy  )  [static]
 

Definition at line 2063 of file aci_data_structures.c.

Referenced by rsbac_get_super_block().

02064   {
02065     wake_up((void *) dummy);
02066   }

rsbac_boolean_t writable struct super_block *  sb_p  ) 
 

Definition at line 316 of file aci_data_structures.c.

References FALSE, KERNEL_VERSION, rsbac_debug_no_write, SOCKFS_MAGIC, SYSFS_MAGIC, and TRUE.

Referenced by lookup_aci_path_dentry(), and rsbac_write_open().

00317  {
00318 #ifdef CONFIG_RSBAC_NO_WRITE
00319    return(FALSE);
00320 #else
00321    if (!sb_p || !sb_p->s_dev)
00322      return(FALSE);
00323    if (
00324        rsbac_debug_no_write ||
00325        (sb_p->s_flags & MS_RDONLY)
00326        || in_interrupt())
00327      return(FALSE);
00328    if (   !MAJOR(sb_p->s_dev)
00329 #ifndef CONFIG_RSBAC_MSDOS_WRITE
00330        || (sb_p->s_magic == MSDOS_SUPER_MAGIC)
00331 #endif
00332        || (sb_p->s_magic == SOCKFS_MAGIC)
00333        || (sb_p->s_magic == PIPEFS_MAGIC)
00334 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
00335        || (sb_p->s_magic == SYSFS_MAGIC)
00336 #endif
00337        || (sb_p->s_magic == NFS_SUPER_MAGIC)
00338        || (sb_p->s_magic == CODA_SUPER_MAGIC)
00339        || (sb_p->s_magic == NCP_SUPER_MAGIC)
00340        || (sb_p->s_magic == SMB_SUPER_MAGIC)
00341        || (sb_p->s_magic == ISOFS_SUPER_MAGIC))
00342      return(FALSE);
00343    else
00344      return(TRUE);
00345 #endif
00346  }


Variable Documentation

char compiled_modules[80] [static]
 

Definition at line 120 of file aci_data_structures.c.

Referenced by rsbac_do_init().

struct rsbac_gen_fd_aci_t def_gen_fd_aci = DEFAULT_GEN_FD_ACI [static]
 

Definition at line 155 of file aci_data_structures.c.

struct rsbac_gen_fd_aci_t def_gen_root_dir_aci = DEFAULT_GEN_ROOT_DIR_ACI [static]
 

Definition at line 154 of file aci_data_structures.c.

struct rsbac_dev_handles_t dev_handles [static]
 

Definition at line 129 of file aci_data_structures.c.

Referenced by get_attr_dev(), register_dev_lists(), rsbac_stats(), rsbac_ta_list_all_dev(), rsbac_ta_remove_target(), and set_attr_dev().

struct rsbac_dev_handles_t dev_major_handles [static]
 

Definition at line 130 of file aci_data_structures.c.

Referenced by get_attr_dev(), register_dev_lists(), rsbac_stats(), rsbac_ta_list_all_dev(), and set_attr_dev().

struct rsbac_device_list_head_t device_list_head [static]
 

Definition at line 128 of file aci_data_structures.c.

Referenced by add_device_item(), get_attr_fd(), lookup_aci_path_dentry(), lookup_device(), remove_device_item(), rsbac_do_init(), rsbac_free_dat_dentries(), rsbac_get_parent(), rsbac_get_super_block(), rsbac_mount(), rsbac_stats(), rsbac_ta_remove_target(), rsbac_umount(), and set_attr_fd().

struct rsbac_ipc_handles_t ipc_handles [static]
 

Definition at line 131 of file aci_data_structures.c.

Referenced by get_attr_ipc(), register_ipc_lists(), rsbac_stats(), rsbac_ta_remove_target(), and set_attr_ipc().

struct rsbac_process_handles_t process_handles [static]
 

Definition at line 136 of file aci_data_structures.c.

Referenced by get_attr_process(), register_process_lists(), rsbac_init(), rsbac_kthread_notify(), rsbac_stats(), rsbac_ta_remove_target(), and set_attr_process().

rsbac_boolean_t rsbac_initialized = FALSE [static]
 

Definition at line 118 of file aci_data_structures.c.

Referenced by rsbac_do_init(), rsbac_free_dat_dentries(), rsbac_init(), rsbac_is_initialized(), rsbac_kthread_notify(), rsbac_mount(), rsbac_stats(), rsbac_ta_get_attr(), rsbac_ta_remove_target(), rsbac_ta_set_attr(), and rsbac_umount().

kdev_t rsbac_root_dev
 

Definition at line 122 of file aci_data_structures.c.

Referenced by read_info(), rsbac_do_init(), rsbac_init(), rsbac_init_acl(), rsbac_init_auth(), rsbac_init_mac(), rsbac_list_lol_register(), rsbac_list_register(), rsbac_mount(), and write_info().

struct dentry* sysfs_covered_p = NULL [static]
 

Definition at line 203 of file aci_data_structures.c.

Referenced by rsbac_do_init(), rsbac_mount(), and rsbac_umount().

struct super_block* sysfs_sb_p = NULL [static]
 

Definition at line 204 of file aci_data_structures.c.

Referenced by rsbac_do_init(), rsbac_mount(), and rsbac_umount().

struct rsbac_user_handles_t user_handles [static]
 

Definition at line 132 of file aci_data_structures.c.

Referenced by get_attr_user(), register_user_lists(), rsbac_init(), rsbac_stats(), rsbac_ta_list_all_user(), rsbac_ta_remove_target(), and set_attr_user().


Generated on Thu Sep 22 16:42:28 2005 for RSBAC by  doxygen 1.4.2