Commit e67f0216 authored by Vivek Goyal's avatar Vivek Goyal Committed by Miklos Szeredi

ovl: clear ATTR_FILE from attr->ia_valid

ovl_setattr() can be passed an attr which has ATTR_FILE set and
attr->ia_file is a file pointer to overlay file. This is done in
open(O_TRUNC) path.

We should either replace with attr->ia_file with underlying file object or
clear ATTR_FILE so that underlying filesystem does not end up using
overlayfs file object pointer.

There are no good use cases yet so for now clear ATTR_FILE. fuse seems to
be one user which can use this. But it can work even without this.  So it
is not mandatory to pass ATTR_FILE to fuse.
Signed-off-by: default avatarVivek Goyal <vgoyal@redhat.com>
Fixes: bccece1e ("ovl: allow remote upper")
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent ae83d0b4
...@@ -58,6 +58,13 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr) ...@@ -58,6 +58,13 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID))
attr->ia_valid &= ~ATTR_MODE; attr->ia_valid &= ~ATTR_MODE;
/*
* We might have to translate ovl file into underlying file
* object once some use cases are there. For now, simply don't
* let underlying filesystem rely on attr->ia_file
*/
attr->ia_valid &= ~ATTR_FILE;
inode_lock(upperdentry->d_inode); inode_lock(upperdentry->d_inode);
old_cred = ovl_override_creds(dentry->d_sb); old_cred = ovl_override_creds(dentry->d_sb);
err = notify_change(upperdentry, attr, NULL); err = notify_change(upperdentry, attr, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment