reiserfs: check kstrdup failure
Check out-of-memory failure of the kstrdup option. Note that the argument "arg" may be NULL (in that case kstrup returns NULL), so out of memory condition happened if arg was non-NULL and kstrdup returned NULL. The patch also changes the call to replace_mount_options - if we didn't pass any filesystem-specific options, we don't call replace_mount_options (thus we don't erase existing reported options). Note that to properly report options after remount, the reiserfs filesystem should implement the show_options method. Without the show_options method, options changed with remount replace existing options. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
7888824b0b
commit
b9d8905e4a
|
@ -1393,7 +1393,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
|
|||
unsigned long safe_mask = 0;
|
||||
unsigned int commit_max_age = (unsigned int)-1;
|
||||
struct reiserfs_journal *journal = SB_JOURNAL(s);
|
||||
char *new_opts = kstrdup(arg, GFP_KERNEL);
|
||||
char *new_opts;
|
||||
int err;
|
||||
char *qf_names[REISERFS_MAXQUOTAS];
|
||||
unsigned int qfmt = 0;
|
||||
|
@ -1401,6 +1401,10 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
|
|||
int i;
|
||||
#endif
|
||||
|
||||
new_opts = kstrdup(arg, GFP_KERNEL);
|
||||
if (arg && !new_opts)
|
||||
return -ENOMEM;
|
||||
|
||||
sync_filesystem(s);
|
||||
reiserfs_write_lock(s);
|
||||
|
||||
|
@ -1546,7 +1550,8 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
|
|||
}
|
||||
|
||||
out_ok_unlocked:
|
||||
replace_mount_options(s, new_opts);
|
||||
if (new_opts)
|
||||
replace_mount_options(s, new_opts);
|
||||
return 0;
|
||||
|
||||
out_err_unlock:
|
||||
|
|
Loading…
Reference in New Issue