From owner-freebsd-fs@FreeBSD.ORG Thu May 29 07:37:07 2008 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A86E51065675 for ; Thu, 29 May 2008 07:37:07 +0000 (UTC) (envelope-from ighighi@gmail.com) Received: from hs-out-0708.google.com (hs-out-0708.google.com [64.233.178.245]) by mx1.freebsd.org (Postfix) with ESMTP id 6411B8FC18 for ; Thu, 29 May 2008 07:37:07 +0000 (UTC) (envelope-from ighighi@gmail.com) Received: by hs-out-0708.google.com with SMTP id 4so2465348hsl.1 for ; Thu, 29 May 2008 00:37:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:user-agent:mime-version:to:cc:subject:content-type; bh=zGaMqIJUajmB7MJ1JHvsaJq9qyVdmKRD3aTN7ApBib8=; b=SKnBL93gmBSmSalLJnfr6MMoG3mX9gourRaYA9SjU6g+LxUbVXtnR5KZFCYnlu4ha59GlOs+n/ZfoptCe9OEGfGK5IpkZDW+6N50fqDjVFJHbB3TMWzl4bO8LMVZVuKvhgiIOTCdiz5+QXPgu8oVDAHVc7xh7sBunQ4zh36EHDM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject:content-type; b=OR/k0fKCviS/93FrVTLLGG+ZFwBwc0MQHB+6+2jZybyVvlwmzFe79GpBA80spdQL0SduRnrmlh2thQ4v5wo6kjPYPLP7SFCKJrMuV6c0m2zNNZ1Ju4nSO6UTTFBwv4LYVPx3YHWMvcBUlU/ZKrvkWVwFyaqOKQYVwbXAdZvpWno= Received: by 10.90.102.8 with SMTP id z8mr4874056agb.53.1212046626503; Thu, 29 May 2008 00:37:06 -0700 (PDT) Received: from orion.nebula.mil ( [200.82.219.99]) by mx.google.com with ESMTPS id 34sm328583agc.9.2008.05.29.00.36.58 (version=TLSv1/SSLv3 cipher=RC4-MD5); Thu, 29 May 2008 00:37:04 -0700 (PDT) Message-ID: <483E5CFE.7030807@gmail.com> Date: Thu, 29 May 2008 03:06:30 -0430 From: Ighighi User-Agent: Thunderbird 2.0.0.14 (X11/20080504) MIME-Version: 1.0 To: bug-followup@freebsd.org Content-Type: multipart/mixed; boundary="------------010600060401000202060602" Cc: freebsd-fs@freebsd.org. Subject: Re: kern/122047: [ext2fs] incorrect handling of UF_IMMUTABLE / UF_APPEND flag on EXT2FS (maybe others) X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 May 2008 07:37:07 -0000 This is a multi-part message in MIME format. --------------010600060401000202060602 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit See attached patch. Gmail sucks at sending patches to GNATS =( --------------010600060401000202060602 Content-Type: text/plain; name="ext2fs.patch.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ext2fs.patch.txt" # # (!c) 2008 by Ighighi # # See http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/122047 # # This patch adds a "vfs.e2fs.userflags" sysctl to permit regular users # to set/clear the APPEND/IMMUTABLE filesystem flags on EXT2 filesystems. # As a bonus, it also sets st_birthtime to zero. # # Built and tested on FreeBSD 6.3-STABLE (RELENG_6). # Known to patch on -CURRENT # # To install, run as root: # /sbin/umount -v -t ext2fs -a # /sbin/kldunload -v ext2fs # /usr/bin/patch -d /usr < /path/to/ext2fs.patch # cd /sys/modules/ext2fs/ # make clean obj depend && make && make install # /sbin/kldload -v ext2fs # /sbin/sysctl vfs.e2fs.userflags=1 # 0 is default # /sbin/mount -v -t ext2fs -a # --- src/sys/gnu/fs/ext2fs/ext2_inode_cnv.c.orig 2005-06-14 22:36:10.000000000 -0400 +++ src/sys/gnu/fs/ext2fs/ext2_inode_cnv.c 2008-05-28 15:15:27.527318854 -0430 @@ -30,11 +30,19 @@ #include #include #include +#include +#include #include #include #include +SYSCTL_DECL(_vfs_e2fs); + +static int userflags = 0; +SYSCTL_INT(_vfs_e2fs, OID_AUTO, userflags, CTLFLAG_RW, + &userflags, 0, "Users may set/clear filesystem flags"); + void ext2_print_inode( in ) struct inode *in; @@ -83,8 +91,17 @@ ext2_ei2i(ei, ip) ip->i_mtime = ei->i_mtime; ip->i_ctime = ei->i_ctime; ip->i_flags = 0; - ip->i_flags |= (ei->i_flags & EXT2_APPEND_FL) ? APPEND : 0; - ip->i_flags |= (ei->i_flags & EXT2_IMMUTABLE_FL) ? IMMUTABLE : 0; + if (userflags) { + if (ei->i_flags & EXT2_APPEND_FL) + ip->i_flags |= UF_APPEND; + if (ei->i_flags & EXT2_IMMUTABLE_FL) + ip->i_flags |= UF_IMMUTABLE; + } else { + if (ei->i_flags & EXT2_APPEND_FL) + ip->i_flags |= APPEND; + if (ei->i_flags & EXT2_IMMUTABLE_FL) + ip->i_flags |= IMMUTABLE; + } ip->i_blocks = ei->i_blocks; ip->i_gen = ei->i_generation; ip->i_uid = ei->i_uid; --- src/sys/gnu/fs/ext2fs/ext2_lookup.c.orig 2006-01-04 15:32:00.000000000 -0400 +++ src/sys/gnu/fs/ext2fs/ext2_lookup.c 2008-05-28 13:35:16.841349269 -0430 @@ -66,7 +66,7 @@ static int dirchk = 1; static int dirchk = 0; #endif -static SYSCTL_NODE(_vfs, OID_AUTO, e2fs, CTLFLAG_RD, 0, "EXT2FS filesystem"); +SYSCTL_NODE(_vfs, OID_AUTO, e2fs, CTLFLAG_RW, 0, "EXT2FS filesystem"); SYSCTL_INT(_vfs_e2fs, OID_AUTO, dircheck, CTLFLAG_RW, &dirchk, 0, ""); /* --- src/sys/gnu/fs/ext2fs/ext2_vnops.c.orig 2006-02-19 20:53:14.000000000 -0400 +++ src/sys/gnu/fs/ext2fs/ext2_vnops.c 2008-05-28 07:58:02.189157441 -0430 @@ -358,6 +358,8 @@ ext2_getattr(ap) vap->va_mtime.tv_nsec = ip->i_mtimensec; vap->va_ctime.tv_sec = ip->i_ctime; vap->va_ctime.tv_nsec = ip->i_ctimensec; + vap->va_birthtime.tv_sec = 0; + vap->va_birthtime.tv_nsec = 0; vap->va_flags = ip->i_flags; vap->va_gen = ip->i_gen; vap->va_blocksize = vp->v_mount->mnt_stat.f_iosize; --------------010600060401000202060602--