ovl: warn if trusted xattr creation fails
[ Upstream commit b10b85fe5149ee8b39fbbf86095b303632dde2cd ] When mounting overlayfs in an unprivileged user namespace, trusted xattr creation will fail. This will lead to failures in some file operations, e.g. in the following situation: mkdir lower upper work merged mkdir lower/directory mount -toverlay -olowerdir=lower,upperdir=upper,workdir=work none merged rmdir merged/directory mkdir merged/directory The last mkdir will fail: mkdir: cannot create directory 'merged/directory': Input/output error The cause for these failures is currently extremely non-obvious and hard to debug. Hence, warn the user and suggest using the userxattr mount option, if it is not already supplied and xattr creation fails during the self-check. Reported-by: Alois Wohlschlager <alois1@gmx-topmail.de> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
1c5be81573
commit
ea64c14beb
@ -1418,11 +1418,12 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,
|
||||
*/
|
||||
err = ovl_setxattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE, "0", 1);
|
||||
if (err) {
|
||||
pr_warn("failed to set xattr on upper\n");
|
||||
ofs->noxattr = true;
|
||||
if (ofs->config.index || ofs->config.metacopy) {
|
||||
ofs->config.index = false;
|
||||
ofs->config.metacopy = false;
|
||||
pr_warn("upper fs does not support xattr, falling back to index=off,metacopy=off.\n");
|
||||
pr_warn("...falling back to index=off,metacopy=off.\n");
|
||||
}
|
||||
/*
|
||||
* xattr support is required for persistent st_ino.
|
||||
@ -1430,8 +1431,10 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,
|
||||
*/
|
||||
if (ofs->config.xino == OVL_XINO_AUTO) {
|
||||
ofs->config.xino = OVL_XINO_OFF;
|
||||
pr_warn("upper fs does not support xattr, falling back to xino=off.\n");
|
||||
pr_warn("...falling back to xino=off.\n");
|
||||
}
|
||||
if (err == -EPERM && !ofs->config.userxattr)
|
||||
pr_info("try mounting with 'userxattr' option\n");
|
||||
err = 0;
|
||||
} else {
|
||||
ovl_removexattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user