|
|
|
@ -0,0 +1,45 @@
|
|
|
|
|
From 299e344b245e8d1b3a31a58275e0e8d0aa01ed77 Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: Evgeny Kolesnikov <ekolesni@redhat.com>
|
|
|
|
|
Date: Sat, 8 Jul 2023 07:05:31 +0200
|
|
|
|
|
Subject: [PATCH] OVAL/sysctl: Fix offline mode
|
|
|
|
|
|
|
|
|
|
The initial implementation was buggy: after correctly traversing
|
|
|
|
|
prefixed PREFIX/proc/sys directory tree it would incorrectly read
|
|
|
|
|
the data from the non-prefixed directory tree.
|
|
|
|
|
---
|
|
|
|
|
src/OVAL/probes/unix/sysctl_probe.c | 13 ++++++++++---
|
|
|
|
|
1 file changed, 10 insertions(+), 3 deletions(-)
|
|
|
|
|
|
|
|
|
|
diff --git a/src/OVAL/probes/unix/sysctl_probe.c b/src/OVAL/probes/unix/sysctl_probe.c
|
|
|
|
|
index 65d4bd0609..b7c68a0378 100644
|
|
|
|
|
--- a/src/OVAL/probes/unix/sysctl_probe.c
|
|
|
|
|
+++ b/src/OVAL/probes/unix/sysctl_probe.c
|
|
|
|
|
@@ -150,10 +150,14 @@ int sysctl_probe_main(probe_ctx *ctx, void *probe_arg)
|
|
|
|
|
while ((ofts_ent = oval_fts_read(ofts)) != NULL) {
|
|
|
|
|
SEXP_t *se_mib;
|
|
|
|
|
char mibpath[PATH_MAX], *mib;
|
|
|
|
|
- size_t miblen;
|
|
|
|
|
+ size_t miblen, mibstart;
|
|
|
|
|
struct stat file_stat;
|
|
|
|
|
|
|
|
|
|
- snprintf(mibpath, sizeof mibpath, "%s/%s", ofts_ent->path, ofts_ent->file);
|
|
|
|
|
+ if (prefix != NULL) {
|
|
|
|
|
+ snprintf(mibpath, sizeof mibpath, "%s/%s/%s", prefix, ofts_ent->path, ofts_ent->file);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ snprintf(mibpath, sizeof mibpath, "%s/%s", ofts_ent->path, ofts_ent->file);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
/* Skip write-only files, eg. /proc/sys/net/ipv4/route/flush */
|
|
|
|
|
if (stat(mibpath, &file_stat) == -1) {
|
|
|
|
|
@@ -168,7 +172,10 @@ int sysctl_probe_main(probe_ctx *ctx, void *probe_arg)
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- mib = strdup(mibpath + strlen(PROC_SYS_DIR) + 1);
|
|
|
|
|
+ mibstart = 0;
|
|
|
|
|
+ mibstart += prefix != NULL ? strlen(prefix)+1 : 0;
|
|
|
|
|
+ mibstart += strlen(PROC_SYS_DIR)+1;
|
|
|
|
|
+ mib = strdup(mibpath + mibstart);
|
|
|
|
|
miblen = strlen(mib);
|
|
|
|
|
|
|
|
|
|
while (miblen > 0) {
|