Skip to content

Commit

Permalink
zpl_inode.c: Fix SMACK interoperability
Browse files Browse the repository at this point in the history
  closes: #11646

  ref: #11646 (comment)
  ref: cschaufler/smack-next#1

  SMACK needs to have the ZFS dentry security field setup before SMACK's d_instantiate() hook
    is called as it requires functioning '__vfs_getxattr()' calls to properly set the labels.

  Fixes:
  1) file instantiation properly setting the object label to the subject's label
  2) proper file labelling in a transmutable directory

  Functions Updated:
  1) zpl_create()
  2) zpl_mknod()
  3) zpl_mkdir()
  4) zpl_symlink()

Signed-off-by: TerraTech <TerraTech@users.noreply.github.com>
  • Loading branch information
TerraTech committed Apr 3, 2021
1 parent ec58022 commit b5e40f5
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions module/os/linux/zfs/zpl_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,14 +149,14 @@ zpl_create(struct inode *dir, struct dentry *dentry, umode_t mode, bool flag)
error = -zfs_create(ITOZ(dir), dname(dentry), vap, 0,
mode, &zp, cr, 0, NULL);
if (error == 0) {
d_instantiate(dentry, ZTOI(zp));

error = zpl_xattr_security_init(ZTOI(zp), dir, &dentry->d_name);
if (error == 0)
error = zpl_init_acl(ZTOI(zp), dir);

if (error)
(void) zfs_remove(ITOZ(dir), dname(dentry), cr, 0);
else
d_instantiate(dentry, ZTOI(zp));
}

spl_fstrans_unmark(cookie);
Expand Down Expand Up @@ -198,14 +198,14 @@ zpl_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
error = -zfs_create(ITOZ(dir), dname(dentry), vap, 0,
mode, &zp, cr, 0, NULL);
if (error == 0) {
d_instantiate(dentry, ZTOI(zp));

error = zpl_xattr_security_init(ZTOI(zp), dir, &dentry->d_name);
if (error == 0)
error = zpl_init_acl(ZTOI(zp), dir);

if (error)
(void) zfs_remove(ITOZ(dir), dname(dentry), cr, 0);
else
d_instantiate(dentry, ZTOI(zp));
}

spl_fstrans_unmark(cookie);
Expand Down Expand Up @@ -308,14 +308,14 @@ zpl_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
cookie = spl_fstrans_mark();
error = -zfs_mkdir(ITOZ(dir), dname(dentry), vap, &zp, cr, 0, NULL);
if (error == 0) {
d_instantiate(dentry, ZTOI(zp));

error = zpl_xattr_security_init(ZTOI(zp), dir, &dentry->d_name);
if (error == 0)
error = zpl_init_acl(ZTOI(zp), dir);

if (error)
(void) zfs_rmdir(ITOZ(dir), dname(dentry), NULL, cr, 0);
else
d_instantiate(dentry, ZTOI(zp));
}

spl_fstrans_unmark(cookie);
Expand Down Expand Up @@ -488,11 +488,11 @@ zpl_symlink(struct inode *dir, struct dentry *dentry, const char *name)
error = -zfs_symlink(ITOZ(dir), dname(dentry), vap,
(char *)name, &zp, cr, 0);
if (error == 0) {
d_instantiate(dentry, ZTOI(zp));

error = zpl_xattr_security_init(ZTOI(zp), dir, &dentry->d_name);
if (error)
(void) zfs_remove(ITOZ(dir), dname(dentry), cr, 0);
else
d_instantiate(dentry, ZTOI(zp));
}

spl_fstrans_unmark(cookie);
Expand Down

0 comments on commit b5e40f5

Please sign in to comment.