From: Douglas Bagnall Date: Wed, 13 Mar 2024 20:32:47 +0000 (+1300) Subject: pytest:segfault: some more ldb crashes X-Git-Tag: tdb-1.4.11~1219 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8bb6287c3ba20209c5d8352f3b2d90275561fb56;p=thirdparty%2Fsamba.git pytest:segfault: some more ldb crashes Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/tests/segfault.py b/python/samba/tests/segfault.py index 6a7503372c3..2b543dc6382 100644 --- a/python/samba/tests/segfault.py +++ b/python/samba/tests/segfault.py @@ -415,3 +415,137 @@ class SegfaultTests(samba.tests.TestCase): del samdb del msg dn.get_casefold() + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_disconnecting_connection(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + samdb.disconnect() + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + + del samdb + del msg + dn.get_casefold() + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_disconnecting_connection_no_del(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + samdb.disconnect() + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + dn.get_casefold() + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_disconnecting_connection_later__no_del(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + samdb.disconnect() + dn.get_casefold() + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_disconnecting_connection_add_child_later(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + samdb.disconnect() + dn.add_child("CN=TeSt") + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_disconnecting_connection_later(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + samdb.disconnect() + del samdb + dn.get_casefold() + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_disconnecting_connection_reconnecting_later(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + samdb.disconnect() + lp, creds, server = self.get_lp_et_al() + url = 'ldap://' + server + samdb.connect(url) + dn.get_casefold() + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_switching_out_connection(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + lp, creds, server = self.get_lp_et_al() + url = 'ldap://' + server + samdb.disconnect() + samdb.connect(url) + + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + samdb.disconnect() + samdb.connect(url) + del samdb + del msg + dn.get_casefold() + + @no_gdb_backtrace + @segfault_detector + def test_ldb_use_after_free_dn_assign_disconnecting_and_switching_out_connection(self): + + msg = ldb.Message() + + samdb = self.get_samdb() + msg.dn = ldb.Dn(samdb, "CN=Test") + samdb.disconnect() + lp, creds, server = self.get_lp_et_al() + url = 'ldap://' + server + samdb.connect(url) + + dn = msg.dn + dn.add_child("CN=TEST") + dn.set_component(0, "CN", "Test2") + + del samdb + del msg + dn.get_casefold() diff --git a/selftest/knownfail.d/pyldb-segfaults b/selftest/knownfail.d/pyldb-segfaults new file mode 100644 index 00000000000..71b473d083b --- /dev/null +++ b/selftest/knownfail.d/pyldb-segfaults @@ -0,0 +1,5 @@ +^samba\.tests\.segfault\.samba\.tests\.segfault\.SegfaultTests\.test_ldb_use_after_free_dn_assign_disconnecting_connection\(ad_dc\) +^samba\.tests\.segfault\.samba\.tests\.segfault\.SegfaultTests\.test_ldb_use_after_free_dn_assign_disconnecting_connection_add_child_later\(ad_dc\) +^samba\.tests\.segfault\.samba\.tests\.segfault\.SegfaultTests\.test_ldb_use_after_free_dn_assign_disconnecting_connection_later\(ad_dc\) +^samba\.tests\.segfault\.samba\.tests\.segfault\.SegfaultTests\.test_ldb_use_after_free_dn_assign_disconnecting_connection_later__no_del\(ad_dc\) +^samba\.tests\.segfault\.samba\.tests\.segfault\.SegfaultTests\.test_ldb_use_after_free_dn_assign_disconnecting_connection_no_del\(ad_dc\)