From b71b5ffbfb2ddbad408a22ef17046dfe5fea1cad Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Tue, 23 Jul 2019 16:28:36 -0400 Subject: 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 (cherry picked from commit 3940de36728b768574a3e998389bb90d55f690d1) --- src/vnet/devices/virtio/virtio_api.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/vnet/devices/virtio/virtio_api.c') diff --git a/src/vnet/devices/virtio/virtio_api.c b/src/vnet/devices/virtio/virtio_api.c index ff123ae081c..6e8d34f872e 100644 --- a/src/vnet/devices/virtio/virtio_api.c +++ b/src/vnet/devices/virtio/virtio_api.c @@ -97,10 +97,12 @@ vl_api_virtio_pci_delete_t_handler (vl_api_virtio_pci_delete_t * mp) vl_api_virtio_pci_delete_reply_t *rmp; vl_api_registration_t *reg; - hw = vnet_get_sup_hw_interface (vnm, htonl (mp->sw_if_index)); + hw = + vnet_get_sup_hw_interface_api_visible_or_null (vnm, + htonl (mp->sw_if_index)); if (hw == NULL || virtio_device_class.index != hw->dev_class_index) { - rv = VNET_API_ERROR_INVALID_INTERFACE; + rv = VNET_API_ERROR_INVALID_SW_IF_INDEX; goto reply; } -- cgit 1.2.3-korg