Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci-2.6.23
Commits
5dd3177a
Commit
5dd3177a
authored
Aug 24, 2006
by
Trond Myklebust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
NFSv4: Fix a use-after-free issue with the nfs server.
Signed-off-by:
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
parent
275a082f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
28 additions
and
18 deletions
+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
No files found.
fs/nfs/client.c
View file @
5dd3177a
...
...
@@ -164,6 +164,26 @@ error_0:
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
View file @
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
View file @
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
View file @
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 */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment