Skip to content

Commit 6ede570

Browse files
Neale Rannsdmarion
authored andcommitted
fib: Fix some more realloc errors
Type: fix Change-Id: I6011f5d6eae79019d3c16a260a9bedf0a76d2151 Signed-off-by: Neale Ranns <[email protected]>
1 parent 685001f commit 6ede570

File tree

5 files changed

+34
-55
lines changed

5 files changed

+34
-55
lines changed

src/vnet/fib/fib_entry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ fib_entry_post_install_actions (fib_entry_t *fib_entry,
708708
{
709709
fib_entry = fib_entry_post_flag_update_actions(fib_entry,
710710
old_flags);
711-
fib_entry_src_action_installed(fib_entry, source);
711+
fib_entry = fib_entry_src_action_installed(fib_entry, source);
712712

713713
return (fib_entry);
714714
}

src/vnet/fib/fib_entry_src.c

Lines changed: 23 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ fib_entry_src_action_init (fib_entry_t *fib_entry,
9191
.fes_entry_flags = flags,
9292
};
9393

94-
FIB_ENTRY_SRC_VFT_INVOKE(&esrc, fesv_init, (&esrc));
94+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, &esrc, fesv_init, (&esrc));
9595

9696
vec_add1(fib_entry->fe_srcs, esrc);
9797
vec_sort_with_function(fib_entry->fe_srcs,
@@ -213,7 +213,7 @@ fib_entry_src_action_deinit (fib_entry_t *fib_entry,
213213

214214
ASSERT(NULL != esrc);
215215

216-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_deinit, (esrc));
216+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_deinit, (esrc));
217217

218218
fib_path_ext_list_flush(&esrc->fes_path_exts);
219219
vec_del1(fib_entry->fe_srcs, index);
@@ -776,7 +776,7 @@ fib_entry_src_action_copy (fib_entry_t *fib_entry,
776776
orig_src->fes_src,
777777
orig_src->fes_entry_flags);
778778

779-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_copy,
779+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_copy,
780780
(orig_src, fib_entry, esrc));
781781

782782
fib_path_list_unlock(esrc->fes_pl);
@@ -1095,7 +1095,7 @@ fib_entry_src_action_deactivate (fib_entry_t *fib_entry,
10951095

10961096
ASSERT(esrc->fes_flags & FIB_ENTRY_SRC_FLAG_ACTIVE);
10971097

1098-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_deactivate,
1098+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_deactivate,
10991099
(esrc, fib_entry));
11001100

11011101
esrc->fes_flags &= ~(FIB_ENTRY_SRC_FLAG_ACTIVE |
@@ -1134,7 +1134,7 @@ fib_entry_src_action_fwd_update (const fib_entry_t *fib_entry,
11341134

11351135
vec_foreach(esrc, fib_entry->fe_srcs)
11361136
{
1137-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_fwd_update,
1137+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_fwd_update,
11381138
(esrc, fib_entry, source));
11391139
}
11401140
}
@@ -1223,18 +1223,20 @@ fib_entry_src_action_reactivate (fib_entry_t *fib_entry,
12231223
fib_entry_src_action_fwd_update(fib_entry, source);
12241224
}
12251225

1226-
void
1227-
fib_entry_src_action_installed (const fib_entry_t *fib_entry,
1226+
fib_entry_t *
1227+
fib_entry_src_action_installed (fib_entry_t *fib_entry,
12281228
fib_source_t source)
12291229
{
12301230
fib_entry_src_t *esrc;
12311231

12321232
esrc = fib_entry_src_find(fib_entry, source);
12331233

1234-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_installed,
1234+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_installed,
12351235
(esrc, fib_entry));
12361236

12371237
fib_entry_src_action_fwd_update(fib_entry, source);
1238+
1239+
return (fib_entry);
12381240
}
12391241

12401242
/*
@@ -1251,7 +1253,6 @@ fib_entry_src_action_add (fib_entry_t *fib_entry,
12511253
fib_entry_flag_t flags,
12521254
const dpo_id_t *dpo)
12531255
{
1254-
fib_node_index_t fib_entry_index;
12551256
fib_entry_src_t *esrc;
12561257

12571258
esrc = fib_entry_src_find_or_create(fib_entry, source, flags);
@@ -1261,7 +1262,7 @@ fib_entry_src_action_add (fib_entry_t *fib_entry,
12611262

12621263
if (flags != esrc->fes_entry_flags)
12631264
{
1264-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_flags_change,
1265+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_flags_change,
12651266
(esrc, fib_entry, flags));
12661267
}
12671268
esrc->fes_entry_flags = flags;
@@ -1274,20 +1275,13 @@ fib_entry_src_action_add (fib_entry_t *fib_entry,
12741275
return (fib_entry);
12751276
}
12761277

1277-
/*
1278-
* save variable so we can recover from a fib_entry realloc.
1279-
*/
1280-
fib_entry_index = fib_entry_get_index(fib_entry);
1281-
1282-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_add,
1278+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_add,
12831279
(esrc,
12841280
fib_entry,
12851281
flags,
12861282
fib_entry_get_dpo_proto(fib_entry),
12871283
dpo));
12881284

1289-
fib_entry = fib_entry_get(fib_entry_index);
1290-
12911285
esrc->fes_flags |= FIB_ENTRY_SRC_FLAG_ADDED;
12921286

12931287
fib_path_list_lock(esrc->fes_pl);
@@ -1314,7 +1308,7 @@ fib_entry_src_action_update (fib_entry_t *fib_entry,
13141308
fib_entry_flag_t flags,
13151309
const dpo_id_t *dpo)
13161310
{
1317-
fib_node_index_t fib_entry_index, old_path_list_index;
1311+
fib_node_index_t old_path_list_index;
13181312
fib_entry_src_t *esrc;
13191313

13201314
esrc = fib_entry_src_find_or_create(fib_entry, source, flags);
@@ -1327,20 +1321,13 @@ fib_entry_src_action_update (fib_entry_t *fib_entry,
13271321
old_path_list_index = esrc->fes_pl;
13281322
esrc->fes_entry_flags = flags;
13291323

1330-
/*
1331-
* save variable so we can recover from a fib_entry realloc.
1332-
*/
1333-
fib_entry_index = fib_entry_get_index(fib_entry);
1334-
1335-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_add,
1324+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_add,
13361325
(esrc,
13371326
fib_entry,
13381327
flags,
13391328
fib_entry_get_dpo_proto(fib_entry),
13401329
dpo));
13411330

1342-
fib_entry = fib_entry_get(fib_entry_index);
1343-
13441331
esrc->fes_flags |= FIB_ENTRY_SRC_FLAG_ADDED;
13451332

13461333
fib_path_list_lock(esrc->fes_pl);
@@ -1435,14 +1422,14 @@ fib_entry_src_action_remove (fib_entry_t *fib_entry,
14351422
}
14361423
else if (esrc->fes_flags & FIB_ENTRY_SRC_FLAG_CONTRIBUTING)
14371424
{
1438-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_deactivate,
1425+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_deactivate,
14391426
(esrc, fib_entry));
14401427
esrc->fes_flags &= ~FIB_ENTRY_SRC_FLAG_CONTRIBUTING;
14411428
}
14421429

14431430
old_path_list = esrc->fes_pl;
14441431

1445-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_remove, (esrc));
1432+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_remove, (esrc));
14461433

14471434
fib_path_list_unlock(old_path_list);
14481435
fib_entry_unlock(fib_entry_get_index(fib_entry));
@@ -1584,15 +1571,10 @@ fib_entry_src_action_path_add (fib_entry_t *fib_entry,
15841571
fib_entry_flag_t flags,
15851572
const fib_route_path_t *rpaths)
15861573
{
1587-
fib_node_index_t old_path_list, fib_entry_index;
1574+
fib_node_index_t old_path_list;
15881575
fib_path_list_flags_t pl_flags;
15891576
fib_entry_src_t *esrc;
15901577

1591-
/*
1592-
* save variable so we can recover from a fib_entry realloc.
1593-
*/
1594-
fib_entry_index = fib_entry_get_index(fib_entry);
1595-
15961578
esrc = fib_entry_src_find(fib_entry, source);
15971579
if (NULL == esrc)
15981580
{
@@ -1625,9 +1607,8 @@ fib_entry_src_action_path_add (fib_entry_t *fib_entry,
16251607
pl_flags = fib_entry_src_flags_2_path_list_flags(fib_entry_get_flags_i(fib_entry));
16261608
fib_entry_flags_update(fib_entry, rpaths, &pl_flags, esrc);
16271609

1628-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_path_add,
1610+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_path_add,
16291611
(esrc, fib_entry, pl_flags, rpaths));
1630-
fib_entry = fib_entry_get(fib_entry_index);
16311612

16321613
fib_path_list_lock(esrc->fes_pl);
16331614
fib_path_list_unlock(old_path_list);
@@ -1650,17 +1631,12 @@ fib_entry_src_action_path_swap (fib_entry_t *fib_entry,
16501631
fib_entry_flag_t flags,
16511632
const fib_route_path_t *rpaths)
16521633
{
1653-
fib_node_index_t old_path_list, fib_entry_index;
1634+
fib_node_index_t old_path_list;
16541635
fib_path_list_flags_t pl_flags;
16551636
fib_entry_src_t *esrc;
16561637

16571638
esrc = fib_entry_src_find(fib_entry, source);
16581639

1659-
/*
1660-
* save variable so we can recover from a fib_entry realloc.
1661-
*/
1662-
fib_entry_index = fib_entry_get_index(fib_entry);
1663-
16641640
if (NULL == esrc)
16651641
{
16661642
const dpo_id_t *dpo;
@@ -1681,7 +1657,7 @@ fib_entry_src_action_path_swap (fib_entry_t *fib_entry,
16811657
{
16821658
if (flags != esrc->fes_entry_flags)
16831659
{
1684-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_flags_change,
1660+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_flags_change,
16851661
(esrc, fib_entry, flags));
16861662
}
16871663
esrc->fes_entry_flags = flags;
@@ -1700,12 +1676,10 @@ fib_entry_src_action_path_swap (fib_entry_t *fib_entry,
17001676

17011677
fib_entry_flags_update(fib_entry, rpaths, &pl_flags, esrc);
17021678

1703-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_path_swap,
1679+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_path_swap,
17041680
(esrc, fib_entry,
17051681
pl_flags, rpaths));
17061682

1707-
fib_entry = fib_entry_get(fib_entry_index);
1708-
17091683
fib_path_list_lock(esrc->fes_pl);
17101684
fib_path_list_unlock(old_path_list);
17111685

@@ -1739,7 +1713,7 @@ fib_entry_src_action_path_remove (fib_entry_t *fib_entry,
17391713
pl_flags = fib_entry_src_flags_2_path_list_flags(fib_entry_get_flags_i(fib_entry));
17401714
fib_entry_flags_update(fib_entry, rpaths, &pl_flags, esrc);
17411715

1742-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_path_remove,
1716+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_path_remove,
17431717
(esrc, pl_flags, rpaths));
17441718

17451719
/*
@@ -1901,7 +1875,7 @@ fib_entry_set_source_data (fib_node_index_t fib_entry_index,
19011875

19021876
if (NULL != esrc)
19031877
{
1904-
FIB_ENTRY_SRC_VFT_INVOKE(esrc, fesv_set_data,
1878+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, esrc, fesv_set_data,
19051879
(esrc, fib_entry, data));
19061880
}
19071881
}

src/vnet/fib/fib_entry_src.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,16 @@ typedef struct fib_entry_src_vft_t_ {
226226
} \
227227
}
228228

229-
#define FIB_ENTRY_SRC_VFT_INVOKE(esrc, func, args) \
229+
#define FIB_ENTRY_SRC_VFT_INVOKE(_fe, esrc, func, args) \
230230
{ \
231231
const fib_entry_src_vft_t *_vft; \
232+
fib_node_index_t _fei = fib_entry_get_index(_fe); \
232233
_vft = fib_entry_src_get_vft(esrc); \
233234
if (_vft->func) { \
234235
(esrc)->fes_flags &= ~FIB_ENTRY_SRC_FLAG_STALE; \
235236
_vft->func args; \
236237
} \
238+
_fe = fib_entry_get(_fei); \
237239
}
238240

239241
#define FIB_ENTRY_SRC_VFT_INVOKE_AND_RETURN(esrc, func, args) \
@@ -313,8 +315,8 @@ extern fib_entry_src_flag_t fib_entry_src_action_path_remove(fib_entry_t *fib_en
313315
fib_source_t source,
314316
const fib_route_path_t *path);
315317

316-
extern void fib_entry_src_action_installed(const fib_entry_t *fib_entry,
317-
fib_source_t source);
318+
extern fib_entry_t* fib_entry_src_action_installed(fib_entry_t *fib_entry,
319+
fib_source_t source);
318320
extern void fib_entry_src_inherit (const fib_entry_t *cover,
319321
fib_entry_t *covered);
320322

src/vnet/fib/fib_entry_src_interface.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ fib_entry_src_interface_path_swap (fib_entry_src_t *src,
5656
fib_path_list_flags_t pl_flags,
5757
const fib_route_path_t *paths)
5858
{
59+
fib_node_index_t fib_entry_index;
5960
ip_adjacency_t *adj;
6061

62+
fib_entry_index = fib_entry_get_index(entry);
6163
src->fes_pl = fib_path_list_create(pl_flags, paths);
6264

6365
/*
@@ -69,7 +71,8 @@ fib_entry_src_interface_path_swap (fib_entry_src_t *src,
6971
adj_index_t ai;
7072

7173
ai = fib_path_list_get_adj(src->fes_pl,
72-
fib_entry_get_default_chain_type(entry));
74+
fib_entry_get_default_chain_type(
75+
fib_entry_get(fib_entry_index)));
7376
if (INDEX_INVALID != ai)
7477
{
7578
adj = adj_get(ai);

src/vnet/fib/fib_entry_src_interpose.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ fib_entry_src_interpose_deactivate (fib_entry_src_t *src,
207207
* there is another source for this entry. activate it so it
208208
* can provide forwarding
209209
*/
210-
FIB_ENTRY_SRC_VFT_INVOKE(best_src, fesv_deactivate,
210+
FIB_ENTRY_SRC_VFT_INVOKE(fib_entry, best_src, fesv_deactivate,
211211
(best_src, fib_entry));
212212
}
213213
}

0 commit comments

Comments
 (0)