Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
kernel-hardening-checker
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fact-depend
kernel-hardening-checker
Commits
fea07508
Commit
fea07508
authored
2 years ago
by
Alexander Popov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Detect the compiler used for the kernel compilation
parent
f5810766
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
2 deletions
+29
-2
__init__.py
kconfig_hardened_check/__init__.py
+29
-2
No files found.
kconfig_hardened_check/__init__.py
View file @
fea07508
...
...
@@ -288,7 +288,7 @@ def detect_arch(fname, archs):
return
arch
,
'OK'
def
detect_version
(
fname
):
def
detect_
kernel_
version
(
fname
):
with
open
(
fname
,
'r'
)
as
f
:
ver_pattern
=
re
.
compile
(
"# Linux/.* Kernel Configuration"
)
for
line
in
f
.
readlines
():
...
...
@@ -304,6 +304,26 @@ def detect_version(fname):
return
None
,
'no kernel version detected'
def
detect_compiler
(
fname
):
gcc_version
=
None
clang_version
=
None
with
open
(
fname
,
'r'
)
as
f
:
gcc_version_pattern
=
re
.
compile
(
"CONFIG_GCC_VERSION=[0-9]*"
)
clang_version_pattern
=
re
.
compile
(
"CONFIG_CLANG_VERSION=[0-9]*"
)
for
line
in
f
.
readlines
():
if
gcc_version_pattern
.
match
(
line
):
gcc_version
=
line
[
19
:
-
1
]
if
clang_version_pattern
.
match
(
line
):
clang_version
=
line
[
21
:
-
1
]
if
not
gcc_version
or
not
clang_version
:
return
None
,
'no CONFIG_GCC_VERSION or CONFIG_CLANG_VERSION'
if
gcc_version
==
'0'
and
clang_version
!=
'0'
:
return
'CLANG '
+
clang_version
,
'OK'
if
gcc_version
!=
'0'
and
clang_version
==
'0'
:
return
'GCC '
+
gcc_version
,
'OK'
sys
.
exit
(
'[!] ERROR: invalid GCC_VERSION and CLANG_VERSION: {} {}'
.
format
(
gcc_version
,
clang_version
))
def
add_kconfig_checks
(
l
,
arch
):
# Calling the KconfigCheck class constructor:
# KconfigCheck(reason, decision, name, expected)
...
...
@@ -959,12 +979,19 @@ def main():
if
mode
!=
'json'
:
print
(
'[+] Detected architecture: {}'
.
format
(
arch
))
kernel_version
,
msg
=
detect_version
(
args
.
config
)
kernel_version
,
msg
=
detect_
kernel_
version
(
args
.
config
)
if
not
kernel_version
:
sys
.
exit
(
'[!] ERROR: {}'
.
format
(
msg
))
if
mode
!=
'json'
:
print
(
'[+] Detected kernel version: {}.{}'
.
format
(
kernel_version
[
0
],
kernel_version
[
1
]))
compiler
,
msg
=
detect_compiler
(
args
.
config
)
if
mode
!=
'json'
:
if
compiler
:
print
(
'[+] Detected compiler: {}'
.
format
(
compiler
))
else
:
print
(
'[-] Can
\'
t detect the compiler: {}'
.
format
(
msg
))
# add relevant kconfig checks to the checklist
add_kconfig_checks
(
config_checklist
,
arch
)
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment