1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-06-30 06:56:37 +02:00

Fix read after free in module API code when unloading channel mode,

client capability, history backend or message tag for good.
This commit is contained in:
Bram Matthys
2019-08-19 15:25:12 +02:00
parent 6f87314bbf
commit cbea57fefe
4 changed files with 21 additions and 21 deletions
+5 -5
View File
@@ -312,11 +312,6 @@ void unload_extcmode_commit(Cmode *cmode)
void CmodeDel(Cmode *cmode)
{
if (loop.ircd_rehashing)
cmode->unloaded = 1;
else
unload_extcmode_commit(cmode);
if (cmode->owner)
{
ModuleObject *cmodeobj;
@@ -329,6 +324,11 @@ void CmodeDel(Cmode *cmode)
}
cmode->owner = NULL;
}
if (loop.ircd_rehashing)
cmode->unloaded = 1;
else
unload_extcmode_commit(cmode);
}
void unload_all_unused_extcmodes(void)
+6 -6
View File
@@ -233,11 +233,6 @@ void unload_clicap_commit(ClientCapability *clicap)
*/
void ClientCapabilityDel(ClientCapability *clicap)
{
if (loop.ircd_rehashing)
clicap->unloaded = 1;
else
unload_clicap_commit(clicap);
if (clicap->owner)
{
ModuleObject *mobj;
@@ -250,13 +245,18 @@ void ClientCapabilityDel(ClientCapability *clicap)
}
clicap->owner = NULL;
}
if (loop.ircd_rehashing)
clicap->unloaded = 1;
else
unload_clicap_commit(clicap);
}
void unload_all_unused_caps(void)
{
ClientCapability *clicap, *clicap_next;
for (clicap = clicaps; clicap; clicap = clicap->next)
for (clicap = clicaps; clicap; clicap = clicap_next)
{
clicap_next = clicap->next;
if (clicap->unloaded)
+5 -5
View File
@@ -123,11 +123,6 @@ void unload_history_backend_commit(HistoryBackend *m)
*/
void HistoryBackendDel(HistoryBackend *m)
{
if (loop.ircd_rehashing)
m->unloaded = 1;
else
unload_history_backend_commit(m);
if (m->owner)
{
ModuleObject *mobj;
@@ -141,6 +136,11 @@ void HistoryBackendDel(HistoryBackend *m)
}
m->owner = NULL;
}
if (loop.ircd_rehashing)
m->unloaded = 1;
else
unload_history_backend_commit(m);
}
void unload_all_unused_history_backends(void)
+5 -5
View File
@@ -138,11 +138,6 @@ void unload_mtag_handler_commit(MessageTagHandler *m)
*/
void MessageTagHandlerDel(MessageTagHandler *m)
{
if (loop.ircd_rehashing)
m->unloaded = 1;
else
unload_mtag_handler_commit(m);
if (m->owner)
{
ModuleObject *mobj;
@@ -156,6 +151,11 @@ void MessageTagHandlerDel(MessageTagHandler *m)
}
m->owner = NULL;
}
if (loop.ircd_rehashing)
m->unloaded = 1;
else
unload_mtag_handler_commit(m);
}
void unload_all_unused_mtag_handlers(void)