[SeaBIOS] [PATCH 6/6] bios_version: Add bios version checks in checkrom.py

Sam Eiderman posted 6 patches 18 weeks ago

[SeaBIOS] [PATCH 6/6] bios_version: Add bios version checks in checkrom.py

Posted by Sam Eiderman 18 weeks ago
Check that no version string appear in the final ROM.

The check simulates nt!CmpGetBiosVersion() in order to ensure that
Windows sees the correct versions.

For reference implementation of nt!CmpGetBiosVersion(), see ReactOS:
https://doxygen.reactos.org/d5/dd2/i386_2cmhardwr_8c.html

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Arbel Moshe <arbel.moshe@oracle.com>
Signed-off-by: Sam Eiderman <shmuel.eiderman@oracle.com>
Signed-off-by: Liran Alon <liran.alon@oracle.com>
---
 scripts/checkrom.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/scripts/checkrom.py b/scripts/checkrom.py
index 98cdfa7f..a09203fe 100755
--- a/scripts/checkrom.py
+++ b/scripts/checkrom.py
@@ -34,6 +34,31 @@ def check_windows_bios_date(rawdata):
         print("Warning!  No dates were detected in rom.")
         print("   This may cause Windows OS to report incorrect date.")
 
+def check_windows_bios_version(rawdata):
+    versions = []
+    for i in xrange(len(rawdata)):
+        if (rawdata[i+0].isdigit() and
+                rawdata[i+1] == '.' and
+                rawdata[i+2].isdigit()):
+            p = i-1
+            while ((p >= 0) and (p > i+2-127)
+                   and ord(rawdata[p]) >= ord(' ')
+                   and rawdata[p] != '$'):
+                p -= 1
+            version = rawdata[p+1:i+3]
+            for s in ["Ver", "Rev", "Rel",
+                      "v0", "v1", "v2", "v3", "v4",
+                      "v5", "v6", "v7", "v8", "v9",
+                      "v 0", "v 1", "v 2", "v 3", "v 4",
+                      "v 5", "v 6", "v 7", "v 8", "v 9"]:
+                if s in version:
+                    versions.append((rawdata[p+1:i+3], i))
+                    break
+    if len(versions) > 0:
+        print("Warning!  Version strings were detected in rom.")
+        print("   This may cause Windows OS to report incorrect version:")
+        print("   %s" % (versions, ))
+
 def main():
     # Get args
     objinfo, finalsize, rawfile, outfile = sys.argv[1:]
@@ -64,6 +89,7 @@ def main():
 
     # Sanity checks
     check_windows_bios_date(rawdata)
+    check_windows_bios_version(rawdata)
 
     start = symbols['code32flat_start'].offset
     end = symbols['code32flat_end'].offset
-- 
2.13.3
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-leave@seabios.org