Check permissions in zfs_space().

This isn't done on Solaris because on this OS zfs_space() can
only be called with an opened file handle. Since the addition of
zpl_truncate_range() this isn't the case anymore, so we need to
enforce access rights.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #334
This commit is contained in:
Etienne Dechamps 2011-09-02 09:37:53 +02:00 committed by Brian Behlendorf
parent 5cb63a57f8
commit aec69371a6
1 changed files with 11 additions and 0 deletions

View File

@ -4155,6 +4155,17 @@ zfs_space(struct inode *ip, int cmd, flock64_t *bfp, int flag,
return (EINVAL);
}
/*
* Permissions aren't checked on Solaris because on this OS
* zfs_space() can only be called with an opened file handle.
* On Linux we can get here through truncate_range() which
* operates directly on inodes, so we need to check access rights.
*/
if ((error = zfs_zaccess(zp, ACE_WRITE_DATA, 0, B_FALSE, cr))) {
ZFS_EXIT(zsb);
return (error);
}
off = bfp->l_start;
len = bfp->l_len; /* 0 means from off to end of file */