Date: Fri, 21 Mar 2008 13:44:43 +1100 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Andy Christianson <achristianson@orases.com> Cc: freebsd-bugs@FreeBSD.org Subject: Re: random st_birthtime Message-ID: <20080321130531.R58941@delplex.bde.org> In-Reply-To: <776B93361B7BEE4FAD9E720FFBC746B6BDDB63@34093-EVS4C2.exchange.rackspace.com> References: <776B93361B7BEE4FAD9E720FFBC746B6BDDB63@34093-EVS4C2.exchange.rackspace.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 20 Mar 2008, Andy Christianson wrote: > I am running FreeBSD 7.0-RELEASE AMD64 on a dual dual-core xeon system, > and I am having an odd problem with non-UFS filesystems. Any mounted > filesystem that is not UFS will return a random, negative st_birthtime. > Also, each time I stat the file I get a different value. va_birthtime is used uninitialized for most file systems. This gives minor security holes -- kernel stack garbage is returned to userland. The stack garbage is pointed to in vn_stat() and nothing changes it for some file systems. > The two mounted filesystems with this problem are ext2fs and smbfs. Yes, these are 2 of many which weren't updated when birthtime was added. msdosfs is the only file system which initializes unsupported birthtimes correctly. It sets va_birthtime.tv_sec to -1, which becomes (time_t)-1, which is the error value for a time_t though it is often misinterpreted as 1 second before the Epoch. Most other file systems are wrong: - ffs1 sets va_birthtime.tv_sec to the non-error value 0 (the Epoch) - boot/efi/libefi/efifs.c sets st_birthtime to st_ctime and bzero's tv_nsec for all times. This seems to be correct for st_birthtime but wrong for st_ctime, since both are initialized to a creation time (fi.info.CreateTime) and no change ime seems to be available. msdosfs used to have a similar bug (msdsosfs file systems never have ctimes, but the sometimes have creation times; when available, the creation time was confused with the change time and converted to va_ctime but va_birthtime was not initialized). ctimes should be initialized to mtimes (or better max(all times available)), not birthtimes, if no real change times are available. - zfs, tmpfs, mqfs, shm seem to support birthtimes unconditionally and correctly. - nfsv4 initializes va_birthtime iff the server supports FA4_BTIME for the given file. The FreeBSD nfsv3 server doesn't support FA4_BTIME for any file. The nfsv4 interface is missing the style bug in naming btimes. Its names for file times are consistent: [abcm]time where FreeBSD uses [acm]time and [acm]time and birthtime. - no other file system references va_birthtime. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080321130531.R58941>