summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorla135387 <none@none>2005-07-22 16:18:39 -0700
committerla135387 <none@none>2005-07-22 16:18:39 -0700
commit26cf27f05670b1ca90e4a07802cba858cb358690 (patch)
treee688cf237930db054ae49f8feea76058db33ad64
parent70f54ead78cbbb40e97bd3ff9f175c5c71783c3c (diff)
downloadillumos-joyent-26cf27f05670b1ca90e4a07802cba858cb358690.tar.gz
6263078 Machine description API doesn't support kmem_free()
6264415 md_fini should not free the pointer to the machine description data 6292409 prtdiag: cannot open /dev/openprom: Permission denied ; when run as non root user only
-rw-r--r--usr/src/cmd/picl/plugins/sun4v/mdesc/init.c11
-rw-r--r--usr/src/common/mdesc/mdesc_fini.c3
-rw-r--r--usr/src/common/mdesc/mdesc_init_intern.c5
-rw-r--r--usr/src/common/mdesc/mdesc_scandag.c2
-rw-r--r--usr/src/pkgdefs/SUNWkvm.v/prototype_com2
-rw-r--r--usr/src/uts/common/sys/mdesc.h2
-rw-r--r--usr/src/uts/common/sys/mdesc_impl.h2
7 files changed, 18 insertions, 9 deletions
diff --git a/usr/src/cmd/picl/plugins/sun4v/mdesc/init.c b/usr/src/cmd/picl/plugins/sun4v/mdesc/init.c
index 044709ea20..8b6a7f2af3 100644
--- a/usr/src/cmd/picl/plugins/sun4v/mdesc/init.c
+++ b/usr/src/cmd/picl/plugins/sun4v/mdesc/init.c
@@ -42,6 +42,8 @@
#define MDESC_PATH "/devices/pseudo/mdesc@0:mdesc"
#define SIZE 8192
+static void mdesc_free(void *bufp, size_t size);
+
md_t *
mdesc_devinit(void)
{
@@ -98,7 +100,7 @@ mdesc_devinit(void)
if (NULL == bufp)
return (NULL);
- mdp = md_init_intern((uint64_t *)bufp, malloc, free);
+ mdp = md_init_intern((uint64_t *)bufp, malloc, mdesc_free);
if (NULL == mdp) {
free(bufp);
return (NULL);
@@ -106,3 +108,10 @@ mdesc_devinit(void)
return (mdp);
}
+
+/*ARGSUSED*/
+void
+mdesc_free(void *bufp, size_t size)
+{
+ free(bufp);
+}
diff --git a/usr/src/common/mdesc/mdesc_fini.c b/usr/src/common/mdesc/mdesc_fini.c
index f449150be5..f0b010b386 100644
--- a/usr/src/common/mdesc/mdesc_fini.c
+++ b/usr/src/common/mdesc/mdesc_fini.c
@@ -37,8 +37,7 @@ md_fini(md_t *ptr)
mdp = (md_impl_t *)ptr;
- mdp->freep(mdp->caddr);
- mdp->freep(mdp);
+ mdp->freep(mdp, sizeof (md_impl_t));
return (0);
}
diff --git a/usr/src/common/mdesc/mdesc_init_intern.c b/usr/src/common/mdesc/mdesc_init_intern.c
index 8148a133dd..2ba2877abb 100644
--- a/usr/src/common/mdesc/mdesc_init_intern.c
+++ b/usr/src/common/mdesc/mdesc_init_intern.c
@@ -32,7 +32,8 @@
#include <sys/mdesc_impl.h>
md_t *
-md_init_intern(uint64_t *ptr, void *(*allocp)(size_t), void (*freep)(void *))
+md_init_intern(uint64_t *ptr, void *(*allocp)(size_t),
+ void (*freep)(void *, size_t))
{
md_impl_t *mdp;
int idx;
@@ -160,6 +161,6 @@ cleanup:;
* we build one.
*/
cleanup_nohash:;
- mdp->freep(mdp);
+ mdp->freep(mdp, sizeof (md_impl_t));
return (NULL);
}
diff --git a/usr/src/common/mdesc/mdesc_scandag.c b/usr/src/common/mdesc/mdesc_scandag.c
index 58e0b0d39f..11b4e24ab2 100644
--- a/usr/src/common/mdesc/mdesc_scandag.c
+++ b/usr/src/common/mdesc/mdesc_scandag.c
@@ -112,7 +112,7 @@ md_scan_dag(md_t *ptr,
node_name_cookie, arc_name_cookie,
seenp, &idx, stashp, 0);
- mdp->freep(seenp);
+ mdp->freep(seenp, mdp->element_count);
return (res >= 0 ? idx : res);
}
diff --git a/usr/src/pkgdefs/SUNWkvm.v/prototype_com b/usr/src/pkgdefs/SUNWkvm.v/prototype_com
index ccceee8b36..6f6dfc2b83 100644
--- a/usr/src/pkgdefs/SUNWkvm.v/prototype_com
+++ b/usr/src/pkgdefs/SUNWkvm.v/prototype_com
@@ -60,7 +60,7 @@ d none usr/platform/sun4v/lib 755 root bin
#
# add binary and libraries for prtdiag
#
-f none usr/platform/sun4v/sbin/prtdiag 2755 root bin
+f none usr/platform/sun4v/sbin/prtdiag 2755 root sys
f none usr/platform/sun4v/lib/libprtdiag.so.1 755 root bin
s none usr/platform/sun4v/lib/libprtdiag.so=./libprtdiag.so.1
#
diff --git a/usr/src/uts/common/sys/mdesc.h b/usr/src/uts/common/sys/mdesc.h
index ad7fd23789..87e3e8492b 100644
--- a/usr/src/uts/common/sys/mdesc.h
+++ b/usr/src/uts/common/sys/mdesc.h
@@ -100,7 +100,7 @@ typedef void * md_t;
extern md_t *md_init(void *);
extern md_t *md_init_intern(uint64_t *, void*(*)(size_t),
- void (*)(void*));
+ void (*)(void*, size_t));
extern int md_fini(md_t *);
diff --git a/usr/src/uts/common/sys/mdesc_impl.h b/usr/src/uts/common/sys/mdesc_impl.h
index 920c42093f..9d8083a513 100644
--- a/usr/src/uts/common/sys/mdesc_impl.h
+++ b/usr/src/uts/common/sys/mdesc_impl.h
@@ -115,7 +115,7 @@ struct MACHINE_DESCRIPTION {
caddr_t caddr;
void *(*allocp)(size_t);
- void (*freep)(void*);
+ void (*freep)(void*, size_t);
md_header_t *headerp;
md_element_t *mdep;