lscpu
: Show CPU vulnerability mitigation info
This commit is contained in:
parent
01b5f3384e
commit
3980e7714f
@ -15,6 +15,8 @@ mod options {
|
||||
pub const JSON: &str = "json";
|
||||
}
|
||||
|
||||
mod sysfs;
|
||||
|
||||
const ABOUT: &str = help_about!("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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user