api: binary api cleanup 21/20821/2
authorDave Barach <dave@barachs.net>
Tue, 23 Jul 2019 20:28:36 +0000 (16:28 -0400)
committerDave Barach <dave@barachs.net>
Wed, 24 Jul 2019 12:14:39 +0000 (08:14 -0400)
commitb71b5ffbfb2ddbad408a22ef17046dfe5fea1cad
tree73490766e73d335ae722f45c89b092cfcd707b34
parent9fb50d83dbe22cab30532cec8c85e711af1f82ff
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)
23 files changed:
src/plugins/avf/avf_api.c
src/plugins/avf/cli.c
src/plugins/marvell/pp2/cli.c
src/plugins/memif/cli.c
src/plugins/memif/memif_api.c
src/plugins/rdma/cli.c
src/plugins/vmxnet3/cli.c
src/plugins/vmxnet3/vmxnet3_api.c
src/vnet/adj/rewrite.c
src/vnet/bfd/bfd_cli.c
src/vnet/bfd/bfd_udp.c
src/vnet/devices/tap/tap.c
src/vnet/devices/virtio/cli.c
src/vnet/devices/virtio/vhost_user.c
src/vnet/devices/virtio/virtio_api.c
src/vnet/interface_api.c
src/vnet/interface_format.c
src/vnet/interface_funcs.h
src/vnet/ip/ip4_punt_drop.c
src/vnet/l2/l2_fib.c
src/vnet/l2/l2_vtr.c
src/vnet/session/application_namespace.c
src/vpp/api/custom_dump.c