Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/TlsDxe/TlsImpl.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (22 months ago)
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/TlsDxe/TlsImpl.c
r80721 r99404 28 28 EFI_STATUS 29 29 TlsEncryptPacket ( 30 IN TLS_INSTANCE 31 IN OUT EFI_TLS_FRAGMENT_DATA 32 IN UINT32 30 IN TLS_INSTANCE *TlsInstance, 31 IN OUT EFI_TLS_FRAGMENT_DATA **FragmentTable, 32 IN UINT32 *FragmentCount 33 33 ) 34 34 { 35 EFI_STATUS 36 UINTN 37 UINT32 38 UINT32 39 UINT8 40 UINT8 41 TLS_RECORD_HEADER 42 UINT16 43 TLS_RECORD_HEADER 44 UINT16 45 UINT32 46 UINT8 47 UINT32 48 INTN 35 EFI_STATUS Status; 36 UINTN Index; 37 UINT32 BytesCopied; 38 UINT32 BufferInSize; 39 UINT8 *BufferIn; 40 UINT8 *BufferInPtr; 41 TLS_RECORD_HEADER *RecordHeaderIn; 42 UINT16 ThisPlainMessageSize; 43 TLS_RECORD_HEADER *TempRecordHeader; 44 UINT16 ThisMessageSize; 45 UINT32 BufferOutSize; 46 UINT8 *BufferOut; 47 UINT32 RecordCount; 48 INTN Ret; 49 49 50 50 Status = EFI_SUCCESS; … … 92 92 // 93 93 BufferInPtr = BufferIn; 94 while ((UINTN) BufferInPtr < (UINTN)BufferIn + BufferInSize) {95 RecordHeaderIn = (TLS_RECORD_HEADER *) 96 if ( RecordHeaderIn->ContentType != TlsContentTypeApplicationData || RecordHeaderIn->Length > TLS_PLAINTEXT_RECORD_MAX_PAYLOAD_LENGTH) {94 while ((UINTN)BufferInPtr < (UINTN)BufferIn + BufferInSize) { 95 RecordHeaderIn = (TLS_RECORD_HEADER *)BufferInPtr; 96 if ((RecordHeaderIn->ContentType != TlsContentTypeApplicationData) || (RecordHeaderIn->Length > TLS_PLAINTEXT_RECORD_MAX_PAYLOAD_LENGTH)) { 97 97 Status = EFI_INVALID_PARAMETER; 98 98 goto ERROR; 99 99 } 100 100 101 BufferInPtr += TLS_RECORD_HEADER_LENGTH + RecordHeaderIn->Length; 101 RecordCount 102 RecordCount++; 102 103 } 103 104 … … 114 115 // Parsing buffer. Received packet may have multiple TLS record messages. 115 116 // 116 BufferInPtr = BufferIn;117 TempRecordHeader = (TLS_RECORD_HEADER *) 118 while ((UINTN) BufferInPtr < (UINTN)BufferIn + BufferInSize) {119 RecordHeaderIn = (TLS_RECORD_HEADER *) 117 BufferInPtr = BufferIn; 118 TempRecordHeader = (TLS_RECORD_HEADER *)BufferOut; 119 while ((UINTN)BufferInPtr < (UINTN)BufferIn + BufferInSize) { 120 RecordHeaderIn = (TLS_RECORD_HEADER *)BufferInPtr; 120 121 121 122 ThisPlainMessageSize = RecordHeaderIn->Length; 122 123 123 TlsWrite (TlsInstance->TlsConn, (UINT8 *) 124 TlsWrite (TlsInstance->TlsConn, (UINT8 *)(RecordHeaderIn + 1), ThisPlainMessageSize); 124 125 125 126 Ret = TlsCtrlTrafficOut (TlsInstance->TlsConn, (UINT8 *)(TempRecordHeader), TLS_RECORD_HEADER_LENGTH + TLS_CIPHERTEXT_RECORD_MAX_PAYLOAD_LENGTH); 126 127 127 128 if (Ret > 0) { 128 ThisMessageSize = (UINT16) 129 ThisMessageSize = (UINT16)Ret; 129 130 } else { 130 131 // 131 132 // No data was successfully encrypted, continue to encrypt other messages. 132 133 // 133 DEBUG (( EFI_D_WARN, "TlsEncryptPacket: No data read from TLS object.\n"));134 DEBUG ((DEBUG_WARN, "TlsEncryptPacket: No data read from TLS object.\n")); 134 135 135 136 ThisMessageSize = 0; … … 138 139 BufferOutSize += ThisMessageSize; 139 140 140 BufferInPtr += TLS_RECORD_HEADER_LENGTH + ThisPlainMessageSize;141 BufferInPtr += TLS_RECORD_HEADER_LENGTH + ThisPlainMessageSize; 141 142 TempRecordHeader = (TLS_RECORD_HEADER *)((UINT8 *)TempRecordHeader + ThisMessageSize); 142 143 } … … 154 155 } 155 156 156 (*FragmentTable)[0].FragmentBuffer 157 (*FragmentTable)[0].FragmentLength 158 *FragmentCount 157 (*FragmentTable)[0].FragmentBuffer = BufferOut; 158 (*FragmentTable)[0].FragmentLength = BufferOutSize; 159 *FragmentCount = 1; 159 160 160 161 return Status; … … 193 194 EFI_STATUS 194 195 TlsDecryptPacket ( 195 IN TLS_INSTANCE 196 IN OUT EFI_TLS_FRAGMENT_DATA 197 IN UINT32 196 IN TLS_INSTANCE *TlsInstance, 197 IN OUT EFI_TLS_FRAGMENT_DATA **FragmentTable, 198 IN UINT32 *FragmentCount 198 199 ) 199 200 { 200 EFI_STATUS 201 UINTN 202 UINT32 203 UINT8 204 UINT32 205 UINT8 206 TLS_RECORD_HEADER 207 UINT16 208 TLS_RECORD_HEADER 209 UINT16 210 UINT8 211 UINT32 212 UINT32 213 INTN 201 EFI_STATUS Status; 202 UINTN Index; 203 UINT32 BytesCopied; 204 UINT8 *BufferIn; 205 UINT32 BufferInSize; 206 UINT8 *BufferInPtr; 207 TLS_RECORD_HEADER *RecordHeaderIn; 208 UINT16 ThisCipherMessageSize; 209 TLS_RECORD_HEADER *TempRecordHeader; 210 UINT16 ThisPlainMessageSize; 211 UINT8 *BufferOut; 212 UINT32 BufferOutSize; 213 UINT32 RecordCount; 214 INTN Ret; 214 215 215 216 Status = EFI_SUCCESS; … … 257 258 // 258 259 BufferInPtr = BufferIn; 259 while ((UINTN) BufferInPtr < (UINTN)BufferIn + BufferInSize) {260 RecordHeaderIn = (TLS_RECORD_HEADER *) 261 if ( RecordHeaderIn->ContentType != TlsContentTypeApplicationData || NTOHS (RecordHeaderIn->Length) > TLS_CIPHERTEXT_RECORD_MAX_PAYLOAD_LENGTH) {260 while ((UINTN)BufferInPtr < (UINTN)BufferIn + BufferInSize) { 261 RecordHeaderIn = (TLS_RECORD_HEADER *)BufferInPtr; 262 if ((RecordHeaderIn->ContentType != TlsContentTypeApplicationData) || (NTOHS (RecordHeaderIn->Length) > TLS_CIPHERTEXT_RECORD_MAX_PAYLOAD_LENGTH)) { 262 263 Status = EFI_INVALID_PARAMETER; 263 264 goto ERROR; 264 265 } 266 265 267 BufferInPtr += TLS_RECORD_HEADER_LENGTH + NTOHS (RecordHeaderIn->Length); 266 RecordCount 268 RecordCount++; 267 269 } 268 270 … … 279 281 // Parsing buffer. Received packet may have multiple TLS record messages. 280 282 // 281 BufferInPtr = BufferIn;282 TempRecordHeader = (TLS_RECORD_HEADER *) 283 while ((UINTN) BufferInPtr < (UINTN)BufferIn + BufferInSize) {284 RecordHeaderIn = (TLS_RECORD_HEADER *) 283 BufferInPtr = BufferIn; 284 TempRecordHeader = (TLS_RECORD_HEADER *)BufferOut; 285 while ((UINTN)BufferInPtr < (UINTN)BufferIn + BufferInSize) { 286 RecordHeaderIn = (TLS_RECORD_HEADER *)BufferInPtr; 285 287 286 288 ThisCipherMessageSize = NTOHS (RecordHeaderIn->Length); 287 289 288 Ret = TlsCtrlTrafficIn (TlsInstance->TlsConn, (UINT8 *) 290 Ret = TlsCtrlTrafficIn (TlsInstance->TlsConn, (UINT8 *)(RecordHeaderIn), TLS_RECORD_HEADER_LENGTH + ThisCipherMessageSize); 289 291 if (Ret != TLS_RECORD_HEADER_LENGTH + ThisCipherMessageSize) { 290 292 TlsInstance->TlsSessionState = EfiTlsSessionError; 291 Status = EFI_ABORTED;293 Status = EFI_ABORTED; 292 294 goto ERROR; 293 295 } 294 296 295 297 Ret = 0; 296 Ret = TlsRead (TlsInstance->TlsConn, (UINT8 *) 298 Ret = TlsRead (TlsInstance->TlsConn, (UINT8 *)(TempRecordHeader + 1), TLS_PLAINTEXT_RECORD_MAX_PAYLOAD_LENGTH); 297 299 298 300 if (Ret > 0) { 299 ThisPlainMessageSize = (UINT16) 301 ThisPlainMessageSize = (UINT16)Ret; 300 302 } else { 301 303 // 302 304 // No data was successfully decrypted, continue to decrypt other messages. 303 305 // 304 DEBUG (( EFI_D_WARN, "TlsDecryptPacket: No data read from TLS object.\n"));306 DEBUG ((DEBUG_WARN, "TlsDecryptPacket: No data read from TLS object.\n")); 305 307 306 308 ThisPlainMessageSize = 0; … … 309 311 CopyMem (TempRecordHeader, RecordHeaderIn, TLS_RECORD_HEADER_LENGTH); 310 312 TempRecordHeader->Length = ThisPlainMessageSize; 311 BufferOutSize += TLS_RECORD_HEADER_LENGTH + ThisPlainMessageSize;312 313 BufferInPtr += TLS_RECORD_HEADER_LENGTH + ThisCipherMessageSize;313 BufferOutSize += TLS_RECORD_HEADER_LENGTH + ThisPlainMessageSize; 314 315 BufferInPtr += TLS_RECORD_HEADER_LENGTH + ThisCipherMessageSize; 314 316 TempRecordHeader = (TLS_RECORD_HEADER *)((UINT8 *)TempRecordHeader + TLS_RECORD_HEADER_LENGTH + ThisPlainMessageSize); 315 317 } … … 327 329 } 328 330 329 (*FragmentTable)[0].FragmentBuffer 330 (*FragmentTable)[0].FragmentLength 331 *FragmentCount 331 (*FragmentTable)[0].FragmentBuffer = BufferOut; 332 (*FragmentTable)[0].FragmentLength = BufferOutSize; 333 *FragmentCount = 1; 332 334 333 335 return Status; … … 347 349 return Status; 348 350 } 349
Note:
See TracChangeset
for help on using the changeset viewer.