vlib: fix crash on packet on deleted interface 34/36334/4
authorPim van Pelt <pim@ipng.nl>
Fri, 3 Jun 2022 21:05:26 +0000 (21:05 +0000)
committerDamjan Marion <dmarion@0xa5.net>
Tue, 7 Jun 2022 14:17:44 +0000 (14:17 +0000)
commit96158834db03036f9885654f198a02b68fc98830
tree8e32e7d28eaa9e06aed9892b1a213a5c887f41b1
parent9cca694c8f02dbe4a633938ef819bfb67e603888
vlib: fix crash on packet on deleted interface

If ip4_neighbor_probe (or any other) is sending packet to a deleted interface,
ASSERT trips and dataplane crashes. Example:

create loopback interface instance 0
set interface ip address loop0 10.0.0.1/32
set interface state GigabitEthernet3/0/1 up
set interface state loop0 up
set interface state loop0 down
set interface ip address del loop0 10.0.0.1/32
delete loopback interface intfc loop0
set interface state GigabitEthernet3/0/1 down
set interface state GigabitEthernet3/0/1 up
comment { the following crashes VPP }
set interface state GigabitEthernet3/0/1 down

This sequence reliably crashes VPP:

(gdb)p n->name
$4 = (u8 *) 0x7fff82b47578 "interface-3-output-deleted”

If the interface doesn't exist, return ~0 and be tolerant of this in the
two call sites of counter_index()

Type: fix
Signed-off-by: Pim van Pelt <pim@ipng.nl>
Change-Id: I90ec58fc0d14b20c9822703fe914f2ce89acb18d
src/vlib/drop.c