Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 03 Jun 2011 15:24:56 +0000
From:      aalvarez@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r222768 - soc2011/aalvarez/pbmac/sys/security/mac_bsdextended
Message-ID:  <20110603152456.B9B01106564A@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: aalvarez
Date: Fri Jun  3 15:24:56 2011
New Revision: 222768
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=222768

Log:
  - Lock vnode to get vattr
  - free fpath string if there's an error
  - return error code
  

Modified:
  soc2011/aalvarez/pbmac/sys/security/mac_bsdextended/mac_bsdextended.c

Modified: soc2011/aalvarez/pbmac/sys/security/mac_bsdextended/mac_bsdextended.c
==============================================================================
--- soc2011/aalvarez/pbmac/sys/security/mac_bsdextended/mac_bsdextended.c	Fri Jun  3 14:57:38 2011	(r222767)
+++ soc2011/aalvarez/pbmac/sys/security/mac_bsdextended/mac_bsdextended.c	Fri Jun  3 15:24:56 2011	(r222768)
@@ -148,15 +148,15 @@
 		return EINVAL;
 
 	ruleptr->mbr_object.mbo_fpath_len = temprule->mbr_object.mbo_fpath_len;
-	ruleptr = malloc(sizeof(char)*ruleptr->mbr_object.mbo_fpath_len,
+	ruleptr->mbr_object.mbo_fpath = malloc(sizeof(char)*(ruleptr->mbr_object.mbo_fpath_len+1),
 	    M_MACBSDEXTENDED, M_WAITOK);
 
 	KASSERT(ruleptr == NULL, ("sysctl_rule: ruleptr != NULL"));
 	memcpy(ruleptr->mbr_object.mbo_fpath, temprule->mbr_object.mbo_fpath, 
-	    ruleptr->mbr_object.mbo_fpath_len);
+	    ruleptr->mbr_object.mbo_fpath_len+1);
 	
 	/* Resolve path to fsid and fileid */
-	NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, ruleptr->mbr_object.mbo_fpath, td);
+	NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, ruleptr->mbr_object.mbo_fpath, td);
 	error = namei(&nd);
 	if (error)
 		goto out;
@@ -171,7 +171,10 @@
 
 out:
 	NDFREE(&nd, 0);
-	return (0);
+	if (error)
+		free(ruleptr->mbr_object.mbo_fpath, M_MACBSDEXTENDED);
+
+	return error;
 }
 
 static int
@@ -226,10 +229,6 @@
 			goto out;
 		if (rules[index] == NULL) {
 			*ruleptr = temprule;
-			/* TODO: Check if path is defined. 
-			 * If it is: 
-			 * - resolve path to fid
-			 */
 			if (ruleptr->mbr_object.mbo_flags & MBO_FSID_DEFINED) {
 				error = ugidfw_rslv_fpath(ruleptr, &temprule, req->td);
 				if (error)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110603152456.B9B01106564A>