slim: secfs patch
RFC PATCH 4/6 slim: secfs patch
This patch provides the securityfs used by SLIM.
Signed-off-by Mimi Zohar <[email protected]>
Signed-off-by Kylene Hall <[email protected]>
---
security/slim/slm_secfs.c | 73 ++++++++++++++++++++++++++++++++++++ 1 files changed, 73 insertions(+)
security/slim/slm_secfs.c +73 -0
@@ -0,0 +1,73 @@ +/* +* SLIM securityfs support: debugging control files +* +* Copyright (C) 2005, 2006 IBM Corporation +* Author: Mimi Zohar <[email protected]> +* Kylene Hall <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, version 2 of the License. +*/ + +#include <asm/uaccess.h> +#include <linux/config.h> +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/security.h> +#include <linux/debugfs.h> +#include "slim.h" + +static struct dentry *slim_sec_dir, *slim_level; + +static ssize_t slm_read_level (struct file *file,char __user *buf, +size_t buflen,loff_t *ppos) +{ +struct slm_tsec_data *cur_tsec = current->security; +ssize_t len; +char *page = (char *)__get_free_page (GFP_KERNEL ); + +if (!page) +return -ENOMEM ; + +if (is_kernel_thread (current)) + len =sprintf (page,"level: KERNEL\n" ); +else if (!cur_tsec) + len =sprintf (page,"level: UNKNOWN\n" ); +else { +if (cur_tsec->iac_wx != cur_tsec->iac_r) + len =sprintf (page,"level: GUARD wx:%s r:%s\n" , + slm_iac_str[cur_tsec->iac_wx], + slm_iac_str[cur_tsec->iac_r]); +else + len =sprintf (page,"level: %s\n" , + slm_iac_str[cur_tsec->iac_wx]); + } + len =simple_read_from_buffer (buf, buflen, ppos, page, len); +free_page ((unsigned long )page); +return len; +} + +static struct file_operations slm_level_ops = { + .read = slm_read_level, +}; + +int __init slm_init_secfs (void ) +{ + slim_sec_dir =securityfs_create_dir ("slim" ,NULL ); +if (!slim_sec_dir ||IS_ERR (slim_sec_dir)) +return -EFAULT ; + slim_level =securityfs_create_file ("level" ,S_IRUGO , + slim_sec_dir,NULL , &slm_level_ops); +if (!slim_level ||IS_ERR (slim_level)) { +securityfs_remove (slim_sec_dir); +return -EFAULT ; + } +return 0 ; +} + +void __exit slm_cleanup_secfs(void) +{ +securityfs_remove (slim_level); +securityfs_remove (slim_sec_dir); +}
security/slim/slm_secfs.c line 28
Quoted 7 lines · Kylene Jo Hall
security/slim/slm_secfs.c +6
-0+static ssize_t slm_read_level (struct file *file,char __user *buf, +size_t buflen,loff_t *ppos) +{ +struct slm_tsec_data *cur_tsec = current->security; +ssize_t len; +char *page = (char *)__get_free_page (GFP_KERNEL );
Do you really need a page here? Why not just use kmalloc()?
-- Dave