diff options
author | Dave Barach <dave@barachs.net> | 2019-07-23 16:28:36 -0400 |
---|---|---|
committer | Dave Barach <dave@barachs.net> | 2019-07-23 16:29:10 -0400 |
commit | 3940de36728b768574a3e998389bb90d55f690d1 (patch) | |
tree | f3c04d65748319ca38cbabce43c918f7ea745f1d /src/vnet/bfd | |
parent | b725ebb3f47302c416e41c7be3f5a8bb3c9fe547 (diff) |
api: binary api cleanup
Multiple API message handlers call vnet_get_sup_hw_interface(...)
without checking the inbound sw_if_index. This can cause a
pool_elt_at_index ASSERT in a debug image, and major disorder in a
production image.
Given that a number of places are coded as follows, add an
"api_visible_or_null" variant of vnet_get_sup_hw_interface, which
returns NULL given an invalid sw_if_index, or a hidden sw interface:
- hw = vnet_get_sup_hw_interface (vnm, sw_if_index);
+ hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index);
if (hw == NULL || memif_device_class.index != hw->dev_class_index)
return clib_error_return (0, "not a memif interface");
Rename two existing xxx_safe functions -> xxx_or_null to make it
obvious what they return.
Type: fix
Change-Id: I29996e8d0768fd9e0c5495bd91ff8bedcf2c5697
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vnet/bfd')
-rw-r--r-- | src/vnet/bfd/bfd_cli.c | 2 | ||||
-rw-r--r-- | src/vnet/bfd/bfd_udp.c | 8 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/vnet/bfd/bfd_cli.c b/src/vnet/bfd/bfd_cli.c index cab20a65b0b..4b5f75eb01b 100644 --- a/src/vnet/bfd/bfd_cli.c +++ b/src/vnet/bfd/bfd_cli.c @@ -170,7 +170,7 @@ show_bfd (vlib_main_t * vm, unformat_input_t * input, if (is_set) { vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (&vnet_main, sw_if_index); + vnet_get_sw_interface_or_null (&vnet_main, sw_if_index); vnet_hw_interface_t *hw_if = vnet_get_hw_interface (&vnet_main, sw_if->hw_if_index); u8 *s = format (NULL, "UDP echo source is: %v\n", hw_if->name); diff --git a/src/vnet/bfd/bfd_udp.c b/src/vnet/bfd/bfd_udp.c index 5c0da0ad35e..cc3b40c4075 100644 --- a/src/vnet/bfd/bfd_udp.c +++ b/src/vnet/bfd/bfd_udp.c @@ -82,7 +82,7 @@ vnet_api_error_t bfd_udp_set_echo_source (u32 sw_if_index) { vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (bfd_udp_main.vnet_main, sw_if_index); + vnet_get_sw_interface_or_null (bfd_udp_main.vnet_main, sw_if_index); if (sw_if) { bfd_udp_main.echo_source_sw_if_index = sw_if_index; @@ -114,8 +114,8 @@ bfd_udp_is_echo_available (bfd_transport_e transport) * pick an unused address from that subnet */ vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (bfd_udp_main.vnet_main, - bfd_udp_main.echo_source_sw_if_index); + vnet_get_sw_interface_or_null (bfd_udp_main.vnet_main, + bfd_udp_main.echo_source_sw_if_index); if (sw_if && sw_if->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) { if (BFD_TRANSPORT_UDP4 == transport) @@ -566,7 +566,7 @@ bfd_udp_validate_api_input (u32 sw_if_index, { bfd_udp_main_t *bum = &bfd_udp_main; vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (bfd_udp_main.vnet_main, sw_if_index); + vnet_get_sw_interface_or_null (bfd_udp_main.vnet_main, sw_if_index); u8 local_ip_valid = 0; ip_interface_address_t *ia = NULL; if (!sw_if) |