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:
@@ -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
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user