diff options
author | foocampo <omar.ocampo.coronado@intel.com> | 2018-08-03 19:47:40 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-08-09 23:47:56 +0100 |
commit | 8fc56faa5d76927f42a4e7cca2418556e231938f (patch) | |
tree | 5c70163e8082dad4d629fb18a25b1c4559cf94ba /meta/lib | |
parent | 3a1e44dea173a6edfe3b0280cb41970458f4c019 (diff) | |
download | poky-8fc56faa5d76927f42a4e7cca2418556e231938f.tar.gz |
package: skip strip on signed kernel modules
Executing strip action on kernel modules removes the signature.
Is not possible to strip and keep the signature, therefore avoid
strip signed kernel modules.
(From OE-Core rev: 4c47e5f171fa2603355e2f9183065ce8137a18c7)
Signed-off-by: Omar Ocampo <omar.ocampo.coronado@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oe/package.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py index fa3428ad61..21c80aaa38 100644 --- a/meta/lib/oe/package.py +++ b/meta/lib/oe/package.py | |||
@@ -21,11 +21,15 @@ def runstrip(arg): | |||
21 | os.chmod(file, newmode) | 21 | os.chmod(file, newmode) |
22 | 22 | ||
23 | stripcmd = [strip] | 23 | stripcmd = [strip] |
24 | 24 | skip_strip = False | |
25 | # kernel module | 25 | # kernel module |
26 | if elftype & 16: | 26 | if elftype & 16: |
27 | stripcmd.extend(["--strip-debug", "--remove-section=.comment", | 27 | if is_kernel_module_signed(file): |
28 | "--remove-section=.note", "--preserve-dates"]) | 28 | bb.debug(1, "Skip strip on signed module %s" % file) |
29 | skip_strip = True | ||
30 | else: | ||
31 | stripcmd.extend(["--strip-debug", "--remove-section=.comment", | ||
32 | "--remove-section=.note", "--preserve-dates"]) | ||
29 | # .so and shared library | 33 | # .so and shared library |
30 | elif ".so" in file and elftype & 8: | 34 | elif ".so" in file and elftype & 8: |
31 | stripcmd.extend(["--remove-section=.comment", "--remove-section=.note", "--strip-unneeded"]) | 35 | stripcmd.extend(["--remove-section=.comment", "--remove-section=.note", "--strip-unneeded"]) |
@@ -36,7 +40,8 @@ def runstrip(arg): | |||
36 | stripcmd.append(file) | 40 | stripcmd.append(file) |
37 | bb.debug(1, "runstrip: %s" % stripcmd) | 41 | bb.debug(1, "runstrip: %s" % stripcmd) |
38 | 42 | ||
39 | output = subprocess.check_output(stripcmd, stderr=subprocess.STDOUT) | 43 | if not skip_strip: |
44 | output = subprocess.check_output(stripcmd, stderr=subprocess.STDOUT) | ||
40 | 45 | ||
41 | if newmode: | 46 | if newmode: |
42 | os.chmod(file, origmode) | 47 | os.chmod(file, origmode) |
@@ -46,6 +51,13 @@ def is_kernel_module(path): | |||
46 | with open(path) as f: | 51 | with open(path) as f: |
47 | return mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ).find(b"vermagic=") >= 0 | 52 | return mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ).find(b"vermagic=") >= 0 |
48 | 53 | ||
54 | # Detect if .ko module is signed | ||
55 | def is_kernel_module_signed(path): | ||
56 | with open(path, "rb") as f: | ||
57 | f.seek(-28, 2) | ||
58 | module_tail = f.read() | ||
59 | return "Module signature appended" in "".join(chr(c) for c in bytearray(module_tail)) | ||
60 | |||
49 | # Return type (bits): | 61 | # Return type (bits): |
50 | # 0 - not elf | 62 | # 0 - not elf |
51 | # 1 - ELF | 63 | # 1 - ELF |