Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/TcpDxe/TcpOption.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/TcpDxe/TcpOption.c
r85718 r99404 20 20 UINT16 21 21 TcpGetUint16 ( 22 IN UINT8 *Buf22 IN UINT8 *Buf 23 23 ) 24 24 { 25 25 UINT16 Value; 26 26 27 CopyMem (&Value, Buf, sizeof (UINT16)); 27 28 return NTOHS (Value); … … 38 39 UINT32 39 40 TcpGetUint32 ( 40 IN UINT8 *Buf41 IN UINT8 *Buf 41 42 ) 42 43 { 43 44 UINT32 Value; 45 44 46 CopyMem (&Value, Buf, sizeof (UINT32)); 45 47 return NTOHL (Value); … … 55 57 VOID 56 58 TcpPutUint32 ( 57 OUT UINT8*Buf,58 IN UINT32 Data59 OUT UINT8 *Buf, 60 IN UINT32 Data 59 61 ) 60 62 { … … 73 75 UINT8 74 76 TcpComputeScale ( 75 IN TCP_CB *Tcb77 IN TCP_CB *Tcb 76 78 ) 77 79 { … … 83 85 BufSize = GET_RCV_BUFFSIZE (Tcb->Sk); 84 86 85 Scale = 0; 86 while ((Scale < TCP_OPTION_MAX_WS) && ((UINT32) (TCP_OPTION_MAX_WIN << Scale) < BufSize)) { 87 87 Scale = 0; 88 while ((Scale < TCP_OPTION_MAX_WS) && ((UINT32)(TCP_OPTION_MAX_WIN << Scale) < BufSize)) { 88 89 Scale++; 89 90 } … … 103 104 UINT16 104 105 TcpSynBuildOption ( 105 IN TCP_CB *Tcb,106 IN NET_BUF *Nbuf106 IN TCP_CB *Tcb, 107 IN NET_BUF *Nbuf 107 108 ) 108 109 { … … 121 122 if (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_TS) && 122 123 (!TCP_FLG_ON (TCPSEG_NETBUF (Nbuf)->Flag, TCP_FLG_ACK) || 123 124 ) {125 124 TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_TS)) 125 ) 126 { 126 127 Data = NetbufAllocSpace ( 127 128 Nbuf, … … 145 146 if (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_WS) && 146 147 (!TCP_FLG_ON (TCPSEG_NETBUF (Nbuf)->Flag, TCP_FLG_ACK) || 147 148 ) {149 148 TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_WS)) 149 ) 150 { 150 151 Data = NetbufAllocSpace ( 151 152 Nbuf, … … 183 184 UINT16 184 185 TcpBuildOption ( 185 IN TCP_CB *Tcb,186 IN NET_BUF *Nbuf186 IN TCP_CB *Tcb, 187 IN NET_BUF *Nbuf 187 188 ) 188 189 { … … 198 199 if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_SND_TS) && 199 200 !TCP_FLG_ON (TCPSEG_NETBUF (Nbuf)->Flag, TCP_FLG_RST) 200 ) {201 201 ) 202 { 202 203 Data = NetbufAllocSpace ( 203 Nbuf,204 TCP_OPTION_TS_ALIGNED_LEN,205 NET_BUF_HEAD206 );204 Nbuf, 205 TCP_OPTION_TS_ALIGNED_LEN, 206 NET_BUF_HEAD 207 ); 207 208 208 209 ASSERT (Data != NULL); … … 230 231 INTN 231 232 TcpParseOption ( 232 IN TCP_HEAD *Tcp,233 IN OUT TCP_OPTION *Option234 ) 235 { 236 UINT8 *Head;237 UINT8 TotalLen;238 UINT8 Cur;239 UINT8 Type;240 UINT8 Len;233 IN TCP_HEAD *Tcp, 234 IN OUT TCP_OPTION *Option 235 ) 236 { 237 UINT8 *Head; 238 UINT8 TotalLen; 239 UINT8 Cur; 240 UINT8 Type; 241 UINT8 Len; 241 242 242 243 ASSERT ((Tcp != NULL) && (Option != NULL)); 243 244 244 Option->Flag 245 246 TotalLen = (UINT8)((Tcp->HeadLen << 2) - sizeof (TCP_HEAD));245 Option->Flag = 0; 246 247 TotalLen = (UINT8)((Tcp->HeadLen << 2) - sizeof (TCP_HEAD)); 247 248 if (TotalLen <= 0) { 248 249 return 0; 249 250 } 250 251 251 Head = (UINT8 *) 252 Head = (UINT8 *)(Tcp + 1); 252 253 253 254 // … … 255 256 // 256 257 if ((TotalLen == TCP_OPTION_TS_ALIGNED_LEN) && (TcpGetUint32 (Head) == TCP_OPTION_TS_FAST)) { 257 258 258 Option->TSVal = TcpGetUint32 (Head + 4); 259 259 Option->TSEcr = TcpGetUint32 (Head + 8); … … 262 262 return 0; 263 263 } 264 264 265 // 265 266 // Slow path to process the options. … … 271 272 272 273 switch (Type) { 273 case TCP_OPTION_MSS: 274 Len = Head[Cur + 1]; 275 276 if ((Len != TCP_OPTION_MSS_LEN) || (TotalLen - Cur < TCP_OPTION_MSS_LEN)) { 277 278 return -1; 279 } 280 281 Option->Mss = TcpGetUint16 (&Head[Cur + 2]); 282 TCP_SET_FLG (Option->Flag, TCP_OPTION_RCVD_MSS); 283 284 Cur += TCP_OPTION_MSS_LEN; 285 break; 286 287 case TCP_OPTION_WS: 288 Len = Head[Cur + 1]; 289 290 if ((Len != TCP_OPTION_WS_LEN) || (TotalLen - Cur < TCP_OPTION_WS_LEN)) { 291 292 return -1; 293 } 294 295 Option->WndScale = (UINT8) MIN (14, Head[Cur + 2]); 296 TCP_SET_FLG (Option->Flag, TCP_OPTION_RCVD_WS); 297 298 Cur += TCP_OPTION_WS_LEN; 299 break; 300 301 case TCP_OPTION_TS: 302 Len = Head[Cur + 1]; 303 304 if ((Len != TCP_OPTION_TS_LEN) || (TotalLen - Cur < TCP_OPTION_TS_LEN)) { 305 306 return -1; 307 } 308 309 Option->TSVal = TcpGetUint32 (&Head[Cur + 2]); 310 Option->TSEcr = TcpGetUint32 (&Head[Cur + 6]); 311 TCP_SET_FLG (Option->Flag, TCP_OPTION_RCVD_TS); 312 313 Cur += TCP_OPTION_TS_LEN; 314 break; 315 316 case TCP_OPTION_NOP: 317 Cur++; 318 break; 319 320 case TCP_OPTION_EOP: 321 Cur = TotalLen; 322 break; 323 324 default: 325 Len = Head[Cur + 1]; 326 327 if ((TotalLen - Cur) < Len || Len < 2) { 328 return -1; 329 } 330 331 Cur = (UINT8) (Cur + Len); 332 break; 274 case TCP_OPTION_MSS: 275 Len = Head[Cur + 1]; 276 277 if ((Len != TCP_OPTION_MSS_LEN) || (TotalLen - Cur < TCP_OPTION_MSS_LEN)) { 278 return -1; 279 } 280 281 Option->Mss = TcpGetUint16 (&Head[Cur + 2]); 282 TCP_SET_FLG (Option->Flag, TCP_OPTION_RCVD_MSS); 283 284 Cur += TCP_OPTION_MSS_LEN; 285 break; 286 287 case TCP_OPTION_WS: 288 Len = Head[Cur + 1]; 289 290 if ((Len != TCP_OPTION_WS_LEN) || (TotalLen - Cur < TCP_OPTION_WS_LEN)) { 291 return -1; 292 } 293 294 Option->WndScale = (UINT8)MIN (14, Head[Cur + 2]); 295 TCP_SET_FLG (Option->Flag, TCP_OPTION_RCVD_WS); 296 297 Cur += TCP_OPTION_WS_LEN; 298 break; 299 300 case TCP_OPTION_TS: 301 Len = Head[Cur + 1]; 302 303 if ((Len != TCP_OPTION_TS_LEN) || (TotalLen - Cur < TCP_OPTION_TS_LEN)) { 304 return -1; 305 } 306 307 Option->TSVal = TcpGetUint32 (&Head[Cur + 2]); 308 Option->TSEcr = TcpGetUint32 (&Head[Cur + 6]); 309 TCP_SET_FLG (Option->Flag, TCP_OPTION_RCVD_TS); 310 311 Cur += TCP_OPTION_TS_LEN; 312 break; 313 314 case TCP_OPTION_NOP: 315 Cur++; 316 break; 317 318 case TCP_OPTION_EOP: 319 Cur = TotalLen; 320 break; 321 322 default: 323 Len = Head[Cur + 1]; 324 325 if (((TotalLen - Cur) < Len) || (Len < 2)) { 326 return -1; 327 } 328 329 Cur = (UINT8)(Cur + Len); 330 break; 333 331 } 334 335 332 } 336 333
Note:
See TracChangeset
for help on using the changeset viewer.