From: "Tiezhu Yang" <kernelpatch@126.com>
To: jaegeuk@kernel.org, yuchao0@huawei.com
Cc: linux-f2fs-devel@lists.sourceforge.net
Subject: [PATCH] f2fs: fix return value of f2fs_set_qf_name and parse_options
Date: Sat, 11 Aug 2018 14:49:10 +0800 (CST) [thread overview]
Message-ID: <4a798044.262f.16527bef428.Coremail.kernelpatch@126.com> (raw)
match_strdup() returns NULL when kmalloc failed, so the caller
function f2fs_set_qf_name() should return -ENOMEM in this case;
match_int() returns -ENOMEM, -EINVAL, or -ERANGE on failure,
so the caller function parse_options() should not always return
-EINVAL in this case.
Signed-off-by: Tiezhu Yang <kernelpatch@126.com>
---
fs/f2fs/super.c | 60 +++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 41 insertions(+), 19 deletions(-)
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 53d70b6..bf6505e 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -269,7 +269,7 @@ static int f2fs_set_qf_name(struct super_block *sb, int qtype,
if (!qname) {
f2fs_msg(sb, KERN_ERR,
"Not enough memory for storing quotafile name");
- return -EINVAL;
+ return -ENOMEM;
}
if (F2FS_OPTION(sbi).s_qf_names[qtype]) {
if (strcmp(F2FS_OPTION(sbi).s_qf_names[qtype], qname) == 0)
@@ -366,9 +366,7 @@ static int parse_options(struct super_block *sb, char *options)
int arg = 0;
kuid_t uid;
kgid_t gid;
-#ifdef CONFIG_QUOTA
int ret;
-#endif
if (!options)
return 0;
@@ -452,8 +450,11 @@ static int parse_options(struct super_block *sb, char *options)
clear_opt(sbi, INLINE_XATTR);
break;
case Opt_inline_xattr_size:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
set_opt(sbi, INLINE_XATTR_SIZE);
F2FS_OPTION(sbi).inline_xattr_size = arg;
break;
@@ -491,8 +492,11 @@ static int parse_options(struct super_block *sb, char *options)
break;
#endif
case Opt_active_logs:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
if (arg != 2 && arg != 4 && arg != NR_CURSEG_TYPE)
return -EINVAL;
F2FS_OPTION(sbi).active_logs = arg;
@@ -534,8 +538,11 @@ static int parse_options(struct super_block *sb, char *options)
set_opt(sbi, DATA_FLUSH);
break;
case Opt_reserve_root:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
if (test_opt(sbi, RESERVE_ROOT)) {
f2fs_msg(sb, KERN_INFO,
"Preserve previous reserve_root=%u",
@@ -546,8 +553,11 @@ static int parse_options(struct super_block *sb, char *options)
}
break;
case Opt_resuid:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
uid = make_kuid(current_user_ns(), arg);
if (!uid_valid(uid)) {
f2fs_msg(sb, KERN_ERR,
@@ -557,8 +567,11 @@ static int parse_options(struct super_block *sb, char *options)
F2FS_OPTION(sbi).s_resuid = uid;
break;
case Opt_resgid:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
gid = make_kgid(current_user_ns(), arg);
if (!gid_valid(gid)) {
f2fs_msg(sb, KERN_ERR,
@@ -592,8 +605,11 @@ static int parse_options(struct super_block *sb, char *options)
kfree(name);
break;
case Opt_io_size_bits:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
if (arg > __ilog2_u32(BIO_MAX_PAGES)) {
f2fs_msg(sb, KERN_WARNING,
"Not support %d, larger than %d",
@@ -603,8 +619,11 @@ static int parse_options(struct super_block *sb, char *options)
F2FS_OPTION(sbi).write_io_size_bits = arg;
break;
case Opt_fault_injection:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
#ifdef CONFIG_F2FS_FAULT_INJECTION
f2fs_build_fault_attr(sbi, arg, F2FS_ALL_FAULT_TYPE);
set_opt(sbi, FAULT_INJECTION);
@@ -614,8 +633,11 @@ static int parse_options(struct super_block *sb, char *options)
#endif
break;
case Opt_fault_type:
- if (args->from && match_int(args, &arg))
- return -EINVAL;
+ if (args->from) {
+ ret = match_int(args, &arg);
+ if (ret)
+ return ret;
+ }
#ifdef CONFIG_F2FS_FAULT_INJECTION
f2fs_build_fault_attr(sbi, 0, arg);
set_opt(sbi, FAULT_INJECTION);
--
1.8.3.1
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
next reply other threads:[~2018-08-11 6:49 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-11 6:49 Tiezhu Yang [this message]
2018-08-13 2:55 ` [PATCH] f2fs: fix return value of f2fs_set_qf_name and parse_options Chao Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4a798044.262f.16527bef428.Coremail.kernelpatch@126.com \
--to=kernelpatch@126.com \
--cc=jaegeuk@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=yuchao0@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).