aboutsummarylogtreecommitdiffstats
path: root/ossvermagic.patch
blob: a239e4905b72de00050a69afa27ce72e3e896d0a (plain)
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);
 	}