~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/virt/coco/sev-guest.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/virt/coco/sev-guest.rst (Version linux-6.11.5) and /Documentation/virt/coco/sev-guest.rst (Version linux-2.6.0)


  1 .. SPDX-License-Identifier: GPL-2.0               
  2                                                   
  3 ==============================================    
  4 The Definitive SEV Guest API Documentation        
  5 ==============================================    
  6                                                   
  7 1. General description                            
  8 ======================                            
  9                                                   
 10 The SEV API is a set of ioctls that are used b    
 11 to get or set a certain aspect of the SEV virt    
 12 to the following classes:                         
 13                                                   
 14  - Hypervisor ioctls: These query and set glob    
 15    whole SEV firmware.  These ioctl are used b    
 16                                                   
 17  - Guest ioctls: These query and set attribute    
 18                                                   
 19 2. API description                                
 20 ==================                                
 21                                                   
 22 This section describes ioctls that is used for    
 23 from the SEV firmware. For each ioctl, the fol    
 24 along with a description:                         
 25                                                   
 26   Technology:                                     
 27       which SEV technology provides this ioctl    
 28                                                   
 29   Type:                                           
 30       hypervisor or guest. The ioctl can be us    
 31       hypervisor.                                 
 32                                                   
 33   Parameters:                                     
 34       what parameters are accepted by the ioct    
 35                                                   
 36   Returns:                                        
 37       the return value.  General error numbers    
 38       are not detailed, but errors with specif    
 39                                                   
 40 The guest ioctl should be issued on a file des    
 41 device.  The ioctl accepts struct snp_user_gue    
 42 output structure is specified through the req_    
 43 respectively. If the ioctl fails to execute du    
 44 the fw_error code will be set, otherwise fw_er    
 45                                                   
 46 The firmware checks that the message sequence     
 47 the guests message sequence counter. If guest     
 48 counter (e.g. counter overflow), then -EIO wil    
 49                                                   
 50 ::                                                
 51                                                   
 52         struct snp_guest_request_ioctl {          
 53                 /* Message version number */      
 54                 __u32 msg_version;                
 55                                                   
 56                 /* Request and response struct    
 57                 __u64 req_data;                   
 58                 __u64 resp_data;                  
 59                                                   
 60                 /* bits[63:32]: VMM error code    
 61                 union {                           
 62                         __u64 exitinfo2;          
 63                         struct {                  
 64                                 __u32 fw_error    
 65                                 __u32 vmm_erro    
 66                         };                        
 67                 };                                
 68         };                                        
 69                                                   
 70 The host ioctls are issued to a file descripto    
 71 The ioctl accepts the command ID/input structu    
 72                                                   
 73 ::                                                
 74                                                   
 75         struct sev_issue_cmd {                    
 76                 /* Command ID */                  
 77                 __u32 cmd;                        
 78                                                   
 79                 /* Command request structure *    
 80                 __u64 data;                       
 81                                                   
 82                 /* Firmware error code on fail    
 83                 __u32 error;                      
 84         };                                        
 85                                                   
 86                                                   
 87 2.1 SNP_GET_REPORT                                
 88 ------------------                                
 89                                                   
 90 :Technology: sev-snp                              
 91 :Type: guest ioctl                                
 92 :Parameters (in): struct snp_report_req           
 93 :Returns (out): struct snp_report_resp on succ    
 94                                                   
 95 The SNP_GET_REPORT ioctl can be used to query     
 96 SEV-SNP firmware. The ioctl uses the SNP_GUEST    
 97 provided by the SEV-SNP firmware to query the     
 98                                                   
 99 On success, the snp_report_resp.data will cont    
100 contain the format described in the SEV-SNP sp    
101 specification for further details.                
102                                                   
103 2.2 SNP_GET_DERIVED_KEY                           
104 -----------------------                           
105 :Technology: sev-snp                              
106 :Type: guest ioctl                                
107 :Parameters (in): struct snp_derived_key_req      
108 :Returns (out): struct snp_derived_key_resp on    
109                                                   
110 The SNP_GET_DERIVED_KEY ioctl can be used to g    
111 The derived key can be used by the guest for a    
112 or communicating with external entities.          
113                                                   
114 The ioctl uses the SNP_GUEST_REQUEST (MSG_KEY_    
115 SEV-SNP firmware to derive the key. See SEV-SN    
116 on the various fields passed in the key deriva    
117                                                   
118 On success, the snp_derived_key_resp.data cont    
119 the SEV-SNP specification for further details.    
120                                                   
121                                                   
122 2.3 SNP_GET_EXT_REPORT                            
123 ----------------------                            
124 :Technology: sev-snp                              
125 :Type: guest ioctl                                
126 :Parameters (in/out): struct snp_ext_report_re    
127 :Returns (out): struct snp_report_resp on succ    
128                                                   
129 The SNP_GET_EXT_REPORT ioctl is similar to the    
130 related to the additional certificate data tha    
131 The certificate data returned is being provide    
132 SNP_SET_EXT_CONFIG.                               
133                                                   
134 The ioctl uses the SNP_GUEST_REQUEST (MSG_REPO    
135 firmware to get the attestation report.           
136                                                   
137 On success, the snp_ext_report_resp.data will     
138 and snp_ext_report_req.certs_address will cont    
139 length of the blob is smaller than expected th    
140 be updated with the expected value.               
141                                                   
142 See GHCB specification for further detail on h    
143                                                   
144 2.4 SNP_PLATFORM_STATUS                           
145 -----------------------                           
146 :Technology: sev-snp                              
147 :Type: hypervisor ioctl cmd                       
148 :Parameters (out): struct sev_user_data_snp_st    
149 :Returns (out): 0 on success, -negative on err    
150                                                   
151 The SNP_PLATFORM_STATUS command is used to que    
152 status includes API major, minor version and m    
153 specification for further details.                
154                                                   
155 2.5 SNP_COMMIT                                    
156 --------------                                    
157 :Technology: sev-snp                              
158 :Type: hypervisor ioctl cmd                       
159 :Returns (out): 0 on success, -negative on err    
160                                                   
161 SNP_COMMIT is used to commit the currently ins    
162 SEV-SNP firmware SNP_COMMIT command. This prev    
163 committed firmware version. This will also upd    
164 that of the currently installed firmware.         
165                                                   
166 2.6 SNP_SET_CONFIG                                
167 ------------------                                
168 :Technology: sev-snp                              
169 :Type: hypervisor ioctl cmd                       
170 :Parameters (in): struct sev_user_data_snp_con    
171 :Returns (out): 0 on success, -negative on err    
172                                                   
173 SNP_SET_CONFIG is used to set the system-wide     
174 reported TCB version in the attestation report    
175 to SNP_CONFIG command defined in the SEV-SNP s    
176 the firmware parameters affected by this comma    
177 SNP_PLATFORM_STATUS.                              
178                                                   
179 2.7 SNP_VLEK_LOAD                                 
180 -----------------                                 
181 :Technology: sev-snp                              
182 :Type: hypervisor ioctl cmd                       
183 :Parameters (in): struct sev_user_data_snp_vle    
184 :Returns (out): 0 on success, -negative on err    
185                                                   
186 When requesting an attestation report a guest     
187 it wants SNP firmware to sign the report using    
188 Endorsement Key (VCEK), which is derived from     
189 Versioned Loaded Endorsement Key (VLEK) which     
190 Key Derivation Service (KDS) and derived from     
191 enrolled cloud service providers.                 
192                                                   
193 In the case of VLEK keys, the SNP_VLEK_LOAD SN    
194 them into the system after obtaining them from    
195 closely to the SNP_VLEK_LOAD firmware command     
196 spec.                                             
197                                                   
198 3. SEV-SNP CPUID Enforcement                      
199 ============================                      
200                                                   
201 SEV-SNP guests can access a special page that     
202 that have been validated by the PSP as part of    
203 command. It provides the following assurances     
204 values:                                           
205                                                   
206  - Its address is obtained via bootloader/firm    
207    binaries will be measured as part of the SE    
208  - Its initial state will be encrypted/pvalida    
209    it during run-time will result in garbage b    
210    being generated due to changes in validatio    
211    to swap the backing page.                      
212  - Attempts to bypass PSP checks by the hyperv    
213    a non-CPUID encrypted page will change the     
214    SEV-SNP attestation report.                    
215  - The CPUID page contents are *not* measured,    
216    expected contents of a CPUID page as part o    
217    gated by the PSP CPUID enforcement policy c    
218    during SNP_LAUNCH_UPDATE, and noticeable la    
219    implements their own checks of the CPUID va    
220                                                   
221 It is important to note that this last assuran    
222 has taken care to make use of the SEV-SNP CPUI    
223 Otherwise, guest owner attestation provides no    
224 fed incorrect values at some point during boot    
225                                                   
226 4. SEV Guest Driver Communication Key             
227 =====================================             
228                                                   
229 Communication between an SEV guest and the SEV    
230 Processor (ASP, aka PSP) is protected by a VM     
231 (VMPCK). By default, the sev-guest driver uses    
232 VM Privilege Level (VMPL) at which the guest i    
233 wiped by the sev-guest driver (see the driver     
234 wiped), a different key can be used by reloadi    
235 specifying the desired key using the vmpck_id     
236                                                   
237                                                   
238 Reference                                         
239 ---------                                         
240                                                   
241 SEV-SNP and GHCB specification: developer.amd.    
242                                                   
243 The driver is based on SEV-SNP firmware spec 0    
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php