Ricardo Correia wrote:
> Hi,
> 
> I'm having a problem with a simple sanity check performed by 'iozone -a'.
> 
> Basically, iozone create a file with a permission value of 0 and then it 
> tries 
> to truncate it:
> 
> 1) fd = open("file", O_WRONLY|O_CREAT, 0)
> 2) ftruncate(fd, 0)
> 
> In zfs-fuse, the ftruncate() call ends up calling zfs_setattr() with AT_SIZE 
> set in the attribute mask.
> 
> The problem is that one of the first things zfs_setattr() does is validate 
> the 
> permissions (by calling zfs_zaccess()), which fails since the file owner 
> doesn't have write permission.
> 
> What am I doing wrong here? iozone seems to work in Solaris.

ftruncate/truncate on Solaris are implemented via the F_FREESP command 
in fcntl(2). This ultimately calls VOP_SPACE() which doesn't need to do 
any access checks since the file was already opened with the necessary 
"write" permission.

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/syscall/fcntl.c#546

Do any ACL check in this situation is not going to work, unless the user 
has appropriate privileges to override the permissions on the ACL.

  -Mark


Reply via email to