mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
Fix NULL as mount(2) syscall data parameter
Passing NULL for the mount data should not result in EINVAL. It should be treated as if an empty string were passed and succeed. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ned Bass <bass6@llnl.gov> Closes #3771
This commit is contained in:
parent
f52ebcb3eb
commit
66aad10ce8
@ -227,8 +227,7 @@ static const match_table_t zpl_tokens = {
|
||||
};
|
||||
|
||||
static int
|
||||
zpl_parse_option(char *option, int token, substring_t *args,
|
||||
zfs_mntopts_t *zmo, boolean_t isremount)
|
||||
zpl_parse_option(char *option, int token, substring_t *args, zfs_mntopts_t *zmo)
|
||||
{
|
||||
switch (token) {
|
||||
case TOKEN_RO:
|
||||
@ -318,32 +317,34 @@ zpl_parse_options(char *osname, char *mntopts, zfs_mntopts_t *zmo,
|
||||
boolean_t isremount)
|
||||
{
|
||||
zfs_mntopts_t *tmp_zmo;
|
||||
substring_t args[MAX_OPT_ARGS];
|
||||
char *tmp_mntopts, *p;
|
||||
int error, token;
|
||||
|
||||
if (mntopts == NULL)
|
||||
return (-EINVAL);
|
||||
int error;
|
||||
|
||||
tmp_zmo = zfs_mntopts_alloc();
|
||||
tmp_zmo->z_osname = strdup(osname);
|
||||
tmp_mntopts = strdup(mntopts);
|
||||
|
||||
while ((p = strsep(&tmp_mntopts, ",")) != NULL) {
|
||||
if (!*p)
|
||||
continue;
|
||||
if (mntopts) {
|
||||
substring_t args[MAX_OPT_ARGS];
|
||||
char *tmp_mntopts, *p;
|
||||
int token;
|
||||
|
||||
args[0].to = args[0].from = NULL;
|
||||
token = match_token(p, zpl_tokens, args);
|
||||
error = zpl_parse_option(p, token, args, tmp_zmo, isremount);
|
||||
if (error) {
|
||||
zfs_mntopts_free(tmp_zmo);
|
||||
strfree(tmp_mntopts);
|
||||
return (error);
|
||||
tmp_mntopts = strdup(mntopts);
|
||||
|
||||
while ((p = strsep(&tmp_mntopts, ",")) != NULL) {
|
||||
if (!*p)
|
||||
continue;
|
||||
|
||||
args[0].to = args[0].from = NULL;
|
||||
token = match_token(p, zpl_tokens, args);
|
||||
error = zpl_parse_option(p, token, args, tmp_zmo);
|
||||
if (error) {
|
||||
zfs_mntopts_free(tmp_zmo);
|
||||
strfree(tmp_mntopts);
|
||||
return (error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
strfree(tmp_mntopts);
|
||||
strfree(tmp_mntopts);
|
||||
}
|
||||
|
||||
if (isremount == B_TRUE) {
|
||||
if (zmo->z_osname)
|
||||
|
Loading…
Reference in New Issue
Block a user