Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
fe8a0df4
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fe8a0df4
编写于
11月 18, 2011
作者:
J
James Morris
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-1111' of
git://gitorious.org/smack-next/kernel
into for-linus
上级
6aaf05f4
40809565
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
39 addition
and
76 deletion
+39
-76
security/smack/smackfs.c
security/smack/smackfs.c
+39
-76
未找到文件。
security/smack/smackfs.c
浏览文件 @
fe8a0df4
...
...
@@ -102,9 +102,6 @@ static int smk_cipso_doi_value = SMACK_CIPSO_DOI_DEFAULT;
const
char
*
smack_cipso_option
=
SMACK_CIPSO_OPTION
;
#define SEQ_READ_FINISHED ((loff_t)-1)
/*
* Values for parsing cipso rules
* SMK_DIGITLEN: Length of a digit field in a rule.
...
...
@@ -357,10 +354,12 @@ static ssize_t smk_write_load_list(struct file *file, const char __user *buf,
rc
=
count
;
/*
* If this is "load" as opposed to "load-self" and a new rule
* it needs to get added for reporting.
* smk_set_access returns true if there was already a rule
* for the subject/object pair, and false if it was new.
*/
if
(
!
smk_set_access
(
rule
,
rule_list
,
rule_lock
))
{
if
(
load
&&
!
smk_set_access
(
rule
,
rule_list
,
rule_lock
))
{
smlp
=
kzalloc
(
sizeof
(
*
smlp
),
GFP_KERNEL
);
if
(
smlp
!=
NULL
)
{
smlp
->
smk_rule
=
rule
;
...
...
@@ -377,12 +376,12 @@ static ssize_t smk_write_load_list(struct file *file, const char __user *buf,
return
rc
;
}
/*
*
Seq_file read operations for /smack/load
*
Core logic for smackfs seq list operations.
*/
static
void
*
load_seq_start
(
struct
seq_file
*
s
,
loff_t
*
pos
)
static
void
*
smk_seq_start
(
struct
seq_file
*
s
,
loff_t
*
pos
,
struct
list_head
*
head
)
{
struct
list_head
*
list
;
...
...
@@ -390,7 +389,7 @@ static void *load_seq_start(struct seq_file *s, loff_t *pos)
* This is 0 the first time through.
*/
if
(
s
->
index
==
0
)
s
->
private
=
&
smack_rule_list
;
s
->
private
=
head
;
if
(
s
->
private
==
NULL
)
return
NULL
;
...
...
@@ -404,11 +403,12 @@ static void *load_seq_start(struct seq_file *s, loff_t *pos)
return
list
;
}
static
void
*
load_seq_next
(
struct
seq_file
*
s
,
void
*
v
,
loff_t
*
pos
)
static
void
*
smk_seq_next
(
struct
seq_file
*
s
,
void
*
v
,
loff_t
*
pos
,
struct
list_head
*
head
)
{
struct
list_head
*
list
=
v
;
if
(
list_is_last
(
list
,
&
smack_rule_list
))
{
if
(
list_is_last
(
list
,
head
))
{
s
->
private
=
NULL
;
return
NULL
;
}
...
...
@@ -416,6 +416,25 @@ static void *load_seq_next(struct seq_file *s, void *v, loff_t *pos)
return
list
->
next
;
}
static
void
smk_seq_stop
(
struct
seq_file
*
s
,
void
*
v
)
{
/* No-op */
}
/*
* Seq_file read operations for /smack/load
*/
static
void
*
load_seq_start
(
struct
seq_file
*
s
,
loff_t
*
pos
)
{
return
smk_seq_start
(
s
,
pos
,
&
smack_rule_list
);
}
static
void
*
load_seq_next
(
struct
seq_file
*
s
,
void
*
v
,
loff_t
*
pos
)
{
return
smk_seq_next
(
s
,
v
,
pos
,
&
smack_rule_list
);
}
static
int
load_seq_show
(
struct
seq_file
*
s
,
void
*
v
)
{
struct
list_head
*
list
=
v
;
...
...
@@ -446,16 +465,11 @@ static int load_seq_show(struct seq_file *s, void *v)
return
0
;
}
static
void
load_seq_stop
(
struct
seq_file
*
s
,
void
*
v
)
{
/* No-op */
}
static
const
struct
seq_operations
load_seq_ops
=
{
.
start
=
load_seq_start
,
.
next
=
load_seq_next
,
.
show
=
load_seq_show
,
.
stop
=
load
_seq_stop
,
.
stop
=
smk
_seq_stop
,
};
/**
...
...
@@ -574,28 +588,12 @@ static void smk_unlbl_ambient(char *oldambient)
static
void
*
cipso_seq_start
(
struct
seq_file
*
s
,
loff_t
*
pos
)
{
if
(
*
pos
==
SEQ_READ_FINISHED
)
return
NULL
;
if
(
list_empty
(
&
smack_known_list
))
return
NULL
;
return
smack_known_list
.
next
;
return
smk_seq_start
(
s
,
pos
,
&
smack_known_list
);
}
static
void
*
cipso_seq_next
(
struct
seq_file
*
s
,
void
*
v
,
loff_t
*
pos
)
{
struct
list_head
*
list
=
v
;
/*
* labels with no associated cipso value wont be printed
* in cipso_seq_show
*/
if
(
list_is_last
(
list
,
&
smack_known_list
))
{
*
pos
=
SEQ_READ_FINISHED
;
return
NULL
;
}
return
list
->
next
;
return
smk_seq_next
(
s
,
v
,
pos
,
&
smack_known_list
);
}
/*
...
...
@@ -634,16 +632,11 @@ static int cipso_seq_show(struct seq_file *s, void *v)
return
0
;
}
static
void
cipso_seq_stop
(
struct
seq_file
*
s
,
void
*
v
)
{
/* No-op */
}
static
const
struct
seq_operations
cipso_seq_ops
=
{
.
start
=
cipso_seq_start
,
.
stop
=
cipso_seq_stop
,
.
next
=
cipso_seq_next
,
.
show
=
cipso_seq_show
,
.
stop
=
smk_seq_stop
,
};
/**
...
...
@@ -788,23 +781,12 @@ static const struct file_operations smk_cipso_ops = {
static
void
*
netlbladdr_seq_start
(
struct
seq_file
*
s
,
loff_t
*
pos
)
{
if
(
*
pos
==
SEQ_READ_FINISHED
)
return
NULL
;
if
(
list_empty
(
&
smk_netlbladdr_list
))
return
NULL
;
return
smk_netlbladdr_list
.
next
;
return
smk_seq_start
(
s
,
pos
,
&
smk_netlbladdr_list
);
}
static
void
*
netlbladdr_seq_next
(
struct
seq_file
*
s
,
void
*
v
,
loff_t
*
pos
)
{
struct
list_head
*
list
=
v
;
if
(
list_is_last
(
list
,
&
smk_netlbladdr_list
))
{
*
pos
=
SEQ_READ_FINISHED
;
return
NULL
;
}
return
list
->
next
;
return
smk_seq_next
(
s
,
v
,
pos
,
&
smk_netlbladdr_list
);
}
#define BEBITS (sizeof(__be32) * 8)
...
...
@@ -828,16 +810,11 @@ static int netlbladdr_seq_show(struct seq_file *s, void *v)
return
0
;
}
static
void
netlbladdr_seq_stop
(
struct
seq_file
*
s
,
void
*
v
)
{
/* No-op */
}
static
const
struct
seq_operations
netlbladdr_seq_ops
=
{
.
start
=
netlbladdr_seq_start
,
.
stop
=
netlbladdr_seq_stop
,
.
next
=
netlbladdr_seq_next
,
.
show
=
netlbladdr_seq_show
,
.
stop
=
smk_seq_stop
,
};
/**
...
...
@@ -1405,23 +1382,14 @@ static void *load_self_seq_start(struct seq_file *s, loff_t *pos)
{
struct
task_smack
*
tsp
=
current_security
();
if
(
*
pos
==
SEQ_READ_FINISHED
)
return
NULL
;
if
(
list_empty
(
&
tsp
->
smk_rules
))
return
NULL
;
return
tsp
->
smk_rules
.
next
;
return
smk_seq_start
(
s
,
pos
,
&
tsp
->
smk_rules
);
}
static
void
*
load_self_seq_next
(
struct
seq_file
*
s
,
void
*
v
,
loff_t
*
pos
)
{
struct
task_smack
*
tsp
=
current_security
();
struct
list_head
*
list
=
v
;
if
(
list_is_last
(
list
,
&
tsp
->
smk_rules
))
{
*
pos
=
SEQ_READ_FINISHED
;
return
NULL
;
}
return
list
->
next
;
return
smk_seq_next
(
s
,
v
,
pos
,
&
tsp
->
smk_rules
);
}
static
int
load_self_seq_show
(
struct
seq_file
*
s
,
void
*
v
)
...
...
@@ -1453,16 +1421,11 @@ static int load_self_seq_show(struct seq_file *s, void *v)
return
0
;
}
static
void
load_self_seq_stop
(
struct
seq_file
*
s
,
void
*
v
)
{
/* No-op */
}
static
const
struct
seq_operations
load_self_seq_ops
=
{
.
start
=
load_self_seq_start
,
.
next
=
load_self_seq_next
,
.
show
=
load_self_seq_show
,
.
stop
=
load_self
_seq_stop
,
.
stop
=
smk
_seq_stop
,
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录