Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
5dd3177a
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5dd3177a
编写于
8月 24, 2006
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
NFSv4: Fix a use-after-free issue with the nfs server.
Signed-off-by:
N
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
上级
275a082f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
28 addition
and
18 deletion
+28
-18
fs/nfs/client.c
fs/nfs/client.c
+21
-15
fs/nfs/nfs4renewd.c
fs/nfs/nfs4renewd.c
+1
-0
fs/nfs/super.c
fs/nfs/super.c
+5
-3
include/linux/nfs_fs_sb.h
include/linux/nfs_fs_sb.h
+1
-0
未找到文件。
fs/nfs/client.c
浏览文件 @
5dd3177a
...
...
@@ -164,6 +164,26 @@ static struct nfs_client *nfs_alloc_client(const char *hostname,
return
NULL
;
}
static
void
nfs4_shutdown_client
(
struct
nfs_client
*
clp
)
{
#ifdef CONFIG_NFS_V4
if
(
__test_and_clear_bit
(
NFS_CS_RENEWD
,
&
clp
->
cl_res_state
))
nfs4_kill_renewd
(
clp
);
while
(
!
list_empty
(
&
clp
->
cl_unused
))
{
struct
nfs4_state_owner
*
sp
;
sp
=
list_entry
(
clp
->
cl_unused
.
next
,
struct
nfs4_state_owner
,
so_list
);
list_del
(
&
sp
->
so_list
);
kfree
(
sp
);
}
BUG_ON
(
!
list_empty
(
&
clp
->
cl_state_owners
));
if
(
__test_and_clear_bit
(
NFS_CS_IDMAP
,
&
clp
->
cl_res_state
))
nfs_idmap_delete
(
clp
);
#endif
}
/*
* Destroy a shared client record
*/
...
...
@@ -171,21 +191,7 @@ static void nfs_free_client(struct nfs_client *clp)
{
dprintk
(
"--> nfs_free_client(%d)
\n
"
,
clp
->
cl_nfsversion
);
#ifdef CONFIG_NFS_V4
if
(
__test_and_clear_bit
(
NFS_CS_IDMAP
,
&
clp
->
cl_res_state
))
{
while
(
!
list_empty
(
&
clp
->
cl_unused
))
{
struct
nfs4_state_owner
*
sp
;
sp
=
list_entry
(
clp
->
cl_unused
.
next
,
struct
nfs4_state_owner
,
so_list
);
list_del
(
&
sp
->
so_list
);
kfree
(
sp
);
}
BUG_ON
(
!
list_empty
(
&
clp
->
cl_state_owners
));
nfs_idmap_delete
(
clp
);
}
#endif
nfs4_shutdown_client
(
clp
);
/* -EIO all pending I/O */
if
(
!
IS_ERR
(
clp
->
cl_rpcclient
))
...
...
fs/nfs/nfs4renewd.c
浏览文件 @
5dd3177a
...
...
@@ -121,6 +121,7 @@ nfs4_schedule_state_renewal(struct nfs_client *clp)
__FUNCTION__
,
(
timeout
+
HZ
-
1
)
/
HZ
);
cancel_delayed_work
(
&
clp
->
cl_renewd
);
schedule_delayed_work
(
&
clp
->
cl_renewd
,
timeout
);
set_bit
(
NFS_CS_RENEWD
,
&
clp
->
cl_res_state
);
spin_unlock
(
&
clp
->
cl_lock
);
}
...
...
fs/nfs/super.c
浏览文件 @
5dd3177a
...
...
@@ -883,13 +883,15 @@ static int nfs4_get_sb(struct file_system_type *fs_type,
goto
out_free
;
}
if
(
s
->
s_fs_info
!=
server
)
{
nfs_free_server
(
server
);
server
=
NULL
;
}
if
(
!
s
->
s_root
)
{
/* initial superblock/root creation */
s
->
s_flags
=
flags
;
nfs4_fill_super
(
s
);
}
else
{
nfs_free_server
(
server
);
}
mntroot
=
nfs4_get_root
(
s
,
&
mntfh
);
...
...
include/linux/nfs_fs_sb.h
浏览文件 @
5dd3177a
...
...
@@ -19,6 +19,7 @@ struct nfs_client {
#define NFS_CS_RPCIOD 0
/* - rpciod started */
#define NFS_CS_CALLBACK 1
/* - callback started */
#define NFS_CS_IDMAP 2
/* - idmap started */
#define NFS_CS_RENEWD 3
/* - renewd started */
struct
sockaddr_in
cl_addr
;
/* server identifier */
char
*
cl_hostname
;
/* hostname of server */
struct
list_head
cl_share_link
;
/* link in global client list */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录