ovl: reserve ability to reconfigure mount options with new mount api
Using the old mount api to remount an overlayfs superblock via mount(MS_REMOUNT) all mount options will be silently ignored. For example, if you create an overlayfs mount: mount -t overlay overlay -o lowerdir=/mnt/a:/mnt/b,upperdir=/mnt/upper,workdir=/mnt/work /mnt/merged and then issue a remount via: # force mount(8) to use mount(2) export LIBMOUNT_FORCE_MOUNT2=always mount -t overlay overlay -o remount,WOOTWOOT,lowerdir=/DOESNT-EXIST /mnt/merged with completely nonsensical mount options whatsoever it will succeed nonetheless. This prevents us from every changing any mount options we might introduce in the future that could reasonably be changed during a remount. We don't need to carry this issue into the new mount api port. Similar to FUSE we can use the fs_context::oldapi member to figure out that this is a request coming through the legacy mount api. If we detect it we continue silently ignoring all mount options. But for the new mount api we simply report that mount options cannot currently be changed. This will allow us to potentially alter mount properties for new or even old properties. It any case, silently ignoring everything is not something new apis should do. Signed-off-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
This commit is contained in:
parent
b36a5780cb
commit
ceecc2d87f
|
@ -499,13 +499,24 @@ static int ovl_parse_param(struct fs_context *fc, struct fs_parameter *param)
|
||||||
struct ovl_fs_context *ctx = fc->fs_private;
|
struct ovl_fs_context *ctx = fc->fs_private;
|
||||||
int opt;
|
int opt;
|
||||||
|
|
||||||
/*
|
if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) {
|
||||||
* On remount overlayfs has always ignored all mount options no
|
/*
|
||||||
* matter if malformed or not so for backwards compatibility we
|
* On remount overlayfs has always ignored all mount
|
||||||
* do the same here.
|
* options no matter if malformed or not so for
|
||||||
*/
|
* backwards compatibility we do the same here.
|
||||||
if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE)
|
*/
|
||||||
return 0;
|
if (fc->oldapi)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Give us the freedom to allow changing mount options
|
||||||
|
* with the new mount api in the future. So instead of
|
||||||
|
* silently ignoring everything we report a proper
|
||||||
|
* error. This is only visible for users of the new
|
||||||
|
* mount api.
|
||||||
|
*/
|
||||||
|
return invalfc(fc, "No changes allowed in reconfigure");
|
||||||
|
}
|
||||||
|
|
||||||
opt = fs_parse(fc, ovl_parameter_spec, param, &result);
|
opt = fs_parse(fc, ovl_parameter_spec, param, &result);
|
||||||
if (opt < 0)
|
if (opt < 0)
|
||||||
|
|
Loading…
Reference in New Issue