ksud: try find KMI from installed modules

This commit is contained in:
weishu
2024-03-20 21:33:27 +08:00
parent 2bcb6a93c0
commit 8b71d3c9ba

View File

@@ -69,9 +69,13 @@ fn parse_kmi_from_uname() -> Result<String> {
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
fn parse_kmi_from_modules() -> Result<String> { fn parse_kmi_from_modules() -> Result<String> {
use std::io::BufRead; use std::io::BufRead;
let output = Command::new("modinfo") // find a *.ko in /vendor/lib/modules
.arg("/vendor/lib/modules/fips140.ko") let modfile = std::fs::read_dir("/vendor/lib/modules")?
.output()?; .filter_map(Result::ok)
.find(|entry| entry.path().extension().map_or(false, |ext| ext == "ko"))
.map(|entry| entry.path())
.ok_or_else(|| anyhow!("No kernel module found"))?;
let output = Command::new("modinfo").arg(modfile).output()?;
for line in output.stdout.lines().map_while(Result::ok) { for line in output.stdout.lines().map_while(Result::ok) {
if line.starts_with("vermagic") { if line.starts_with("vermagic") {
return parse_kmi(&line); return parse_kmi(&line);