Skip to content

Commit 38cf515

Browse files
authored
Merge pull request #1208 from matejak/cov-70-77
Make sure that intermediate results are freed.
2 parents e0c5fb7 + 55dffe5 commit 38cf515

File tree

2 files changed

+67
-30
lines changed

2 files changed

+67
-30
lines changed

src/OVAL/probes/probe-api.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,6 +1390,11 @@ static SEXP_t *probe_item_optimize(const SEXP_t *item)
13901390
return SEXP_ref(item);
13911391
}
13921392

1393+
/**
1394+
* The order of (value_name, value_type, *value) argument tuples passed as
1395+
* e.g. 3rd to 5th arguments matters. If you change ordering of those tuples,
1396+
* it will have consequences.
1397+
*/
13931398
SEXP_t *probe_item_create(oval_subtype_t item_subtype, probe_elmatr_t *item_attributes[],
13941399
/* const char *value_name, oval_datatype_t value_type, void *value, */ ...)
13951400
{

src/OVAL/probes/unix/linux/selinuxsecuritycontext.c

Lines changed: 62 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,66 @@ static void split_range(const char *range, char **l_s, char **l_c, char **h_s, c
103103
}
104104
}
105105

106+
static SEXP_t *create_process_probe_item_with_range(
107+
const char *range, const char *user, const char *role, const char *type,
108+
int pid_number) {
109+
char *l_sensitivity, *l_category, *h_sensitivity, *h_category;
110+
SEXP_t *item;
111+
112+
split_range(range, &l_sensitivity, &l_category, &h_sensitivity, &h_category);
113+
item = probe_item_create(OVAL_LINUX_SELINUXSECURITYCONTEXT, NULL,
114+
"pid", OVAL_DATATYPE_INTEGER, (int64_t)pid_number,
115+
116+
"user", OVAL_DATATYPE_STRING, user,
117+
"role", OVAL_DATATYPE_STRING, role,
118+
"type", OVAL_DATATYPE_STRING, type,
119+
"low_sensitivity", OVAL_DATATYPE_STRING, l_sensitivity,
120+
"low_category", OVAL_DATATYPE_STRING, l_category,
121+
"high_sensitivity", OVAL_DATATYPE_STRING, h_sensitivity,
122+
"high_category", OVAL_DATATYPE_STRING, h_category,
123+
NULL);
124+
free(l_sensitivity);
125+
free(l_category);
126+
free(h_sensitivity);
127+
free(h_category);
128+
129+
return item;
130+
}
131+
132+
133+
static SEXP_t *create_file_probe_item_with_range(
134+
const char *range, const char *user, const char *role, const char *type,
135+
const char *pbuf, const char *p, const char *f) {
136+
char *l_sensitivity, *l_category, *h_sensitivity, *h_category;
137+
SEXP_t *item;
138+
139+
split_range(range, &l_sensitivity, &l_category, &h_sensitivity, &h_category);
140+
item = probe_item_create(OVAL_LINUX_SELINUXSECURITYCONTEXT, NULL,
141+
"filepath", OVAL_DATATYPE_STRING, pbuf,
142+
"path", OVAL_DATATYPE_STRING, p,
143+
"filename", OVAL_DATATYPE_STRING, f,
144+
145+
"user", OVAL_DATATYPE_STRING, user,
146+
"role", OVAL_DATATYPE_STRING, role,
147+
"type", OVAL_DATATYPE_STRING, type,
148+
"low_sensitivity", OVAL_DATATYPE_STRING, l_sensitivity,
149+
"low_category", OVAL_DATATYPE_STRING, l_category,
150+
"high_sensitivity", OVAL_DATATYPE_STRING, h_sensitivity,
151+
"high_category", OVAL_DATATYPE_STRING, h_category,
152+
153+
"rawlow_sensitivity", OVAL_DATATYPE_STRING, l_sensitivity,
154+
"rawlow_category", OVAL_DATATYPE_STRING, l_category,
155+
"rawhigh_sensitivity", OVAL_DATATYPE_STRING, h_sensitivity,
156+
"rawhigh_category", OVAL_DATATYPE_STRING, h_category,
157+
NULL);
158+
free(l_sensitivity);
159+
free(l_category);
160+
free(h_sensitivity);
161+
free(h_category);
162+
163+
return item;
164+
}
165+
106166
static int selinuxsecuritycontext_process_cb (SEXP_t *pid_ent, probe_ctx *ctx) {
107167

108168
SEXP_t *pid_sexp, *item;
@@ -112,7 +172,6 @@ static int selinuxsecuritycontext_process_cb (SEXP_t *pid_ent, probe_ctx *ctx) {
112172
DIR *proc;
113173
struct dirent *dir_entry;
114174
const char *user, *role, *type, *range;
115-
char *l_sensitivity, *l_category, *h_sensitivity, *h_category;
116175

117176
if ((proc = opendir("/proc")) == NULL) {
118177
dE("Can't open /proc dir: %s", strerror(errno));
@@ -143,17 +202,7 @@ static int selinuxsecuritycontext_process_cb (SEXP_t *pid_ent, probe_ctx *ctx) {
143202
type = context_type_get(context);
144203
range = context_range_get(context);
145204
if (range != NULL) {
146-
split_range(range, &l_sensitivity, &l_category, &h_sensitivity, &h_category);
147-
item = probe_item_create(OVAL_LINUX_SELINUXSECURITYCONTEXT, NULL,
148-
"pid", OVAL_DATATYPE_INTEGER, (int64_t)pid_number,
149-
"user", OVAL_DATATYPE_STRING, user,
150-
"role", OVAL_DATATYPE_STRING, role,
151-
"type", OVAL_DATATYPE_STRING, type,
152-
"low_sensitivity", OVAL_DATATYPE_STRING, l_sensitivity,
153-
"low_category", OVAL_DATATYPE_STRING, l_category,
154-
"high_sensitivity", OVAL_DATATYPE_STRING, h_sensitivity,
155-
"high_category", OVAL_DATATYPE_STRING, h_category,
156-
NULL);
205+
item = create_process_probe_item_with_range(range, user, role, type, pid_number);
157206
}
158207
else {
159208
item = probe_item_create(OVAL_LINUX_SELINUXSECURITYCONTEXT, NULL,
@@ -188,7 +237,6 @@ static int selinuxsecuritycontext_file_cb(const char *prefix, const char *p, con
188237
int file_context_size;
189238
context_t context;
190239
const char *user, *role, *type, *range;
191-
char *l_sensitivity, *l_category, *h_sensitivity, *h_category;
192240
int err = 0;
193241

194242
/* directory */
@@ -244,23 +292,7 @@ static int selinuxsecuritycontext_file_cb(const char *prefix, const char *p, con
244292
range = context_range_get(context);
245293

246294
if (range != NULL) {
247-
split_range(range, &l_sensitivity, &l_category, &h_sensitivity, &h_category);
248-
item = probe_item_create(OVAL_LINUX_SELINUXSECURITYCONTEXT, NULL,
249-
"filepath", OVAL_DATATYPE_STRING, pbuf,
250-
"path", OVAL_DATATYPE_STRING, p,
251-
"filename", OVAL_DATATYPE_STRING, f,
252-
"user", OVAL_DATATYPE_STRING, user,
253-
"role", OVAL_DATATYPE_STRING, role,
254-
"type", OVAL_DATATYPE_STRING, type,
255-
"low_sensitivity", OVAL_DATATYPE_STRING, l_sensitivity,
256-
"low_category", OVAL_DATATYPE_STRING, l_category,
257-
"high_sensitivity", OVAL_DATATYPE_STRING, h_sensitivity,
258-
"high_category", OVAL_DATATYPE_STRING, h_category,
259-
"rawlow_sensitivity", OVAL_DATATYPE_STRING, l_sensitivity,
260-
"rawlow_category", OVAL_DATATYPE_STRING, l_category,
261-
"rawhigh_sensitivity", OVAL_DATATYPE_STRING, h_sensitivity,
262-
"rawhigh_category", OVAL_DATATYPE_STRING, h_category,
263-
NULL);
295+
item = create_file_probe_item_with_range(range, user, role, type, pbuf, p, f);
264296
}
265297
else {
266298
item = probe_item_create(OVAL_LINUX_SELINUXSECURITYCONTEXT, NULL,

0 commit comments

Comments
 (0)