From owner-freebsd-hackers Mon Jan 6 8:37:30 2003 Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 00BFD37B401 for ; Mon, 6 Jan 2003 08:37:29 -0800 (PST) Received: from HAL9000.homeunix.com (12-233-57-224.client.attbi.com [12.233.57.224]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2413143ED1 for ; Mon, 6 Jan 2003 08:37:28 -0800 (PST) (envelope-from dschultz@uclink.Berkeley.EDU) Received: from HAL9000.homeunix.com (localhost [127.0.0.1]) by HAL9000.homeunix.com (8.12.6/8.12.5) with ESMTP id h06GbNcA000902; Mon, 6 Jan 2003 08:37:23 -0800 (PST) (envelope-from dschultz@uclink.Berkeley.EDU) Received: (from das@localhost) by HAL9000.homeunix.com (8.12.6/8.12.5/Submit) id h06GbNfh000901; Mon, 6 Jan 2003 08:37:23 -0800 (PST) (envelope-from dschultz@uclink.Berkeley.EDU) Date: Mon, 6 Jan 2003 08:37:23 -0800 From: David Schultz To: Pawel Jakub Dawidek Cc: Terry Lambert , freebsd-hackers@FreeBSD.ORG Subject: Re: Caching [sugestion]. Message-ID: <20030106163723.GA721@HAL9000.homeunix.com> Mail-Followup-To: Pawel Jakub Dawidek , Terry Lambert , freebsd-hackers@FreeBSD.ORG References: <20030105215024.GB99855@prioris.mini.pw.edu.pl> <3E18B97A.32ABAE7@mindspring.com> <20030106074005.GB6825@prioris.mini.pw.edu.pl> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030106074005.GB6825@prioris.mini.pw.edu.pl> Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Thus spake Pawel Jakub Dawidek : > On Sun, Jan 05, 2003 at 03:02:18PM -0800, Terry Lambert wrote: > +> This is a much larger problem than you make it out to be. > > Yes, right, using vnodes is bad idea, sorry. > > I'll describe my problem precisely. > I'm writing kld module where it have to be done. > I got two choices: > - getting path from cache, but this don't give me 100% sure > that I'll get this path (even if it exists), > - (ugly to) catch syscalls: > + open(), > + chdir(), > + fchdir(), > + execve(), > add two my functions to at_exit() and at_fork() and > (this is ugly as fuck) remember and switch functions > that are called on descriptor close > (p->p_fd->fd_ofiles[X]->f_ops->fo_close()). [...] > So I'm not able to create policy rules based on filenames. You still haven't explained exactly what you're trying to do, but you may wish to look into Niels Provos' Systrace. It should give you a good example of how to do system call interposition in the kernel, and it has been ported to all three BSDs. http://www.citi.umich.edu/u/provos/systrace/ It sounds like you're trying to do something complicated with chdir, and that could make things harder. First of all, you should be comparing vnodes instead of pathnames when possible, in order to avoid canonicalization bugs. Second, it only makes sense to ask for the path of a directory vnode, since ordinary files can have multiple hard links. For directories, you can get the full path by walking up the '..' pointers, sort of like vn_fullpath(), except that you have to do a lookup if something is missing from the cache. I expect locking would be a pain as well. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message