summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy M. Broome <thrirhrafnir@gmail.com>2018-03-05 16:27:27 -0500
committerHisham Muhammad <hisham@gobolinux.org>2018-04-06 11:13:30 -0300
commitda4010783ef24be1972d68862d84404006a472e4 (patch)
treed2ea4221e862a70e907c240a84d7dcc1d3583894
parent3f7622a302bddc865745ccf2724e0525febcdff9 (diff)
Solaris: fix malloc() / free() issues with zone name handling
-rw-r--r--solaris/SolarisProcess.c6
-rw-r--r--solaris/SolarisProcess.h6
-rw-r--r--solaris/SolarisProcessList.c18
-rw-r--r--solaris/SolarisProcessList.h6
4 files changed, 21 insertions, 15 deletions
diff --git a/solaris/SolarisProcess.c b/solaris/SolarisProcess.c
index b935a814..a9aff4cb 100644
--- a/solaris/SolarisProcess.c
+++ b/solaris/SolarisProcess.c
@@ -34,10 +34,10 @@ typedef enum SolarisProcessFields {
typedef struct SolarisProcess_ {
- Process super;
- int kernel;
+ Process super;
+ int kernel;
zoneid_t zoneid;
- char zname[ZONENAME_MAX+1];
+ char* zname;
taskid_t taskid;
projid_t projid;
poolid_t poolid;
diff --git a/solaris/SolarisProcess.h b/solaris/SolarisProcess.h
index e1f4945a..5c98895c 100644
--- a/solaris/SolarisProcess.h
+++ b/solaris/SolarisProcess.h
@@ -26,10 +26,10 @@ typedef enum SolarisProcessFields {
typedef struct SolarisProcess_ {
- Process super;
- int kernel;
+ Process super;
+ int kernel;
zoneid_t zoneid;
- char zname[ZONENAME_MAX+1];
+ char* zname;
taskid_t taskid;
projid_t projid;
poolid_t poolid;
diff --git a/solaris/SolarisProcessList.c b/solaris/SolarisProcessList.c
index 2c4d964b..d3473e20 100644
--- a/solaris/SolarisProcessList.c
+++ b/solaris/SolarisProcessList.c
@@ -7,8 +7,8 @@ in the source distribution for its full text.
*/
#include "ProcessList.h"
-#include "SolarisProcessList.h"
#include "SolarisProcess.h"
+#include "SolarisProcessList.h"
#include <unistd.h>
#include <stdlib.h>
@@ -31,7 +31,7 @@ in the source distribution for its full text.
#include <kstat.h>
#include <sys/param.h>
-#include <sys/zone.h>
+#include <zone.h>
#include <sys/uio.h>
#include <sys/resource.h>
#include <sys/sysconf.h>
@@ -72,15 +72,17 @@ static void setCommand(Process* process, const char* command, int len) {
process->commLen = len;
}
-static void setZoneName(kstat_ctl_t* kd, SolarisProcess* sproc) {
+char* SolarisProcessList_readZoneName(kstat_ctl_t* kd, SolarisProcess* sproc) {
+ char* zname;
if ( sproc->zoneid == 0 ) {
- strncpy( sproc->zname, "global ", 11);
+ zname = xStrdup("global ");
} else if ( kd == NULL ) {
- strncpy( sproc->zname, "unknown ", 11);
+ zname = xStrdup("unknown ");
} else {
kstat_t* ks = kstat_lookup( kd, "zones", sproc->zoneid, NULL );
- strncpy( sproc->zname, ks->ks_name, strlen(ks->ks_name) );
+ zname = xStrdup(ks->ks_name);
}
+ return zname;
}
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId) {
@@ -325,7 +327,7 @@ void ProcessList_goThroughEntries(ProcessList* this) {
proc->nlwp = _psinfo.pr_nlwp;
proc->session = _pstatus.pr_sid;
setCommand(proc,_psinfo.pr_fname,PRFNSZ);
- setZoneName(spl->kd,sproc);
+ sproc->zname = SolarisProcessList_readZoneName(spl->kd,sproc);
proc->majflt = _prusage.pr_majf;
proc->minflt = _prusage.pr_minf;
proc->m_resident = (_psinfo.pr_rssize)/8;
@@ -354,7 +356,7 @@ void ProcessList_goThroughEntries(ProcessList* this) {
proc->nlwp = _psinfo.pr_nlwp;
proc->user = UsersTable_getRef(this->usersTable, proc->st_uid);
setCommand(proc,_psinfo.pr_fname,PRFNSZ);
- setZoneName(spl->kd,sproc);
+ sproc->zname = SolarisProcessList_readZoneName(spl->kd,sproc);
proc->majflt = _prusage.pr_majf;
proc->minflt = _prusage.pr_minf;
proc->m_resident = (_psinfo.pr_rssize)/8;
diff --git a/solaris/SolarisProcessList.h b/solaris/SolarisProcessList.h
index 5690ee87..731f2941 100644
--- a/solaris/SolarisProcessList.h
+++ b/solaris/SolarisProcessList.h
@@ -15,7 +15,7 @@ in the source distribution for its full text.
#include <kstat.h>
#include <sys/param.h>
-#include <sys/zone.h>
+#include <zone.h>
#include <sys/uio.h>
#include <sys/resource.h>
#include <sys/sysconf.h>
@@ -44,10 +44,14 @@ typedef struct SolarisProcessList_ {
CPUData* cpus;
} SolarisProcessList;
+
+char* SolarisProcessList_readZoneName(kstat_ctl_t* kd, SolarisProcess* sproc);
+
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId);
void ProcessList_delete(ProcessList* this);
void ProcessList_goThroughEntries(ProcessList* this);
+
#endif

© 2014-2024 Faster IT GmbH | imprint | privacy policy