Date: Thu, 29 May 2008 07:40:03 GMT From: Ighighi <ighighi@gmail.com> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/122047: [ext2fs] incorrect handling of UF_IMMUTABLE / UF_APPEND flag on EXT2FS (maybe others) Message-ID: <200805290740.m4T7e3G3083501@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/122047; it has been noted by GNATS. From: Ighighi <ighighi@gmail.com> To: bug-followup@freebsd.org Cc: freebsd-fs@freebsd.org. Subject: Re: kern/122047: [ext2fs] incorrect handling of UF_IMMUTABLE / UF_APPEND flag on EXT2FS (maybe others) Date: Thu, 29 May 2008 03:06:30 -0430 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 <sys/lock.h> #include <sys/stat.h> #include <sys/vnode.h> +#include <sys/kernel.h> +#include <sys/sysctl.h> #include <gnu/fs/ext2fs/inode.h> #include <gnu/fs/ext2fs/ext2_fs.h> #include <gnu/fs/ext2fs/ext2_extern.h> +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--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200805290740.m4T7e3G3083501>