]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
pytest:segfault: some more ldb crashes
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Wed, 13 Mar 2024 20:32:47 +0000 (09:32 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 10 Apr 2024 05:13:32 +0000 (05:13 +0000)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/tests/segfault.py
selftest/knownfail.d/pyldb-segfaults [new file with mode: 0644]

index 6a7503372c3d639551254336ba9f48fede68ab41..2b543dc63820dd6ed0fa6503c732968db0ab53b5 100644 (file)
@@ -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 (file)
index 0000000..71b473d
--- /dev/null
@@ -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\)