lscpu: Show CPU vulnerability mitigation info
				
					
				
			This commit is contained in:
		 alxndrv
					alxndrv
				
			
				
					committed by
					
						 Andrey Aleksandrov
						Andrey Aleksandrov
					
				
			
			
				
	
			
			
			 Andrey Aleksandrov
						Andrey Aleksandrov
					
				
			
						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 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user