diff options
| author | Quentin Young <qlyoung@cumulusnetworks.com> | 2020-01-03 19:07:25 -0500 |
|---|---|---|
| committer | Quentin Young <qlyoung@cumulusnetworks.com> | 2020-01-06 12:43:29 -0500 |
| commit | b900b3c6a4018415a385d76207489347cd629062 (patch) | |
| tree | 1f7a9592e8cf2d152848f84b5635e3f2a51ea608 /lib/zclient.c | |
| parent | b833cc1ff473e5de43a6c33b520024c943db180c (diff) | |
lib: dont decode more nexthops than we can handle
If someone provides us more nexthops than our configured multipath
setting, drop the rest of them
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'lib/zclient.c')
| -rw-r--r-- | lib/zclient.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/zclient.c b/lib/zclient.c index 6982d287a2..fd1b181e58 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -2679,6 +2679,17 @@ int zapi_labels_decode(struct stream *s, struct zapi_labels *zl) } STREAM_GETW(s, zl->nexthop_num); + + if (zl->nexthop_num > MULTIPATH_NUM) { + flog_warn( + EC_LIB_ZAPI_ENCODE, + "%s: Prefix %pFX has %d nexthops, but we can only use the first %d", + __func__, &zl->route.prefix, zl->nexthop_num, + MULTIPATH_NUM); + } + + zl->nexthop_num = MIN(MULTIPATH_NUM, zl->nexthop_num); + for (int i = 0; i < zl->nexthop_num; i++) { znh = &zl->nexthops[i]; |
