Fix races around the access to ->s_options
Put generic_show_options read access to s_options under rcu_read_lock, split save_mount_options() into "we are setting it the first time" (uses in foo_fill_super()) and "we are relacing and freeing the old one", synchronize_rcu() before kfree() in the latter. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -408,17 +408,17 @@ static int afs_get_sb(struct file_system_type *fs_type,
|
||||
deactivate_locked_super(sb);
|
||||
goto error;
|
||||
}
|
||||
sb->s_options = new_opts;
|
||||
save_mount_options(sb, new_opts);
|
||||
sb->s_flags |= MS_ACTIVE;
|
||||
} else {
|
||||
_debug("reuse");
|
||||
kfree(new_opts);
|
||||
ASSERTCMP(sb->s_flags, &, MS_ACTIVE);
|
||||
}
|
||||
|
||||
simple_set_mnt(mnt, sb);
|
||||
afs_put_volume(params.volume);
|
||||
afs_put_cell(params.cell);
|
||||
kfree(new_opts);
|
||||
_leave(" = 0 [%p]", sb);
|
||||
return 0;
|
||||
|
||||
|
Reference in New Issue
Block a user