[ovs-dev] [PATCH] ovsdb-idl: Fix iteration over tracked rows with no actual data.

Dumitru Ceara dceara at redhat.com
Mon Nov 23 09:49:53 UTC 2020


On 11/23/20 9:37 AM, Ilya Maximets wrote:
> When idl removes orphan rows, those rows are inserted into the
> 'track_list'.  This allows iterators such as *_FOR_EACH_TRACKED () to
> return orphan rows that never had any data to the IDL user.  In this
> case, it is difficult for the user to understand whether it is a row
> with no data (there was no "insert" / "modify" for this row) or it is
> a row with zero data (columns were cleared by DB transaction).
> 
> The main problem with this condition is that rows without data will
> have NULL pointers instead of references that should be there according
> to the database schema.  For example, ovn-controller might crash:
> 
>  ERROR: AddressSanitizer: SEGV on unknown address 0x000000000100
>        (pc 0x00000055e9b2 bp 0x7ffef6180880 sp 0x7ffef6180860 T0)
>  The signal is caused by a READ memory access.
>  Hint: address points to the zero page.
>     #0 0x55e9b1 in handle_deleted_lport /controller/binding.c
>     #1 0x55e903 in handle_deleted_vif_lport /controller/binding.c:2072:5
>     #2 0x55e059 in binding_handle_port_binding_changes /controller/binding.c:2155:23
>     #3 0x5a6395 in runtime_data_sb_port_binding_handler /controller/ovn-controller.c:1454:10
>     #4 0x5e15b3 in engine_compute /lib/inc-proc-eng.c:306:18
>     #5 0x5e0faf in engine_run_node /lib/inc-proc-eng.c:352:14
>     #6 0x5e0e04 in engine_run /lib/inc-proc-eng.c:377:9
>     #7 0x5a03de in main /controller/ovn-controller.c
>     #8 0x7f4fd9c991a2 in __libc_start_main (/lib64/libc.so.6+0x271a2)
>     #9 0x483f0d in _start (/controller/ovn-controller+0x483f0d)
> 
> It doesn't make much sense to return non-real rows to the user, so it's
> best to exclude them from iteration.
> 
> Test included.  Without the fix, provided test will print empty orphan
> rows that was never received by idl as tracked changes.
> 
> Fixes: 932104f483ef ("ovsdb-idl: Add support for change tracking.")
> Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
> ---

Looks good to me, thanks!

Acked-by: Dumitru Ceara <dceara at redhat.com>



More information about the dev mailing list