diff options
author | Latchesar Ionkov <lucho@ionkov.net> | 2007-11-06 15:02:53 +0100 |
---|---|---|
committer | Eric Van Hensbergen <ericvh@gmail.com> | 2007-11-06 15:02:53 +0100 |
commit | 8999e04f3b7930f0c6f091a541237de51d8dd372 (patch) | |
tree | 5e47b7b4024928e4e7f35ff584cfdd99d75a29a0 /fs/9p/v9fs.c | |
parent | 9p: fix memory leak in v9fs_get_sb (diff) | |
download | linux-8999e04f3b7930f0c6f091a541237de51d8dd372.tar.xz linux-8999e04f3b7930f0c6f091a541237de51d8dd372.zip |
9p: use copy of the options value instead of original
v9fs_parse_options function uses strsep which modifies the value of the
v9ses->options field. That modified value is later passed to the function
that creates the transport potentially making the transport creation
function to fail.
This patch creates a copy of v9ses->option field that v9fs_parse_options
function uses instead of the original value.
Signed-off-by: Latchesar Ionkov <lucho@ionkov.net>
Acked-by: Eric Van Hensbergen <ericvh@gmail.com>
Diffstat (limited to 'fs/9p/v9fs.c')
-rw-r--r-- | fs/9p/v9fs.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 756f7e9beb2e..fbb12dadba83 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c @@ -82,7 +82,7 @@ static match_table_t tokens = { static void v9fs_parse_options(struct v9fs_session_info *v9ses) { - char *options = v9ses->options; + char *options; substring_t args[MAX_OPT_ARGS]; char *p; int option; @@ -96,9 +96,10 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses) v9ses->cache = 0; v9ses->trans = v9fs_default_trans(); - if (!options) + if (!v9ses->options) return; + options = kstrdup(v9ses->options, GFP_KERNEL); while ((p = strsep(&options, ",")) != NULL) { int token; if (!*p) @@ -169,6 +170,7 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses) continue; } } + kfree(options); } /** |