X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip-neighbor%2Fip_neighbor.c;h=6af76d262a4ee987c5572a563a6a5a5bd9447662;hb=3d5f6229bccf77fcf7e0e17ab4f1b361fedd1b2b;hp=d8c386dd527a6c9b60c7d9fa7d7e448320242c00;hpb=48ac1c2b2e973814d0ea991dddc9602c406acb10;p=vpp.git diff --git a/src/vnet/ip-neighbor/ip_neighbor.c b/src/vnet/ip-neighbor/ip_neighbor.c index d8c386dd527..6af76d262a4 100644 --- a/src/vnet/ip-neighbor/ip_neighbor.c +++ b/src/vnet/ip-neighbor/ip_neighbor.c @@ -615,6 +615,13 @@ ip_neighbor_update (vnet_main_t * vnm, adj_index_t ai) * wouldn't be bad either, but that's more code than i'm prepared to * write at this time for relatively little reward. */ + /* + * adj_nbr_update_rewrite may actually call fib_walk_sync. + * fib_walk_sync may allocate a new adjacency and potentially cause + * a realloc for adj_pool. When that happens, adj pointer is no + * longer valid here.x We refresh adj pointer accordingly. + */ + adj = adj_get (ai); ip_neighbor_probe (adj); } break;