Skip to content

Commit

Permalink
Linux: Initialize zp in zfs_setattr_dir
Browse files Browse the repository at this point in the history
Fixes #10043

The value of zp is used without having been initialized under some
conditions.

Initialize the pointer to NULL.

Add a regression test case using chown in acl/posix.  However, this is
not enough because the setup sets xattr=sa, which means zfs_setattr_dir
will not be called.  Create a second group of acl tests in acl/posix-sa
duplicating the acl/posix tests with symlinks, and remove xattr=sa from
the original acl/posix tests.  This provides more coverage for the
default xattr=on code.

Signed-off-by: Ryan Moeller <[email protected]>
  • Loading branch information
Ryan Moeller authored and Ryan Moeller committed Oct 7, 2020
1 parent a76e4e6 commit 6d568b1
Show file tree
Hide file tree
Showing 15 changed files with 157 additions and 6 deletions.
1 change: 1 addition & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ AC_CONFIG_FILES([
tests/zfs-tests/tests/functional/Makefile
tests/zfs-tests/tests/functional/acl/Makefile
tests/zfs-tests/tests/functional/acl/posix/Makefile
tests/zfs-tests/tests/functional/acl/posix-sa/Makefile
tests/zfs-tests/tests/functional/alloc_class/Makefile
tests/zfs-tests/tests/functional/arc/Makefile
tests/zfs-tests/tests/functional/atime/Makefile
Expand Down
2 changes: 1 addition & 1 deletion man/man8/zfsprops.8
Original file line number Diff line number Diff line change
Expand Up @@ -1794,7 +1794,7 @@ on platforms which do not support the
feature.
.Pp
The use of system attribute based xattrs is strongly encouraged for users of
SELinux or POSIX ACLs. Both of these features heavily rely of extended
SELinux or POSIX ACLs. Both of these features heavily rely on extended
attributes and benefit significantly from the reduced access time.
.Pp
The values
Expand Down
2 changes: 1 addition & 1 deletion module/os/linux/zfs/zfs_vnops.c
Original file line number Diff line number Diff line change
Expand Up @@ -2543,7 +2543,7 @@ zfs_setattr_dir(znode_t *dzp)
zap_cursor_t zc;
zap_attribute_t zap;
zfs_dirlock_t *dl;
znode_t *zp;
znode_t *zp = NULL;
dmu_tx_t *tx = NULL;
uint64_t uid, gid;
sa_bulk_attr_t bulk[4];
Expand Down
6 changes: 5 additions & 1 deletion tests/runfiles/linux.run
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,13 @@ outputdir = /var/tmp/test_results
tags = ['functional']

[tests/functional/acl/posix:Linux]
tests = ['posix_001_pos', 'posix_002_pos', 'posix_003_pos']
tests = ['posix_001_pos', 'posix_002_pos', 'posix_003_pos', 'posix_004_pos']
tags = ['functional', 'acl', 'posix']

[tests/functional/acl/posix-sa:Linux]
tests = ['posix_001_pos', 'posix_002_pos', 'posix_003_pos', 'posix_004_pos']
tags = ['functional', 'acl', 'posix-sa']

[tests/functional/arc:Linux]
tests = ['dbufstats_001_pos', 'dbufstats_002_pos', 'dbufstats_003_pos',
'arcstats_runtime_tuning']
Expand Down
2 changes: 1 addition & 1 deletion tests/zfs-tests/tests/functional/acl/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ dist_pkgdata_DATA = \
acl.cfg \
acl_common.kshlib

SUBDIRS = posix
SUBDIRS = posix posix-sa
8 changes: 8 additions & 0 deletions tests/zfs-tests/tests/functional/acl/posix-sa/Makefile.am
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/acl/posix-sa
dist_pkgdata_SCRIPTS = \
cleanup.ksh \
setup.ksh \
posix_001_pos.ksh \
posix_002_pos.ksh \
posix_003_pos.ksh \
posix_004_pos.ksh
33 changes: 33 additions & 0 deletions tests/zfs-tests/tests/functional/acl/posix-sa/cleanup.ksh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/ksh -p
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#

. $STF_SUITE/include/libtest.shlib
. $STF_SUITE/tests/functional/acl/acl_common.kshlib

cleanup_user_group

default_cleanup
52 changes: 52 additions & 0 deletions tests/zfs-tests/tests/functional/acl/posix-sa/setup.ksh
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/bin/ksh -p
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#

#
# Copyright (c) 2016 by Delphix. All rights reserved.
#

. $STF_SUITE/include/libtest.shlib
. $STF_SUITE/tests/functional/acl/acl_common.kshlib

log_must getfacl --version
log_must setfacl --version

cleanup_user_group

# Create staff group and add user to it
log_must add_group $ZFS_ACL_STAFF_GROUP
log_must add_user $ZFS_ACL_STAFF_GROUP $ZFS_ACL_STAFF1

DISK=${DISKS%% *}
default_setup_noexit $DISK
log_must chmod 777 $TESTDIR

# Use POSIX ACLs on filesystem
log_must zfs set acltype=posix $TESTPOOL/$TESTFS
log_must zfs set xattr=sa $TESTPOOL/$TESTFS

log_pass
3 changes: 2 additions & 1 deletion tests/zfs-tests/tests/functional/acl/posix/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ dist_pkgdata_SCRIPTS = \
setup.ksh \
posix_001_pos.ksh \
posix_002_pos.ksh \
posix_003_pos.ksh
posix_003_pos.ksh \
posix_004_pos.ksh
49 changes: 49 additions & 0 deletions tests/zfs-tests/tests/functional/acl/posix/posix_004_pos.ksh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/bin/ksh -p
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Portions Copyright 2020 iXsystems, Inc.
#

. $STF_SUITE/include/libtest.shlib
. $STF_SUITE/tests/functional/acl/acl_common.kshlib

#
# DESCRIPTION:
# Verify chown works with POSIX ACLs.
# Regression test for https://github.com/openzfs/zfs/issues/10043
#
# STRATEGY:
# 1. Prepare an appropriate ACL on the test directory
# 2. Change the owner of the directory
#

verify_runnable "both"
log_assert "Verify chown works with POSIX ACLs"

log_must setfacl -d -m u:$ZFS_ACL_STAFF1:rwx $TESTDIR
log_must setfacl -b $TESTDIR

log_must chown $ZFS_ACL_STAFF1 $TESTDIR
log_must chown 0 $TESTDIR

log_pass "chown works with POSIX ACLs"
1 change: 0 additions & 1 deletion tests/zfs-tests/tests/functional/acl/posix/setup.ksh
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,5 @@ log_must chmod 777 $TESTDIR

# Use POSIX ACLs on filesystem
log_must zfs set acltype=posix $TESTPOOL/$TESTFS
log_must zfs set xattr=sa $TESTPOOL/$TESTFS

log_pass

0 comments on commit 6d568b1

Please sign in to comment.