ctdb-recoverd: Avoid dereferencing NULL rec->nodemap
commit716f52f68b248ae7cfd66479b3fc678c4a0d8b38
authorMartin Schwenke <martin@meltin.net>
Sun, 22 Mar 2020 02:46:46 +0000 (22 13:46 +1100)
committerMartin Schwenke <martins@samba.org>
Tue, 24 Mar 2020 01:22:45 +0000 (24 01:22 +0000)
tree53757f5477c36816710c7b6b2748c59002de5acf
parent147afe77de372ddb9c180228d6fe1b04cca4610f
ctdb-recoverd: Avoid dereferencing NULL rec->nodemap

Inside the nested event loop in ctdb_ctrl_getnodemap(), various
asynchronous handlers may dereference rec->nodemap, which will be
NULL.

One example is lost_reclock_handler(), which causes rec->nodemap to be
unconditionally dereferenced in list_of_nodes() via this call chain:

  list_of_nodes()
  list_of_active_nodes()
  set_recovery_mode()
  force_election()
  lost_reclock_handler()

Instead of attempting to trace all of the cases, just avoid leaving
rec->nodemap set to NULL.  Attempting to use an old value is generally
harmless, especially since it will be the same as the new value in
most cases.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14324

Reported-by: Volker Lendecke <vl@samba.org>
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Tue Mar 24 01:22:45 UTC 2020 on sn-devel-184
ctdb/server/ctdb_recoverd.c