@@ -72,55 +72,53 @@ def is_supported(self) -> bool:
7272 return False
7373
7474 def check_flash_access_permissions (self ) -> int :
75- frap_objs = self .cs .register .get_list_by_name ('FRAP' )
76- frap_objs .read ()
77- for frap in frap_objs :
78- self .logger .log_verbose (frap )
79- fdv_obj = self .cs .register .get_instance_by_name ('HSFS' , frap .get_instance ())
80- fdv = fdv_obj .read_field ('FDV' ) == 1
81- brwa = frap .get_field ('BRWA' )
82-
83- if not fdv :
84- self .logger .log ("[*] Flash Descriptor Valid bit is not set" )
85-
86- if brwa & (1 << PLATFORM_DATA ):
87- self .logger .log ("[*] Software has write access to Platform Data region in SPI flash (it's platform specific)" )
88-
89- if brwa & (1 << GBE ):
90- self .update_res (ModuleResult .WARNING )
91- self .result .setStatusBit (self .result .status .ACCESS_RW )
92- self .logger .log_warning ("Software has write access to GBe region in SPI flash" )
93-
94- if brwa & (1 << FLASH_DESCRIPTOR ):
95- self .update_res (ModuleResult .FAILED )
96- self .result .setStatusBit (self .result .status .ACCESS_RW )
97- self .logger .log_bad ("Software has write access to SPI flash descriptor" )
98-
99- if brwa & (1 << ME ):
100- self .update_res (ModuleResult .FAILED )
101- self .result .setStatusBit (self .result .status .ACCESS_RW )
102- self .logger .log_bad ("Software has write access to Management Engine (ME) region in SPI flash" )
103-
104- if fdv :
105- if ModuleResult .PASSED == self .res :
106- self .logger .log_good ("SPI Flash Region Access Permissions in flash descriptor look ok" )
107- elif ModuleResult .FAILED == self .res :
108- self .logger .log_failed ('SPI Flash Region Access Permissions are not programmed securely in flash descriptor' )
109- self .logger .log_important ('System may be using alternative protection by including descriptor region in SPI Protected Range Registers' )
110- self .logger .log_important ('If using alternative protections, this can be considered a WARNING' )
111- elif ModuleResult .WARNING == self .res :
112- self .logger .log_warning ("Certain SPI flash regions are writeable by software" )
113- else :
114- self .update_res (ModuleResult .WARNING )
115- self .result .setStatusBit (self .result .status .UNSUPPORTED_FEATURE )
116- self .logger .log_warning ("Either flash descriptor is not valid or not present on this system" )
75+ frap = self .cs .register .get_instance_by_name ('FRAP' , self .spi .instance )
76+ frap .read ()
77+ brwa = frap .get_field ('BRWA' )
78+ fdv_obj = self .cs .register .get_instance_by_name ('HSFS' , self .spi .instance )
79+ fdv = fdv_obj .read_field ('FDV' ) == 1
80+
81+ if not fdv :
82+ self .logger .log ("[*] Flash Descriptor Valid bit is not set" )
83+
84+ if brwa & (1 << PLATFORM_DATA ):
85+ self .logger .log ("[*] Software has write access to Platform Data region in SPI flash (it's platform specific)" )
86+
87+ if brwa & (1 << GBE ):
88+ self .update_res (ModuleResult .WARNING )
89+ self .result .setStatusBit (self .result .status .ACCESS_RW )
90+ self .logger .log_warning ("Software has write access to GBe region in SPI flash" )
91+
92+ if brwa & (1 << FLASH_DESCRIPTOR ):
93+ self .update_res (ModuleResult .FAILED )
94+ self .result .setStatusBit (self .result .status .ACCESS_RW )
95+ self .logger .log_bad ("Software has write access to SPI flash descriptor" )
96+
97+ if brwa & (1 << ME ):
98+ self .update_res (ModuleResult .FAILED )
99+ self .result .setStatusBit (self .result .status .ACCESS_RW )
100+ self .logger .log_bad ("Software has write access to Management Engine (ME) region in SPI flash" )
101+
102+ if fdv :
103+ if ModuleResult .PASSED == self .res :
104+ self .logger .log_good ("SPI Flash Region Access Permissions in flash descriptor look ok" )
105+ elif ModuleResult .FAILED == self .res :
106+ self .logger .log_failed ('SPI Flash Region Access Permissions are not programmed securely in flash descriptor' )
107+ self .logger .log_important ('System may be using alternative protection by including descriptor region in SPI Protected Range Registers' )
108+ self .logger .log_important ('If using alternative protections, this can be considered a WARNING' )
109+ elif ModuleResult .WARNING == self .res :
110+ self .logger .log_warning ("Certain SPI flash regions are writeable by software" )
111+ else :
112+ self .update_res (ModuleResult .WARNING )
113+ self .result .setStatusBit (self .result .status .UNSUPPORTED_FEATURE )
114+ self .logger .log_warning ("Either flash descriptor is not valid or not present on this system" )
117115
118116 return self .result .getReturnCode (self .res )
119117
120118 def run (self , module_argv : List [str ]) -> int :
121119 self .logger .start_test ('SPI Flash Region Access Control' )
122120 try :
123- self .spi = SPI ( self .cs )
121+ self .spi = self .cs . hals . spi
124122 self .spi .display_SPI_Ranges_Access_Permissions ()
125123 self .res = self .check_flash_access_permissions ()
126124 except CSReadError as err :
0 commit comments