diff options
author | Dave Barach <dave@barachs.net> | 2020-04-07 10:52:43 -0400 |
---|---|---|
committer | Dave Wallace <dwallacelf@gmail.com> | 2020-04-13 15:02:30 +0000 |
commit | 7f094c2212cf906227ecb06e00f3082d886b32a0 (patch) | |
tree | 86d102165da82983f1a6db9d0e16152f72fd6091 /src/vlib | |
parent | e2568b5d0a5e34f02adda788e51ed0147644bec9 (diff) |
l2: handle complete clone fail in l2_flood
vlib_buffer_clone(...) may not manage to produce any buffer clones at
all.
vlib_buffer_clone_256 should not smash the original buffer reference
count if no clones are produced.
Type: fix
Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I14d9d53637a220485c7a0036cfc75a4149b264ea
(cherry picked from commit 95e19253320ab07748787f4c8a7620704563f6b8)
Diffstat (limited to 'src/vlib')
-rw-r--r-- | src/vlib/buffer_funcs.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/vlib/buffer_funcs.h b/src/vlib/buffer_funcs.h index 288a36a0c9f..36ec0d1fa96 100644 --- a/src/vlib/buffer_funcs.h +++ b/src/vlib/buffer_funcs.h @@ -1147,11 +1147,11 @@ vlib_buffer_clone_256 (vlib_main_t * vm, u32 src_buffer, u32 * buffers, d->next_buffer = src_buffer; } vlib_buffer_advance (s, head_end_offset); - s->ref_count = n_buffers; + s->ref_count = n_buffers ? n_buffers : s->ref_count; while (s->flags & VLIB_BUFFER_NEXT_PRESENT) { s = vlib_get_buffer (vm, s->next_buffer); - s->ref_count = n_buffers; + s->ref_count = n_buffers ? n_buffers : s->ref_count; } return n_buffers; |