mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-06-04 18:48:54 +00:00
bgpd: fix illegal memory access in bgp_ls_tlv_check_size()
Fix illegal memory access bgp_ls_tlv_check_size() if type is 1253.
> CID 1568377 (#4 of 4): Out-of-bounds read (OVERRUN)
> 5. overrun-local: Overrunning array bgp_linkstate_tlv_infos of 1253 16-byte elements at element index 1253 (byte offset 20063) using index type (which evaluates to 1253).
Fixes: 7e0d9ff8ba
("bgpd: display link-state prefixes detail")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
parent
eb9e286511
commit
dae5791c44
@ -31,7 +31,7 @@ struct bgp_linkstate_tlv_info {
|
|||||||
#define UNDEF_MULTPL 1
|
#define UNDEF_MULTPL 1
|
||||||
|
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
struct bgp_linkstate_tlv_info bgp_linkstate_tlv_infos[BGP_LS_TLV_MAX] = {
|
struct bgp_linkstate_tlv_info bgp_linkstate_tlv_infos[BGP_LS_TLV_MAX + 1] = {
|
||||||
/* NLRI TLV */
|
/* NLRI TLV */
|
||||||
[BGP_LS_TLV_LOCAL_NODE_DESCRIPTORS] = {"Local Node Descriptors", 1, MAX_SZ, UNDEF_MULTPL},
|
[BGP_LS_TLV_LOCAL_NODE_DESCRIPTORS] = {"Local Node Descriptors", 1, MAX_SZ, UNDEF_MULTPL},
|
||||||
[BGP_LS_TLV_REMOTE_NODE_DESCRIPTORS] = {"Remote Node Descriptors", 1, MAX_SZ, UNDEF_MULTPL},
|
[BGP_LS_TLV_REMOTE_NODE_DESCRIPTORS] = {"Remote Node Descriptors", 1, MAX_SZ, UNDEF_MULTPL},
|
||||||
@ -1706,7 +1706,7 @@ void bgp_linkstate_tlv_attribute_display(struct vty *vty,
|
|||||||
json_tlv = json_object_new_object();
|
json_tlv = json_object_new_object();
|
||||||
json_object_object_add(json, tlv_type, json_tlv);
|
json_object_object_add(json, tlv_type, json_tlv);
|
||||||
|
|
||||||
if (type < BGP_LS_TLV_MAX &&
|
if (type <= BGP_LS_TLV_MAX &&
|
||||||
bgp_linkstate_tlv_infos[type].descr != NULL)
|
bgp_linkstate_tlv_infos[type].descr != NULL)
|
||||||
json_object_string_add(
|
json_object_string_add(
|
||||||
json_tlv, "description",
|
json_tlv, "description",
|
||||||
@ -1721,7 +1721,7 @@ void bgp_linkstate_tlv_attribute_display(struct vty *vty,
|
|||||||
"too high length received: %u", length);
|
"too high length received: %u", length);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (type < BGP_LS_TLV_MAX &&
|
if (type <= BGP_LS_TLV_MAX &&
|
||||||
bgp_linkstate_tlv_infos[type].descr != NULL &&
|
bgp_linkstate_tlv_infos[type].descr != NULL &&
|
||||||
!bgp_ls_tlv_check_size(type, length))
|
!bgp_ls_tlv_check_size(type, length))
|
||||||
json_object_string_addf(
|
json_object_string_addf(
|
||||||
@ -1729,7 +1729,7 @@ void bgp_linkstate_tlv_attribute_display(struct vty *vty,
|
|||||||
"unexpected length received: %u",
|
"unexpected length received: %u",
|
||||||
length);
|
length);
|
||||||
} else {
|
} else {
|
||||||
if (type < BGP_LS_TLV_MAX &&
|
if (type <= BGP_LS_TLV_MAX &&
|
||||||
bgp_linkstate_tlv_infos[type].descr != NULL)
|
bgp_linkstate_tlv_infos[type].descr != NULL)
|
||||||
vty_out(vty, "%*s%s: ", indent, "",
|
vty_out(vty, "%*s%s: ", indent, "",
|
||||||
bgp_linkstate_tlv_infos[type].descr);
|
bgp_linkstate_tlv_infos[type].descr);
|
||||||
|
@ -197,7 +197,7 @@ enum bgp_linkstate_tlv {
|
|||||||
1251, /* draft-ietf-idr-bgpls-srv6-ext-08 */
|
1251, /* draft-ietf-idr-bgpls-srv6-ext-08 */
|
||||||
BGP_LS_TLV_SRV6_SID_STRUCTURE_TLV =
|
BGP_LS_TLV_SRV6_SID_STRUCTURE_TLV =
|
||||||
1252, /* draft-ietf-idr-bgpls-srv6-ext-08 */
|
1252, /* draft-ietf-idr-bgpls-srv6-ext-08 */
|
||||||
BGP_LS_TLV_MAX = 1253, /* max TLV value for table size*/
|
BGP_LS_TLV_MAX = 1252, /* max TLV value for table size*/
|
||||||
};
|
};
|
||||||
|
|
||||||
/* RFC7752 #3.2.1.4 IGP router-ID */
|
/* RFC7752 #3.2.1.4 IGP router-ID */
|
||||||
|
Loading…
Reference in New Issue
Block a user