From owner-freebsd-hackers Tue Jun 15 13:55:50 1999 Delivered-To: freebsd-hackers@freebsd.org Received: from apollo.backplane.com (apollo.backplane.com [209.157.86.2]) by hub.freebsd.org (Postfix) with ESMTP id CBADB156D6; Tue, 15 Jun 1999 13:55:45 -0700 (PDT) (envelope-from dillon@apollo.backplane.com) Received: (from dillon@localhost) by apollo.backplane.com (8.9.3/8.9.1) id NAA20771; Tue, 15 Jun 1999 13:55:42 -0700 (PDT) (envelope-from dillon) Date: Tue, 15 Jun 1999 13:55:42 -0700 (PDT) From: Matthew Dillon Message-Id: <199906152055.NAA20771@apollo.backplane.com> To: Matthew Jacob Cc: Guido van Rooij , freebsd-hackers@FreeBSD.ORG, peter@FreeBSD.ORG Subject: Holy cow - path component freeing a mess? (was Re: D'oh!) References: Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG This is totally screwed up: The rules used to determine whether a path component buffer ( struct componentname, sys/namei.h ) is freed by a VOP routine or not are idiotic. As far as I can tell, the rule is: * if no error is returned free the path component buffer, but only if the SAVESTART flag is not set. * If an error is returned, free the path component buffer whether SAVESTART is set or not. Combine this with the callers which decide whether to set SAVESTART, and the result is an extremely fragile mess. Combine this with VOP_ABORTOP's operation ( which frees the path component if SAVESTART is not set ) and it gets even worse. Confused yet? At the very least, anyone who zfree's a path component should clear the HASBUF flag so sanity checks can be added to the code. The nfs_serv.c code is unnecessarily complex due to this junkiness. I would like to fix this in the tree and add sanity checks. -Matt Matthew Dillon To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message