s3: lib: dbwrap: Set rec->value_valid to avoid backtrace in `smbstatus`
authorAnoop C S <anoopcs@redhat.com>
Wed, 8 Jan 2020 18:24:24 +0000 (10:24 -0800)
committerJeremy Allison <jra@samba.org>
Wed, 8 Jan 2020 23:24:58 +0000 (23:24 +0000)
Following backtrace is observed on executing `smbstatus` with at least
one SMB client connection established:

PANIC: assert failed at ../../lib/dbwrap/dbwrap.c(82): rec->value_valid
PANIC (pid 350270): assert failed: rec->value_valid
BACKTRACE: 15 stack frames:
 #0 /usr/local/lib/libsamba-util.so.0(log_stack_trace+0x1f)
[0x7fbbd9b32047]
 #1 /usr/local/lib/libsmbconf.so.0(smb_panic_s3+0x74) [0x7fbbd9c1e6ff]
 #2 /usr/local/lib/libsamba-util.so.0(smb_panic+0x28) [0x7fbbd9b32012]
 #3 /usr/local/lib/samba/libdbwrap-
samba4.so(dbwrap_record_get_value+0x86) [0x7fbbd95800ac]
 #4 /usr/local/lib/samba/libsmbd-base-samba4.so(+0x28f563)
[0x7fbbd999e563]
 #5 /usr/local/lib/samba/libsamba-cluster-support-samba4.so(+0x7851)
[0x7fbbd92c7851]
 #6 /usr/local/lib/samba/libsamba-cluster-support-
samba4.so(ctdbd_traverse+0x4ca) [0x7fbbd92cc641]
 #7 /usr/local/lib/samba/libsamba-cluster-support-samba4.so(+0x73eb)
[0x7fbbd92c73eb]
 #8 /usr/local/lib/samba/libsamba-cluster-support-samba4.so(+0x7a52)
[0x7fbbd92c7a52]
 #9 /usr/local/lib/samba/libdbwrap-samba4.so(dbwrap_traverse_read+0x35)
[0x7fbbd9580de5]
 #10 /usr/local/lib/samba/libsmbd-base-
samba4.so(smbXsrv_tcon_global_traverse+0xc5) [0x7fbbd999e7d9]
 #11 smbstatus(connections_forall_read+0x114) [0x55d17872b8ee]
 #12 smbstatus(main+0x7b2) [0x55d17872a2f3]
 #13 /lib64/libc.so.6(__libc_start_main+0xf3) [0x7fbbd93a21a3]
 #14 smbstatus(_start+0x2e) [0x55d17872894e]
Can not dump core: corepath not set up

Assertion on rec->value_valid fails as it is uninitialized in the
following functions:

traverse_read_callback
traverse_persistent_callback_read

Signed-off-by: Anoop C S <anoopcs@redhat.com>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Wed Jan  8 23:24:58 UTC 2020 on sn-devel-184

source3/lib/dbwrap/dbwrap_ctdb.c

index 434a356feef5062dd36fd951969e38f954c8115a..ef66726135981c55354f15e603418f6d3e6ee9f4 100644 (file)
@@ -1717,6 +1717,7 @@ static void traverse_read_callback(TDB_DATA key, TDB_DATA data, void *private_da
        rec.storev = db_ctdb_storev_deny;
        rec.delete_rec = db_ctdb_delete_deny;
        rec.private_data = NULL;
+       rec.value_valid = true;
        state->fn(&rec, state->private_data);
        state->count++;
 }
@@ -1741,6 +1742,7 @@ static int traverse_persistent_callback_read(TDB_CONTEXT *tdb, TDB_DATA kbuf, TD
        rec.db = state->db;
        rec.key = kbuf;
        rec.value = dbuf;
+       rec.value_valid = true;
        rec.storev = db_ctdb_storev_deny;
        rec.delete_rec = db_ctdb_delete_deny;
        rec.private_data = NULL;