From owner-freebsd-bugs@FreeBSD.ORG Thu Aug 9 19:00:14 2007 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EAD0A16A421 for ; Thu, 9 Aug 2007 19:00:13 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id C951513C478 for ; Thu, 9 Aug 2007 19:00:13 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.1/8.14.1) with ESMTP id l79J0Dbi042619 for ; Thu, 9 Aug 2007 19:00:13 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.1/8.14.1/Submit) id l79J0Dk8042618; Thu, 9 Aug 2007 19:00:13 GMT (envelope-from gnats) Resent-Date: Thu, 9 Aug 2007 19:00:13 GMT Resent-Message-Id: <200708091900.l79J0Dk8042618@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Scot Hetzel Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2844E16A417 for ; Thu, 9 Aug 2007 18:57:27 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 184CD13C465 for ; Thu, 9 Aug 2007 18:57:27 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.1/8.14.1) with ESMTP id l79IvQUS050628 for ; Thu, 9 Aug 2007 18:57:26 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.1/8.14.1/Submit) id l79IvQ7d050627; Thu, 9 Aug 2007 18:57:26 GMT (envelope-from nobody) Message-Id: <200708091857.l79IvQ7d050627@www.freebsd.org> Date: Thu, 9 Aug 2007 18:57:26 GMT From: Scot Hetzel To: freebsd-gnats-submit@FreeBSD.org Cc: Subject: bin/115361: mount gets into a state where it won't set/unset ZFS properties (atime, exec, setuid) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Aug 2007 19:00:14 -0000 >Number: 115361 >Category: bin >Synopsis: mount gets into a state where it won't set/unset ZFS properties (atime, exec, setuid) >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Aug 09 19:00:13 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Scot Hetzel >Release: 7.0-CURRENT >Organization: >Environment: FreeBSD hp010.hetzel.org 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Wed Aug 8 10:38:34 CDT 2007 root@hp010.hetzel.org:/usr/src/7x/sys/amd64/compile/GENERIC.debug amd64 >Description: When using mount to change the mount point options to noatime,noexec,nosuid it will make the change on the mount point. Using zfs get, it will show that atime, and exec are off, but setuid is still on. But then you are unable to unset these options with mount. The atime, noexec, setuid properties can be changed by using either zfs inherit or zfs set. After you have reset them to their defaults, mount will no longer allow these settings to be changed. The only way to set them with mount is to umount the filesystem and remount it. >How-To-Repeat: hp010# umount /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default hp010# zfs mount -a hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) hp010# mount -u -o noexec,nosuid /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec off temporary rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noexec, nosuid) Why doesn't the setuid property change to 'temporary' for rootpool/usr/ports/distfiles? hp010# mount -u -o exec,suid /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec off temporary rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noexec, nosuid) mount can't get rid of these options. hp010# mount -u -o noatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime off temporary rootpool/usr/ports/distfiles exec off temporary rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime, noexec, nosuid) hp010# mount -u -o atime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime off temporary rootpool/usr/ports/distfiles exec off temporary rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime, noexec, nosuid) Same problem with getting rid of noatime. I would have expected mount to be able to be able to change the zfs properties of atime, exec back to on. hp010# zfs inherit -r atime rootpool/usr/ports/distfiles hp010# zfs inherit -r exec rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) hp010# zfs set setuid=off rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid off local rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) We have now set everything back to the default mount options using 'zfs inherit' hp010# mount -u -o noatime,noexec,nosuid /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) Now mount can't set noatime or noexec. hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) Back to the defaults again. This last part gets a bit strange, without umounting /usr/ports/distfiles, I tried the following: hp010# mount -u -o nosuid /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) hp010# zfs set setuid=off rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid off local rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) hp010# mount -u -o noatime,noexec,nosuid /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec off temporary rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noexec, nosuid) hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles hp010# zfs inherit -r exec rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) hp010# mount -u -o noatime,noexec,nosuid /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec off temporary rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noexec, nosuid) It won't set noatime when noexec and nosuid are specified. hp010# mount -u -o noatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) Now it removed noexec, and didn't set noatime. hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) Lets try setting noatime again: hp010# mount -u -o noatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) mount shows nosuid. Lets unset if with zfs inherit: hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) nosuid is gone, lets see if we can now set noatime: hp010# mount -u -o noatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) Again mount is showing nosuid: hp010# mount -u -o nonoatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) hp010# mount -u -o nonosuid /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid) Try nonoatime and nonosuid, but mount still showing nosuid. Using zfs inherit gets rid of nosuid: hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) Give up, and umount the filesystem: hp010# umount /usr/ports/distfiles hp010# zfs mount -a hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) hp010# mount -u -o noatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime off temporary rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime) We can now set noatime, try nonoatime to unset it: hp010# mount -u -o nonoatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime off temporary rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime) That didn't work, does atime work: hp010# mount -u -o atime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime off temporary rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime) Reset atime to defaults with zfs inherit: hp010# zfs inherit -r atime rootpool/usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) Does nonoatime have any side efects now: hp010# mount -u -o nonoatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) No side effect, lets try setting noatime: hp010# mount -u -o noatime /usr/ports/distfiles hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount | grep distfiles NAME PROPERTY VALUE SOURCE rootpool/usr/ports/distfiles atime on default rootpool/usr/ports/distfiles exec on default rootpool/usr/ports/distfiles setuid on default rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local) hp010# Now mount can't set noatime. >Fix: >Release-Note: >Audit-Trail: >Unformatted: X-REMOTE_ADDR-Is-Open-Proxy: Maybe X-Send-Pr-Version: www-3.1 X-GNATS-Notify: