From: Alex Naslednikov Date: Tue, 14 Sep 2010 09:26:45 +0000 (+0000) Subject: [IPoIB] X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=16090bb17e3fafe89ac64b4291903fc9d01b33bd;p=~shefty%2Frdma-win.git [IPoIB] Removing the patch for the bug when NDIS sends OID_GEN_NETWORK_LAYER_ADDRESSES with the list of new addresses with invalid formatting from IPoIB based on NDIS5. This patch is relevant only for Windows 2008 R2 git-svn-id: svn://openib.tc.cornell.edu/gen1@2923 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/ipoib/kernel/ipoib_driver.c b/trunk/ulp/ipoib/kernel/ipoib_driver.c index 5a27df65..826f5a52 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_driver.c +++ b/trunk/ulp/ipoib/kernel/ipoib_driver.c @@ -2203,29 +2203,29 @@ __ipoib_set_net_addr( cl_vector_get_ptr( &p_adapter->ip_vector, idx ); p_net_addr_oid = (PNETWORK_ADDRESS)p_net_addrs->Address; - for( i = 0; i < p_net_addrs->AddressCount; ++i ) + for( i = 0; i < p_net_addrs->AddressCount; ++i, p_net_addr_oid = + (PNETWORK_ADDRESS)((uint8_t *)p_net_addr_oid + + FIELD_OFFSET(NETWORK_ADDRESS, Address) + + p_net_addr_oid->AddressLength) ) { - // Here we check that the data stored at 'AddressLength' field is valid; - // otherwise, it can lead to a memory violation (happened when AddressCount was > 1) + if( p_net_addr_oid->AddressType != NDIS_PROTOCOL_ID_TCP_IP ) + { + IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_OID, + ("Port %d OID_GEN_NETWORK_LAYER_ADDRESSES - Address %d is wrong type of 0x%.4X, " + "should be 0x%.4X\n", port_num, i, p_net_addr_oid->AddressType, + NDIS_PROTOCOL_ID_TCP_IP)); + continue; + } + if( p_net_addr_oid->AddressLength != NETWORK_ADDRESS_LENGTH_IP) { - IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_OID, ("Port %d OID_GEN_NETWORK_LAYER_ADDRESSES - Address %d is wrong size of %d, " "should be %d\n", port_num, i, p_net_addr_oid->AddressLength, NETWORK_ADDRESS_LENGTH_IP)); - ASSERT ( p_net_addr_oid->AddressLength == NETWORK_ADDRESS_LENGTH_IPX ); - break; + continue; } - - ASSERT( p_net_addr_oid->AddressType == NDIS_PROTOCOL_ID_TCP_IP ); - - p_net_addr_oid = (PNETWORK_ADDRESS)((uint8_t *)p_net_addr_oid + - FIELD_OFFSET(NETWORK_ADDRESS, Address) + - p_net_addr_oid->AddressLength) ; - - - p_ip_addr = (PNETWORK_ADDRESS_IP)p_net_addr_oid->Address; if( !cl_memcmp( &p_ip_addr->in_addr, &p_addr_item->address.as_ulong, sizeof(ULONG) ) ) @@ -2265,37 +2265,36 @@ __ipoib_set_net_addr( /* Now look for new addresses */ p_net_addr_oid = (NETWORK_ADDRESS *)p_net_addrs->Address; idx = 0; - - for( i = 0; i < p_net_addrs->AddressCount; ++i ) + for( i = 0; i < p_net_addrs->AddressCount; i++, p_net_addr_oid = + (PNETWORK_ADDRESS)((uint8_t *)p_net_addr_oid + + FIELD_OFFSET(NETWORK_ADDRESS, Address) + p_net_addr_oid->AddressLength) ) { - // Here we check that the data stored at 'AddressLength' field is valid; - // otherwise, it can lead to a memory violation (happened when AddressCount was > 1) + if( p_net_addr_oid->AddressType != NDIS_PROTOCOL_ID_TCP_IP ) + { + IPOIB_PRINT(TRACE_LEVEL_INFORMATION, IPOIB_DBG_OID, + ("Port %d OID_GEN_NETWORK_LAYER_ADDRESSES - Address %d is wrong type of 0x%.4X, " + "should be 0x%.4X\n", port_num, i, p_net_addr_oid->AddressType, + NDIS_PROTOCOL_ID_TCP_IP)); + continue; + } + if( p_net_addr_oid->AddressLength != NETWORK_ADDRESS_LENGTH_IP) { - IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + IPOIB_PRINT(TRACE_LEVEL_INFORMATION, IPOIB_DBG_OID, ("Port %d OID_GEN_NETWORK_LAYER_ADDRESSES - Address %d is wrong size of %d, " "should be %d\n", port_num, i, p_net_addr_oid->AddressLength, NETWORK_ADDRESS_LENGTH_IP)); - ASSERT ( p_net_addr_oid->AddressLength == NETWORK_ADDRESS_LENGTH_IPX ); - break; - + continue; } - - ASSERT( p_net_addr_oid->AddressType == NDIS_PROTOCOL_ID_TCP_IP ); - - p_net_addr_oid = (PNETWORK_ADDRESS)((uint8_t *)p_net_addr_oid + - FIELD_OFFSET(NETWORK_ADDRESS, Address) + - p_net_addr_oid->AddressLength) ; - - + p_ip_addr = (PNETWORK_ADDRESS_IP)p_net_addr_oid->Address; /* Size the vector as needed. */ if( cl_vector_get_size( &p_adapter->ip_vector ) <= idx ) cl_vector_set_size( &p_adapter->ip_vector, idx + 1 ); - p_addr_item = (net_address_item_t *) cl_vector_get_ptr( &p_adapter->ip_vector, idx ); + p_addr_item = cl_vector_get_ptr( &p_adapter->ip_vector, idx ); if( !cl_memcmp( &p_ip_addr->in_addr, &p_addr_item->address.as_ulong, sizeof(ULONG) ) ) {