From owner-p4-projects@FreeBSD.ORG Wed Jul 24 14:44:29 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1810213A; Wed, 24 Jul 2013 14:44:29 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id CDBA3138 for ; Wed, 24 Jul 2013 14:44:28 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BB568238D for ; Wed, 24 Jul 2013 14:44:28 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6OEiSJ7060817 for ; Wed, 24 Jul 2013 14:44:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6OEiSZF060814 for perforce@freebsd.org; Wed, 24 Jul 2013 14:44:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 24 Jul 2013 14:44:28 GMT Message-Id: <201307241444.r6OEiSZF060814@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231416 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jul 2013 14:44:29 -0000 http://p4web.freebsd.org/@@231416?ac=10 Change 231416 by rwatson@rwatson_cinnamon on 2013/07/24 14:43:40 Allow FFS read and write VOPs if a previous call to vn_rdwr() on the same vnode passed the IO_NOMACCHECK flag. Unfortunately we can't specify the UIO_READ or UIO_WRITE flag arguments as enum constants aren't yet allowed in TESLA expressions. Using vn_rdwr() is preferable to white-listing specific code paths, as the programmer has already let us know that the path is exmempt from MAC checking, so quite a bit more compact. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#16 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#16 (text+ko) ==== @@ -441,10 +441,14 @@ vp = ap->a_vp; #ifdef MAC #ifdef TESLA_MAC - TESLA_SYSCALL(incallstack(ufs_readdir) || + TESLA_SYSCALL( + incallstack(ufs_readdir) || + previously(called(vn_rdwr(ANY(int), vp, ANY(ptr), ANY(int), + ANY(int), ANY(int), flags(IO_NOMACCHECK), ANY(ptr), ANY(ptr), + ANY(ptr), ANY(ptr)))) || previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); - TESLA_PAGE_FAULT(incallstack(ufs_readdir) || - previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); + TESLA_PAGE_FAULT(previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), + vp) == 0)); #endif #endif @@ -671,8 +675,11 @@ vp = ap->a_vp; #ifdef MAC #ifdef TESLA_MAC - TESLA_SYSCALL(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) - == 0)); + TESLA_SYSCALL( + previously(called(vn_rdwr(ANY(int), vp, ANY(ptr), ANY(int), + ANY(int), ANY(int), flags(IO_NOMACCHECK), ANY(ptr), ANY(ptr), + ANY(ptr), ANY(ptr)))) || + previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0)); TESLA_PAGE_FAULT(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0)); #endif