2018-06-13 04:06:19

by Chengguang Xu

[permalink] [raw]
Subject: [PATCH 1/2] fs/exofs: fix potential memory leak in mount option parsing

There are some cases can cause memory leak when parsing
option 'osdname'.

Signed-off-by: Chengguang Xu <[email protected]>
---
fs/exofs/super.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/fs/exofs/super.c b/fs/exofs/super.c
index 719a315..f3e17a9 100644
--- a/fs/exofs/super.c
+++ b/fs/exofs/super.c
@@ -101,6 +101,7 @@ static int parse_options(char *options, struct exofs_mountopt *opts)
token = match_token(p, tokens, args);
switch (token) {
case Opt_name:
+ kfree(opts->dev_name);
opts->dev_name = match_strdup(&args[0]);
if (unlikely(!opts->dev_name)) {
EXOFS_ERR("Error allocating dev_name");
@@ -867,8 +868,10 @@ static struct dentry *exofs_mount(struct file_system_type *type,
int ret;

ret = parse_options(data, &opts);
- if (ret)
+ if (ret) {
+ kfree(opts.dev_name);
return ERR_PTR(ret);
+ }

if (!opts.dev_name)
opts.dev_name = dev_name;
--
1.8.3.1



2018-06-13 04:08:31

by Chengguang Xu

[permalink] [raw]
Subject: [PATCH 2/2] fs/exofs: only use true/false for asignment of bool type variable

Signed-off-by: Chengguang Xu <[email protected]>
---
fs/exofs/super.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/exofs/super.c b/fs/exofs/super.c
index f3e17a9..75b5db0 100644
--- a/fs/exofs/super.c
+++ b/fs/exofs/super.c
@@ -118,7 +118,7 @@ static int parse_options(char *options, struct exofs_mountopt *opts)
EXOFS_MIN_PID);
return -EINVAL;
}
- s_pid = 1;
+ s_pid = true;
break;
case Opt_to:
if (match_int(&args[0], &option))
--
1.8.3.1


2018-06-21 02:15:51

by Chengguang Xu

[permalink] [raw]
Subject: Re: [PATCH 1/2] fs/exofs: fix potential memory leak in mount option parsing

Hi Boaz,

Could you have a look at this trivial patch?

Thanks,
Chengguang.

On 06/13/2018 12:05 PM, Chengguang Xu wrote:
> There are some cases can cause memory leak when parsing
> option 'osdname'.
>
> Signed-off-by: Chengguang Xu <[email protected]>
> ---
> fs/exofs/super.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/fs/exofs/super.c b/fs/exofs/super.c
> index 719a315..f3e17a9 100644
> --- a/fs/exofs/super.c
> +++ b/fs/exofs/super.c
> @@ -101,6 +101,7 @@ static int parse_options(char *options, struct exofs_mountopt *opts)
> token = match_token(p, tokens, args);
> switch (token) {
> case Opt_name:
> + kfree(opts->dev_name);
> opts->dev_name = match_strdup(&args[0]);
> if (unlikely(!opts->dev_name)) {
> EXOFS_ERR("Error allocating dev_name");
> @@ -867,8 +868,10 @@ static struct dentry *exofs_mount(struct file_system_type *type,
> int ret;
>
> ret = parse_options(data, &opts);
> - if (ret)
> + if (ret) {
> + kfree(opts.dev_name);
> return ERR_PTR(ret);
> + }
>
> if (!opts.dev_name)
> opts.dev_name = dev_name;