@@ -6461,6 +6461,44 @@ START_TEST(test_raw_socket_recv_too_short_drop_returns_einval)
64616461}
64626462END_TEST
64636463
6464+ START_TEST (test_raw_socket_recvfrom_null_addrlen_rejected )
6465+ {
6466+ struct wolfIP s ;
6467+ int sd ;
6468+ uint8_t frame_buf [sizeof (struct wolfIP_ip_packet ) + 4 ];
6469+ struct wolfIP_ip_packet * frame = (struct wolfIP_ip_packet * )frame_buf ;
6470+ uint8_t payload [4 ] = {1 , 2 , 3 , 4 };
6471+ struct wolfIP_sockaddr_in from ;
6472+ uint8_t rxbuf [32 ];
6473+
6474+ wolfIP_init (& s );
6475+ mock_link_init (& s );
6476+ wolfIP_ipconfig_set (& s , 0x0A000001U , 0xFFFFFF00U , 0 );
6477+
6478+ sd = wolfIP_sock_socket (& s , AF_INET , IPSTACK_SOCK_RAW , WI_IPPROTO_UDP );
6479+ ck_assert_int_ge (sd , 0 );
6480+
6481+ memset (frame , 0 , sizeof (frame_buf ));
6482+ memcpy (frame -> eth .dst , s .ll_dev [TEST_PRIMARY_IF ].mac , 6 );
6483+ memcpy (frame -> eth .src , "\xaa\xbb\xcc\xdd\xee\xff" , 6 );
6484+ frame -> eth .type = ee16 (ETH_TYPE_IP );
6485+ frame -> ver_ihl = 0x45 ;
6486+ frame -> ttl = 32 ;
6487+ frame -> proto = WI_IPPROTO_UDP ;
6488+ frame -> len = ee16 (IP_HEADER_LEN + sizeof (payload ));
6489+ frame -> src = ee32 (0x0A000002U );
6490+ frame -> dst = ee32 (0x0A000001U );
6491+ memcpy (frame -> data , payload , sizeof (payload ));
6492+ frame -> csum = 0 ;
6493+ iphdr_set_checksum (frame );
6494+
6495+ wolfIP_recv_ex (& s , TEST_PRIMARY_IF , frame , ETH_HEADER_LEN + IP_HEADER_LEN + sizeof (payload ));
6496+
6497+ ck_assert_int_eq (wolfIP_sock_recvfrom (& s , sd , rxbuf , sizeof (rxbuf ), 0 ,
6498+ (struct wolfIP_sockaddr * )& from , NULL ), - WOLFIP_EINVAL );
6499+ }
6500+ END_TEST
6501+
64646502START_TEST (test_raw_socket_recv_uses_ip_total_length )
64656503{
64666504 struct wolfIP s ;
@@ -6540,6 +6578,38 @@ START_TEST(test_udp_short_frame_does_not_overread)
65406578}
65416579END_TEST
65426580
6581+ START_TEST (test_packet_socket_recvfrom_null_addrlen_rejected )
6582+ {
6583+ #if WOLFIP_PACKET_SOCKETS
6584+ struct wolfIP s ;
6585+ int sd ;
6586+ uint8_t frame_buf [ETH_HEADER_LEN + 4 ];
6587+ struct wolfIP_eth_frame * frame = (struct wolfIP_eth_frame * )frame_buf ;
6588+ struct wolfIP_sockaddr_ll from ;
6589+ uint8_t rxbuf [32 ];
6590+
6591+ wolfIP_init (& s );
6592+ mock_link_init (& s );
6593+
6594+ sd = wolfIP_sock_socket (& s , AF_PACKET , IPSTACK_SOCK_RAW , ETH_TYPE_IP );
6595+ ck_assert_int_ge (sd , 0 );
6596+
6597+ memset (frame , 0 , sizeof (frame_buf ));
6598+ memcpy (frame -> dst , s .ll_dev [TEST_PRIMARY_IF ].mac , 6 );
6599+ memcpy (frame -> src , "\xaa\xbb\xcc\xdd\xee\xff" , 6 );
6600+ frame -> type = ETH_TYPE_IP ;
6601+ memset (frame -> data , 0xAA , 4 );
6602+
6603+ wolfIP_recv_ex (& s , TEST_PRIMARY_IF , frame , (uint32_t )sizeof (frame_buf ));
6604+
6605+ ck_assert_int_eq (wolfIP_sock_recvfrom (& s , sd , rxbuf , sizeof (rxbuf ), 0 ,
6606+ (struct wolfIP_sockaddr * )& from , NULL ), - WOLFIP_EINVAL );
6607+ #else
6608+ ck_abort_msg ("WOLFIP_PACKET_SOCKETS disabled" );
6609+ #endif
6610+ }
6611+ END_TEST
6612+
65436613START_TEST (test_packet_socket_close_clears_entry )
65446614{
65456615#if WOLFIP_PACKET_SOCKETS
0 commit comments