* [PATCH 1/3] Btrfs: add sanity checks regarding to parsing mount options
@ 2013-07-23 5:25 Wang Shilong
2013-07-23 13:04 ` Shilong Wang
0 siblings, 1 reply; 2+ messages in thread
From: Wang Shilong @ 2013-07-23 5:25 UTC (permalink / raw)
To: Linux Btrfs
I just notice the following commands succeed:
mount <dev> <mnt> -o thread_pool=-1
This is ridiculous, only positive thread_pool makes sense,this
patch adds sanity checks for them, and also catches the error of
ENOMEM if allocating memory fails.
Signed-off-by: Wang Shilong<wangsl.fnst@cn.fujitsu.com>
Reviewed-by: Miao Xie<miaox@cn.fujitsu.com>
---
fs/btrfs/super.c | 47 +++++++++++++++++++++++++++++++++++++----------
1 file changed, 37 insertions(+), 10 deletions(-)
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 8eb6191..cc00295 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -496,10 +496,15 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
btrfs_set_opt(info->mount_opt, NOBARRIER);
break;
case Opt_thread_pool:
- intarg = 0;
- match_int(&args[0], &intarg);
- if (intarg)
+ ret = match_int(&args[0], &intarg);
+ if (ret) {
+ goto out;
+ } else if (intarg > 0) {
info->thread_pool_size = intarg;
+ } else {
+ ret = -EINVAL;
+ goto out;
+ }
break;
case Opt_max_inline:
num = match_strdup(&args[0]);
@@ -514,6 +519,9 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
}
printk(KERN_INFO "btrfs: max_inline at %llu\n",
(unsigned long long)info->max_inline);
+ } else {
+ ret = -ENOMEM;
+ goto out;
}
break;
case Opt_alloc_start:
@@ -526,6 +534,9 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
printk(KERN_INFO
"btrfs: allocations start at %llu\n",
(unsigned long long)info->alloc_start);
+ } else {
+ ret = -ENOMEM;
+ goto out;
}
break;
case Opt_noacl:
@@ -540,12 +551,16 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
btrfs_set_opt(info->mount_opt, FLUSHONCOMMIT);
break;
case Opt_ratio:
- intarg = 0;
- match_int(&args[0], &intarg);
- if (intarg) {
+ ret = match_int(&args[0], &intarg);
+ if (ret) {
+ goto out;
+ } else if (intarg >= 0) {
info->metadata_ratio = intarg;
printk(KERN_INFO "btrfs: metadata ratio %d\n",
info->metadata_ratio);
+ } else {
+ ret = -EINVAL;
+ goto out;
}
break;
case Opt_discard:
@@ -596,13 +611,17 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
btrfs_set_opt(info->mount_opt, CHECK_INTEGRITY);
break;
case Opt_check_integrity_print_mask:
- intarg = 0;
- match_int(&args[0], &intarg);
- if (intarg) {
+ ret = match_int(&args[0], &intarg);
+ if (ret) {
+ goto out;
+ } else if (intarg >= 0) {
info->check_integrity_print_mask = intarg;
printk(KERN_INFO "btrfs:"
" check_integrity_print_mask 0x%x\n",
info->check_integrity_print_mask);
+ } else {
+ ret = -EINVAL;
+ goto out;
}
break;
#else
@@ -679,17 +698,25 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags,
case Opt_subvol:
kfree(*subvol_name);
*subvol_name = match_strdup(&args[0]);
+ if (!*subvol_name) {
+ error = -ENOMEM;
+ goto out;
+ }
break;
case Opt_subvolid:
- intarg = 0;
error = match_int(&args[0], &intarg);
if (!error) {
+ goto out;
+ } else if (intarg >= 0) {
/* we want the original fs_tree */
if (!intarg)
*subvol_objectid =
BTRFS_FS_TREE_OBJECTID;
else
*subvol_objectid = intarg;
+ } else {
+ error = -EINVAL;
+ goto out;
}
break;
case Opt_subvolrootid:
-- 1.8.0.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 1/3] Btrfs: add sanity checks regarding to parsing mount options
2013-07-23 5:25 [PATCH 1/3] Btrfs: add sanity checks regarding to parsing mount options Wang Shilong
@ 2013-07-23 13:04 ` Shilong Wang
0 siblings, 0 replies; 2+ messages in thread
From: Shilong Wang @ 2013-07-23 13:04 UTC (permalink / raw)
To: Wang Shilong; +Cc: Linux Btrfs
I am sorry for wrong format patch, please ignore this patchset, i will resend
them later.
Thank,
Wang
2013/7/23 Wang Shilong <wangsl.fnst@cn.fujitsu.com>:
> I just notice the following commands succeed:
> mount <dev> <mnt> -o thread_pool=-1
>
> This is ridiculous, only positive thread_pool makes sense,this
> patch adds sanity checks for them, and also catches the error of
> ENOMEM if allocating memory fails.
>
> Signed-off-by: Wang Shilong<wangsl.fnst@cn.fujitsu.com>
> Reviewed-by: Miao Xie<miaox@cn.fujitsu.com>
> ---
> fs/btrfs/super.c | 47 +++++++++++++++++++++++++++++++++++++----------
> 1 file changed, 37 insertions(+), 10 deletions(-)
>
> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> index 8eb6191..cc00295 100644
> --- a/fs/btrfs/super.c
> +++ b/fs/btrfs/super.c
> @@ -496,10 +496,15 @@ int btrfs_parse_options(struct btrfs_root *root, char
> *options)
> btrfs_set_opt(info->mount_opt, NOBARRIER);
> break;
> case Opt_thread_pool:
> - intarg = 0;
> - match_int(&args[0], &intarg);
> - if (intarg)
> + ret = match_int(&args[0], &intarg);
> + if (ret) {
> + goto out;
> + } else if (intarg > 0) {
> info->thread_pool_size = intarg;
> + } else {
> + ret = -EINVAL;
> + goto out;
> + }
> break;
> case Opt_max_inline:
> num = match_strdup(&args[0]);
> @@ -514,6 +519,9 @@ int btrfs_parse_options(struct btrfs_root *root, char
> *options)
> }
> printk(KERN_INFO "btrfs: max_inline at
> %llu\n",
> (unsigned long
> long)info->max_inline);
> + } else {
> + ret = -ENOMEM;
> + goto out;
> }
> break;
> case Opt_alloc_start:
> @@ -526,6 +534,9 @@ int btrfs_parse_options(struct btrfs_root *root, char
> *options)
> printk(KERN_INFO
> "btrfs: allocations start at
> %llu\n",
> (unsigned long
> long)info->alloc_start);
> + } else {
> + ret = -ENOMEM;
> + goto out;
> }
> break;
> case Opt_noacl:
> @@ -540,12 +551,16 @@ int btrfs_parse_options(struct btrfs_root *root, char
> *options)
> btrfs_set_opt(info->mount_opt, FLUSHONCOMMIT);
> break;
> case Opt_ratio:
> - intarg = 0;
> - match_int(&args[0], &intarg);
> - if (intarg) {
> + ret = match_int(&args[0], &intarg);
> + if (ret) {
> + goto out;
> + } else if (intarg >= 0) {
> info->metadata_ratio = intarg;
> printk(KERN_INFO "btrfs: metadata ratio
> %d\n",
> info->metadata_ratio);
> + } else {
> + ret = -EINVAL;
> + goto out;
> }
> break;
> case Opt_discard:
> @@ -596,13 +611,17 @@ int btrfs_parse_options(struct btrfs_root *root, char
> *options)
> btrfs_set_opt(info->mount_opt, CHECK_INTEGRITY);
> break;
> case Opt_check_integrity_print_mask:
> - intarg = 0;
> - match_int(&args[0], &intarg);
> - if (intarg) {
> + ret = match_int(&args[0], &intarg);
> + if (ret) {
> + goto out;
> + } else if (intarg >= 0) {
> info->check_integrity_print_mask = intarg;
> printk(KERN_INFO "btrfs:"
> " check_integrity_print_mask 0x%x\n",
> info->check_integrity_print_mask);
> + } else {
> + ret = -EINVAL;
> + goto out;
> }
> break;
> #else
> @@ -679,17 +698,25 @@ static int btrfs_parse_early_options(const char
> *options, fmode_t flags,
> case Opt_subvol:
> kfree(*subvol_name);
> *subvol_name = match_strdup(&args[0]);
> + if (!*subvol_name) {
> + error = -ENOMEM;
> + goto out;
> + }
> break;
> case Opt_subvolid:
> - intarg = 0;
> error = match_int(&args[0], &intarg);
> if (!error) {
> + goto out;
> + } else if (intarg >= 0) {
> /* we want the original fs_tree */
> if (!intarg)
> *subvol_objectid =
> BTRFS_FS_TREE_OBJECTID;
> else
> *subvol_objectid = intarg;
> + } else {
> + error = -EINVAL;
> + goto out;
> }
> break;
> case Opt_subvolrootid:
> -- 1.8.0.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-07-23 13:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-23 5:25 [PATCH 1/3] Btrfs: add sanity checks regarding to parsing mount options Wang Shilong
2013-07-23 13:04 ` Shilong Wang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.