|
486 | 486 | LLMNRAnswer_t * pxAnswer; |
487 | 487 | uint8_t * pucNewBuffer = NULL; |
488 | 488 | size_t uxExtraLength; |
| 489 | + size_t uxDataLength = uxBufferLength + |
| 490 | + sizeof( UDPHeader_t ) + |
| 491 | + sizeof( EthernetHeader_t ) + |
| 492 | + uxIPHeaderSizePacket( pxNetworkBuffer ); |
489 | 493 |
|
490 | | - if( xBufferAllocFixedSize == pdFALSE ) |
491 | | - { |
492 | | - size_t uxDataLength = uxBufferLength + |
493 | | - sizeof( UDPHeader_t ) + |
494 | | - sizeof( EthernetHeader_t ) + |
495 | | - uxIPHeaderSizePacket( pxNetworkBuffer ); |
496 | | - |
497 | | - #if ( ipconfigUSE_IPv6 != 0 ) |
498 | | - if( xSet.usType == dnsTYPE_AAAA_HOST ) |
499 | | - { |
500 | | - uxExtraLength = sizeof( LLMNRAnswer_t ) + ipSIZE_OF_IPv6_ADDRESS - sizeof( pxAnswer->ulIPAddress ); |
501 | | - } |
502 | | - else |
503 | | - #endif /* ( ipconfigUSE_IPv6 != 0 ) */ |
504 | | - #if ( ipconfigUSE_IPv4 != 0 ) |
505 | | - { |
506 | | - uxExtraLength = sizeof( LLMNRAnswer_t ); |
507 | | - } |
508 | | - #else /* ( ipconfigUSE_IPv4 != 0 ) */ |
| 494 | + #if ( ipconfigUSE_IPv6 != 0 ) |
| 495 | + if( xSet.usType == dnsTYPE_AAAA_HOST ) |
509 | 496 | { |
510 | | - /* do nothing, coverity happy */ |
| 497 | + uxExtraLength = sizeof( LLMNRAnswer_t ) + ipSIZE_OF_IPv6_ADDRESS - sizeof( pxAnswer->ulIPAddress ); |
511 | 498 | } |
512 | | - #endif /* ( ipconfigUSE_IPv4 != 0 ) */ |
| 499 | + else |
| 500 | + #endif /* ( ipconfigUSE_IPv6 != 0 ) */ |
| 501 | + #if ( ipconfigUSE_IPv4 != 0 ) |
| 502 | + { |
| 503 | + uxExtraLength = sizeof( LLMNRAnswer_t ); |
| 504 | + } |
| 505 | + #else /* ( ipconfigUSE_IPv4 != 0 ) */ |
| 506 | + { |
| 507 | + /* do nothing, coverity happy */ |
| 508 | + } |
| 509 | + #endif /* ( ipconfigUSE_IPv4 != 0 ) */ |
513 | 510 |
|
| 511 | + if( xBufferAllocFixedSize == pdFALSE ) |
| 512 | + { |
514 | 513 | /* Set the size of the outgoing packet. */ |
515 | 514 | pxNetworkBuffer->xDataLength = uxDataLength; |
516 | 515 | pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, |
|
539 | 538 | } |
540 | 539 | else |
541 | 540 | { |
542 | | - pucNewBuffer = &( pxNetworkBuffer->pucEthernetBuffer[ uxUDPOffset ] ); |
| 541 | + /* When xBufferAllocFixedSize is TRUE, check if the buffer size is big enough to |
| 542 | + * store the answer. */ |
| 543 | + if( ( uxDataLength + uxExtraLength ) <= ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) |
| 544 | + { |
| 545 | + pucNewBuffer = &( pxNetworkBuffer->pucEthernetBuffer[ uxUDPOffset ] ); |
| 546 | + } |
| 547 | + else |
| 548 | + { |
| 549 | + /* Just to indicate that the message may not be answered. */ |
| 550 | + pxNetworkBuffer = NULL; |
| 551 | + } |
543 | 552 | } |
544 | 553 |
|
545 | 554 | if( ( pxNetworkBuffer != NULL ) ) |
|
1214 | 1223 | { |
1215 | 1224 | /* BufferAllocation_1.c is used, the Network Buffers can contain at least |
1216 | 1225 | * ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER. */ |
1217 | | - configASSERT( uxSizeNeeded < ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ); |
| 1226 | + if( uxSizeNeeded > ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) |
| 1227 | + { |
| 1228 | + /* The buffer is too small to reply. Drop silently. */ |
| 1229 | + break; |
| 1230 | + } |
1218 | 1231 | } |
1219 | 1232 |
|
1220 | 1233 | pxNetworkBuffer->xDataLength = uxSizeNeeded; |
|
0 commit comments