1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
diff --git a/os_cmd/Linux/ossvermagic/ossvermagic.c b/os_cmd/Linux/ossvermagic/ossvermagic.c
index d0ca321..6ce36c8 100644
--- a/os_cmd/Linux/ossvermagic/ossvermagic.c
+++ b/os_cmd/Linux/ossvermagic/ossvermagic.c
@@ -70,6 +70,8 @@ find_vermagic (char *fname)
ok = ELF_LOAD_SYMTAB (fname, "vermagic", sym_callback);
if (!ok)
ok = ELF_LOAD_SYMTAB (fname, "__mod_vermagic", sym_callback);
+ if (!ok)
+ ok = ELF_LOAD_SYMTAB (fname, "__UNIQUE_ID_vermagic0", sym_callback);
if (!ok)
ELF_LOAD_SYMTAB (fname, "__oss_compile_vermagic", sym_callback);
}
@@ -119,6 +121,24 @@ check_bzipped_module (char *fname)
unlink ("/tmp/oss.tmpmodule");
}
+static void
+check_xzipped_module (char *fname)
+{
+ char tmp[1024];
+
+ sprintf (tmp, "xzdec %s > /tmp/oss.tmpmodule", fname);
+ unlink ("/tmp/oss.tmpmodule");
+
+ if (system (tmp) != 0)
+ {
+ unlink ("/tmp/oss.tmpmodule");
+ return;
+ }
+
+ find_vermagic ("/tmp/oss.tmpmodule");
+ unlink ("/tmp/oss.tmpmodule");
+}
+
static void
scan_dir (char *dirname)
{
@@ -168,6 +188,14 @@ scan_dir (char *dirname)
continue;
}
+ p = tmp + strlen (tmp) - 3; // Seek the .xz suffix
+ if (strcmp (p, ".xz") == 0)
+ {
+ fname = tmp;
+ check_xzipped_module (tmp);
+ continue;
+ }
+
fname = tmp;
find_vermagic (tmp);
}
|