aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vmxnet3
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2019-07-23 16:28:36 -0400
committerDave Barach <dave@barachs.net>2019-07-24 08:14:39 -0400
commitb71b5ffbfb2ddbad408a22ef17046dfe5fea1cad (patch)
tree73490766e73d335ae722f45c89b092cfcd707b34 /src/plugins/vmxnet3
parent9fb50d83dbe22cab30532cec8c85e711af1f82ff (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> (cherry picked from commit 3940de36728b768574a3e998389bb90d55f690d1)
Diffstat (limited to 'src/plugins/vmxnet3')
-rw-r--r--src/plugins/vmxnet3/cli.c4
-rw-r--r--src/plugins/vmxnet3/vmxnet3_api.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/src/plugins/vmxnet3/cli.c b/src/plugins/vmxnet3/cli.c
index 776901e8ac2..1d75b0cf7df 100644
--- a/src/plugins/vmxnet3/cli.c
+++ b/src/plugins/vmxnet3/cli.c
@@ -108,7 +108,7 @@ vmxnet3_delete_command_fn (vlib_main_t * vm, unformat_input_t * input,
return clib_error_return (0,
"please specify interface name or sw_if_index");
- 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 || vmxnet3_device_class.index != hw->dev_class_index)
return clib_error_return (0, "not a vmxnet3 interface");
@@ -165,7 +165,7 @@ vmxnet3_test_command_fn (vlib_main_t * vm, unformat_input_t * input,
return clib_error_return (0,
"please specify interface name or sw_if_index");
- 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 || vmxnet3_device_class.index != hw->dev_class_index)
return clib_error_return (0, "not a vmxnet3 interface");
diff --git a/src/plugins/vmxnet3/vmxnet3_api.c b/src/plugins/vmxnet3/vmxnet3_api.c
index 5e1bb9e2f18..541ca732e6d 100644
--- a/src/plugins/vmxnet3/vmxnet3_api.c
+++ b/src/plugins/vmxnet3/vmxnet3_api.c
@@ -97,10 +97,12 @@ vl_api_vmxnet3_delete_t_handler (vl_api_vmxnet3_delete_t * mp)
vnet_hw_interface_t *hw;
int rv = 0;
- 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 || vmxnet3_device_class.index != hw->dev_class_index)
{
- rv = VNET_API_ERROR_INVALID_INTERFACE;
+ rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
goto reply;
}