lscpu
: Show CPU vulnerability mitigation info
This commit is contained in:

committed by
Andrey Aleksandrov

parent
01b5f3384e
commit
3980e7714f
@ -15,6 +15,8 @@ mod options {
|
|||||||
pub const JSON: &str = "json";
|
pub const JSON: &str = "json";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod sysfs;
|
||||||
|
|
||||||
const ABOUT: &str = help_about!("lscpu.md");
|
const ABOUT: &str = help_about!("lscpu.md");
|
||||||
const USAGE: &str = help_usage!("lscpu.md");
|
const USAGE: &str = help_usage!("lscpu.md");
|
||||||
|
|
||||||
@ -126,6 +128,15 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
|
|||||||
cpu_infos.push(vendor_info);
|
cpu_infos.push(vendor_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let vulns = sysfs::read_cpu_vulnerabilities();
|
||||||
|
if !vulns.is_empty() {
|
||||||
|
let mut vuln_info = CpuInfo::new("Vulnerabilities", "", None);
|
||||||
|
for vuln in vulns {
|
||||||
|
vuln_info.add_child(CpuInfo::new(&vuln.name, &vuln.mitigation, None));
|
||||||
|
}
|
||||||
|
cpu_infos.push(vuln_info);
|
||||||
|
}
|
||||||
|
|
||||||
print_output(cpu_infos, output_opts);
|
print_output(cpu_infos, output_opts);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
33
src/uu/lscpu/src/sysfs.rs
Normal file
33
src/uu/lscpu/src/sysfs.rs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
use std::fs;
|
||||||
|
|
||||||
|
pub struct CpuVulnerability {
|
||||||
|
pub name: String,
|
||||||
|
pub mitigation: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read_cpu_vulnerabilities() -> Vec<CpuVulnerability> {
|
||||||
|
let mut out: Vec<CpuVulnerability> = vec![];
|
||||||
|
|
||||||
|
if let Ok(dir) = fs::read_dir("/sys/devices/system/cpu/vulnerabilities") {
|
||||||
|
let mut files: Vec<_> = dir
|
||||||
|
.flatten()
|
||||||
|
.map(|x| x.path())
|
||||||
|
.filter(|x| !x.is_dir())
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
files.sort_by(|a, b| a.file_name().cmp(&b.file_name()));
|
||||||
|
|
||||||
|
for file in files {
|
||||||
|
if let Ok(content) = fs::read_to_string(&file) {
|
||||||
|
let name = file.file_name().unwrap().to_str().unwrap();
|
||||||
|
|
||||||
|
out.push(CpuVulnerability {
|
||||||
|
name: (name[..1].to_uppercase() + &name[1..]).replace("_", " "),
|
||||||
|
mitigation: content.trim().to_string(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
out
|
||||||
|
}
|
Reference in New Issue
Block a user