usr/src/cmd/ptools/ppriv/ppriv.c
changeset 14238 dcd9e8748b08
parent 12273 63678502e95e
--- a/usr/src/cmd/ptools/ppriv/ppriv.c	Wed Aug 21 13:46:56 2013 -0800
+++ b/usr/src/cmd/ptools/ppriv/ppriv.c	Wed Aug 21 15:45:46 2013 -0800
@@ -20,7 +20,11 @@
  */
 /*
  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- *
+ */
+/*
+ * Copyright (c) 2013 by Delphix. All rights reserved.
+ */
+/*
  * Program to examine or set process privileges.
  */
 
@@ -158,9 +162,6 @@
 static int
 look(char *arg)
 {
-	static size_t pprivsz = sizeof (prpriv_t);
-	static prpriv_t *ppriv;
-
 	struct ps_prochandle *Pr;
 	int gcode;
 	size_t sz;
@@ -168,6 +169,7 @@
 	char *x;
 	int i;
 	boolean_t nodata;
+	prpriv_t *ppriv;
 
 	procname = arg;		/* for perr() */
 
@@ -179,15 +181,11 @@
 		return (1);
 	}
 
-	if (ppriv == NULL)
-		ppriv = malloc(pprivsz);
-
-	if (Ppriv(Pr, ppriv, pprivsz) == -1) {
+	if (Ppriv(Pr, &ppriv) == -1) {
 		perr(command);
 		Prelease(Pr, 0);
 		return (1);
 	}
-
 	sz = PRIV_PRPRIV_SIZE(ppriv);
 
 	/*
@@ -202,28 +200,20 @@
 		    "%s: %s: bad PRNOTES section, size = %lx\n",
 		    command, arg, (long)sz);
 		Prelease(Pr, 0);
+		free(ppriv);
 		return (1);
 	}
 
-	if (sz > pprivsz) {
-		ppriv = realloc(ppriv, sz);
-
-		if (ppriv == NULL || Ppriv(Pr, ppriv, sz) != sz) {
-			perr(command);
-			Prelease(Pr, 0);
-			return (1);
-		}
-		pprivsz = sz;
-	}
-
 	if (set) {
 		privupdate(ppriv, arg);
 		if (Psetpriv(Pr, ppriv) != 0) {
 			perr(command);
 			Prelease(Pr, 0);
+			free(ppriv);
 			return (1);
 		}
 		Prelease(Pr, 0);
+		free(ppriv);
 		return (0);
 	}
 
@@ -298,6 +288,7 @@
 		}
 	}
 	Prelease(Pr, 0);
+	free(ppriv);
 	return (0);
 }