Re: New reflink(2) syscall

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 4 May 2009, Stephen Smalley wrote:

[added fsdevel to this thread..]

> > 
> > http://marc.info/?l=linux-fsdevel&m=124133134306871&w=2
> > http://marc.info/?l=linux-fsdevel&m=124133137106901&w=2
> > http://marc.info/?l=linux-fsdevel&m=124133134406874&w=2
> > 
> > We need to determine if the security hooks included are appropriate, and 
> > provide feedback (I've asked the author to cc this list with future 
> > postings).
> > 
> > In summary, reflink(2) has an interface similar to link(2), but creates a 
> > new file with copy on write semantics.
> > 
> > The existing LSM hooks are security_path_mknod() and 
> > security_inode_create(), as well as security_inode_permission() via 
> > may_create().
> > 
> > For SELinux, at least, it seems we may need another check to control 
> > information flow from the source file to the new file, which may be 
> > instantiated with a different security context.
> 
> The reflink(2) documentation in patch 1/3 suggests that the security
> context of the new file would be initially identical to the original
> file ("All file attributes and extended attributes of the new file must
> be identical to the source file...").  

Ok (I missed the extended attribute mention initially).

> In that case, security_inode_create() is not the right hook to use as
> security_inode_create() presumes that the new file is labeled based on
> the creating process and the parent directory and that the filesystem
> will use the security attribute name:value pair returned by
> security_inode_init_security() as the initial attribute for the new
> file.
> 
> It sounds like reflink(2) is more akin to copying a file while
> preserving attributes (ala cp -a foo bar), only performing the actual
> copying lazily.  In the case of a normal file copy while preserving
> attributes, we would check that the process can open and read the
> original file, write to the target directory, create a file with the
> security context of the original file, and set the mode/owner/timestamps
> of the new file.  That sequence of checks however is based on the
> presumption that the data flows through the process, potentially being
> mutated by it, and that we don't directly see the inter-file
> relationship in the kernel.  With direct kernel support for file 
> copying, we may want a different set of checks. 

What's fundamentally different, though, that the process would only be 
able to then modify the data in a subsequent syscall?

> I think we likely need a new security hook.

Agreed, perhaps something like:

int security_inode_reflink(struct dentry *dentry, struct inode *dir);


> BTW, the DAC permission checking here also needs some thought, and 
> wouldn't be handled by the LSM hook.  Should reflink(2) require DAC read 
> permission to the file, like a file copy would?

Yes -- it seems all you need to be able to do at the moment is lookup the 
original file for the syscall to work from that end.

> And if the owner of the original differs from the fsuid of the current 
> process, should reflink(2) require CAP_CHOWN in order to set the 
> ownership of the copy to the original's owner?

Good question :-)

Also, do we ignore create_sid in SELinux for this?


- James
-- 
James Morris
<jmorris@xxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux