slim: secfs patch
RFC PATCH 5/8 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 | 69 ++++++++++++++++++++++++++++++++++++ 1 files changed, 69 insertions(+)
security/slim/slm_secfs.c +69 -0
@@ -0,0 +1,69 @@ +/* +* 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 data[28 ]; +if (is_kernel_thread (current)) + len =snprintf (data,sizeof (data),"KERNEL\n" ); +else if (!cur_tsec) + len =snprintf (data,sizeof (data),"UNKNOWN\n" ); +else { +if (cur_tsec->iac_wx != cur_tsec->iac_r) + len =snprintf (data,sizeof (data),"GUARD wx:%s r:%s\n" , + slm_iac_str[cur_tsec->iac_wx], + slm_iac_str[cur_tsec->iac_r]); +else + len =snprintf (data,sizeof (data),"%s\n" , + slm_iac_str[cur_tsec->iac_wx]); + } +return simple_read_from_buffer (buf, buflen, ppos, data, 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 ; +} + +__initcall (slm_init_secfs); + +void __exit slm_cleanup_secfs(void) +{ +securityfs_remove (slim_level); +securityfs_remove (slim_sec_dir); +}