Prevent dangling pointer

This commit is contained in:
Alex 2023-03-14 06:24:02 +02:00
parent 855384aead
commit d7c9b7ab02
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
23 changed files with 91 additions and 90 deletions

View File

@ -49,7 +49,7 @@ namespace Disk
memcpy(&drive->Table, RWBuffer, sizeof(PartitionTable));
/*
----> Add to devfs the disk
TODO: Add to devfs the disk
*/
if (drive->Table.GPT.Signature == GPT_MAGIC)
@ -101,7 +101,7 @@ namespace Disk
sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index);
/*
----> Add to devfs the disk
TODO: Add to devfs the disk
*/
delete[] PartitionName;
@ -131,7 +131,7 @@ namespace Disk
sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index);
/*
----> Add to devfs the disk
TODO: Add to devfs the disk
*/
delete[] PartitionName;

View File

@ -41,13 +41,14 @@ namespace Driver
debug("Stopping & unloading driver %ld [%#lx]", drv->DriverUID, drv->Address);
DriverManager->IOCB(drv->DriverUID, (void *)&callback);
delete drv->MemTrk;
delete drv->MemTrk, drv->MemTrk = nullptr;
for (size_t j = 0; j < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); j++)
{
if (!drv->InterruptHook[j])
continue;
delete drv->InterruptHook[j];
delete drv->InterruptHook[j], drv->InterruptHook[j] = nullptr;
}
delete drv, drv = nullptr;
Drivers.remove(i);
}
}
@ -65,13 +66,14 @@ namespace Driver
debug("Stopping and unloading driver %ld [%#lx]", drv->DriverUID, drv->Address);
this->IOCB(drv->DriverUID, (void *)&callback);
delete drv->MemTrk;
delete drv->MemTrk, drv->MemTrk = nullptr;
for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++)
{
if (!drv->InterruptHook[i])
continue;
delete drv->InterruptHook[i];
delete drv->InterruptHook[i], drv->InterruptHook[i] = nullptr;
}
delete drv, drv = nullptr;
Drivers.remove(i);
return true;
}

View File

@ -50,13 +50,13 @@ namespace Driver
int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback);
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{
delete mem;
delete mem, mem = nullptr;
error("Driver %s is not implemented", fexExtended->Driver.Name);
return DriverCode::NOT_IMPLEMENTED;
}
else if (CallbackRet != DriverReturnCode::OK)
{
delete mem;
delete mem, mem = nullptr;
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
return DriverCode::DRIVER_RETURNED_ERROR;
}
@ -98,7 +98,7 @@ namespace Driver
if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK)
{
delete mem;
delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex);
@ -110,7 +110,7 @@ namespace Driver
default:
{
warn("Unknown driver type: %d", fexExtended->Driver.Type);
delete mem;
delete mem, mem = nullptr;
return DriverCode::UNKNOWN_DRIVER_TYPE;
}
}

View File

@ -103,7 +103,7 @@ namespace Driver
}
fixme("Display driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -147,7 +147,7 @@ namespace Driver
}
fixme("Network driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -208,13 +208,13 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{
error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
else if (CallbackRet != DriverReturnCode::OK)
{
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem;
delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
@ -267,7 +267,7 @@ namespace Driver
}
fixme("Filesystem driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -347,15 +347,15 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{
error("Driver %s is not implemented", fexExtended->Driver.Name);
delete InterruptHook;
delete mem;
delete InterruptHook, InterruptHook = nullptr;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
else if (CallbackRet != DriverReturnCode::OK)
{
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete InterruptHook;
delete mem;
delete InterruptHook, InterruptHook = nullptr;
delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
@ -412,7 +412,7 @@ namespace Driver
}
fixme("Audio driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -435,7 +435,7 @@ namespace Driver
if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK)
{
delete mem;
delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex);
@ -459,7 +459,7 @@ namespace Driver
default:
{
warn("Unknown driver type: %d", fexExtended->Driver.Type);
delete mem;
delete mem, mem = nullptr;
return DriverCode::UNKNOWN_DRIVER_TYPE;
}
}

View File

@ -167,7 +167,7 @@ namespace Driver
}
fixme("Generic driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -211,7 +211,7 @@ namespace Driver
}
fixme("Display driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -266,8 +266,8 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{
error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem;
delete InterruptHook;
delete mem, mem = nullptr;
delete InterruptHook, InterruptHook = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
else if (CallbackRet == DriverReturnCode::OK)
@ -275,8 +275,8 @@ namespace Driver
else
{
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem;
delete InterruptHook;
delete mem, mem = nullptr;
delete InterruptHook, InterruptHook = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
@ -340,7 +340,7 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{
error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
else if (CallbackRet == DriverReturnCode::OK)
@ -348,7 +348,7 @@ namespace Driver
else
{
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem;
delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
@ -402,7 +402,7 @@ namespace Driver
}
fixme("Filesystem driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -446,7 +446,7 @@ namespace Driver
}
fixme("Input driver: %s", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
@ -501,7 +501,7 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{
error("Driver %s is not implemented", fexExtended->Driver.Name);
delete mem;
delete mem, mem = nullptr;
return DriverCode::NOT_IMPLEMENTED;
}
else if (CallbackRet == DriverReturnCode::OK)
@ -509,7 +509,7 @@ namespace Driver
else
{
error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet);
delete mem;
delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
@ -562,7 +562,7 @@ namespace Driver
if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK)
{
delete mem;
delete mem, mem = nullptr;
return DriverCode::DRIVER_RETURNED_ERROR;
}
debug("Starting driver %s", fexExtended->Driver.Name);
@ -588,7 +588,7 @@ namespace Driver
default:
{
warn("Unknown driver type: %d", fexExtended->Driver.Type);
delete mem;
delete mem, mem = nullptr;
return DriverCode::UNKNOWN_DRIVER_TYPE;
}
}

View File

@ -74,8 +74,9 @@ namespace Video
if (this->Buffers[Index] == nullptr)
return;
KernelAllocator.FreePages(this->Buffers[Index]->Buffer, TO_PAGES(this->Buffers[Index]->Size));
this->Buffers[Index]->Buffer = nullptr;
this->Buffers[Index]->Checksum = 0; // Making sure that the buffer is not used anymore
delete this->Buffers[Index];
delete this->Buffers[Index], this->Buffers[Index] = nullptr;
}
void Display::SetBufferCursor(int Index, uint32_t X, uint32_t Y)

View File

@ -39,7 +39,7 @@ namespace Execute
uintptr_t *TmpBuffer = new uintptr_t[0x1000];
*(int *)TmpBuffer = 2545;
InterProcessCommunication::IPCErrorCode ret = Process->IPC->Write(Handle->ID, TmpBuffer, 0x1000);
delete[] TmpBuffer;
delete[] TmpBuffer, TmpBuffer = nullptr;
debug("Write returned %d", ret);
if (ret == InterProcessCommunication::IPCErrorCode::IPCNotListening)
{
@ -57,7 +57,7 @@ namespace Execute
void ELFInterpreterThreadWrapper()
{
ELFInterpreterIPCThread(InterpreterTargetProcess, (char *)InterpreterTargetPath->c_str(), InterpreterMemoryImage, InterpreterNeededLibraries);
delete InterpreterTargetPath;
delete InterpreterTargetPath, InterpreterTargetPath = nullptr;
return;
}
@ -206,7 +206,7 @@ namespace Execute
Thread->Memory->Add(p.Address, p.PageCount);
bl.TmpMem->DetachAddress(p.Address);
}
delete bl.TmpMem;
delete bl.TmpMem, bl.TmpMem = nullptr;
bl.sd.Process = Process;
bl.sd.Thread = Thread;

View File

@ -62,7 +62,7 @@ namespace Execute
SymbolValue = ELFGetSymbolValue(((Elf64_Ehdr *)BaseImage), Section->sh_link, ELF64_R_SYM(RelTable->r_info));
if (SymbolValue == 0xdead)
{
delete ELFBase.TmpMem;
delete ELFBase.TmpMem, ELFBase.TmpMem = nullptr;
return {};
}
}
@ -80,7 +80,7 @@ namespace Execute
default:
{
error("Unsupported relocation type: %d", ELF64_R_TYPE(RelTable->r_info));
delete ELFBase.TmpMem;
delete ELFBase.TmpMem, ELFBase.TmpMem = nullptr;
return {};
}
}

View File

@ -94,7 +94,7 @@ namespace VirtualFileSystem
FinalPath.Get()[Size - 1] = '\0';
// Deallocate the Path array
delete[] Path;
delete[] Path, Path = nullptr;
vfsdbg("GetPathFromNode()->\"%s\"", FinalPath.Get());
return FinalPath;
@ -246,7 +246,7 @@ namespace VirtualFileSystem
{
if (strcmp(Parent->Children[i]->Name, Name) == 0)
{
delete Parent->Children[i];
delete Parent->Children[i], Parent->Children[i] = nullptr;
Parent->Children.remove(i);
vfsdbg("RemoveChild()->OK");
return FileStatus::OK;

View File

@ -636,11 +636,11 @@ namespace GraphicalUserInterface
GUI::~GUI()
{
delete this->mem;
delete this->BackBuffer;
delete this->DesktopBuffer;
delete this->OverlayBuffer;
delete this->CursorBuffer;
delete this->mem, this->mem = nullptr;
delete this->BackBuffer, this->BackBuffer = nullptr;
delete this->DesktopBuffer, this->DesktopBuffer = nullptr;
delete this->OverlayBuffer, this->OverlayBuffer = nullptr;
delete this->CursorBuffer, this->CursorBuffer = nullptr;
Display->DeleteBuffer(200);
for (size_t i = 0; i < this->Windows.size(); i++)
this->Windows.remove(i);

View File

@ -57,7 +57,8 @@ namespace GraphicalUserInterface
LastHeight = ((Window *)this->ParentWindow)->GetPosition().Height;
this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size));
delete this->Buffer;
this->Buffer->Data = nullptr;
delete this->Buffer, this->Buffer = nullptr;
this->Buffer = new ScreenBitmap;
this->Buffer->Width = LastWidth;

View File

@ -117,8 +117,8 @@ namespace GraphicalUserInterface
WidgetCollection::~WidgetCollection()
{
delete this->mem;
delete this->Buffer;
delete this->CurrentFont;
delete this->mem, this->mem = nullptr;
delete this->Buffer, this->Buffer = nullptr;
delete this->CurrentFont, this->CurrentFont = nullptr;
}
}

View File

@ -60,6 +60,6 @@ namespace GraphicalUserInterface
Window::~Window()
{
delete this->mem;
delete this->mem, this->mem = nullptr;
}
}

View File

@ -15,7 +15,8 @@ namespace GraphicalUserInterface
{
// TODO: Optimize this
this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size));
delete this->Buffer;
this->Buffer->Data = nullptr;
delete this->Buffer, this->Buffer = nullptr;
this->Buffer = new ScreenBitmap;
this->Buffer->Width = e->Resize.Width;

View File

@ -27,7 +27,7 @@ namespace NetworkARP
{
DiscoveredAddress *tmp = DiscoveredAddresses[i];
netdbg("Removed %s from discovered addresses", IP.v4.ToStringLittleEndian());
delete tmp;
delete tmp, tmp = nullptr;
DiscoveredAddresses.remove(i);
}
}
@ -125,7 +125,7 @@ namespace NetworkARP
InternetProtocol().v4.FromHex(Header->TargetIP).ToStringLittleEndian());
/* Send the request to the broadcast MAC address. */
Ethernet->Send({.Address = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}, NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader));
delete Header;
delete Header, Header = nullptr;
}
int RequestTimeout = 20;
@ -160,7 +160,7 @@ namespace NetworkARP
Header->TargetMAC = b48(ResolvedMAC);
Header->TargetIP = b32(IP.v4.ToHex());
Ethernet->Send(MediaAccessControl().FromHex(ResolvedMAC), NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader));
delete Header;
delete Header, Header = nullptr;
}
bool ARP::OnEthernetPacketReceived(uint8_t *Data, uint64_t Length)

View File

@ -46,7 +46,7 @@ namespace NetworkInterfaceManager
RegisteredEvents.remove(i);
// Delete all interfaces and their callbacks and free the memory
delete mem;
delete mem, mem = nullptr;
}
void NetworkInterface::FetchNetworkCards(unsigned long DriverUID)

View File

@ -304,6 +304,6 @@ namespace Recovery
KernelRecovery::~KernelRecovery()
{
debug("Destructor called");
delete gui;
delete gui, gui = nullptr;
}
}

View File

@ -236,7 +236,7 @@ namespace InterProcessCommunication
IPC::~IPC()
{
delete mem;
delete mem, mem = nullptr;
vfs->Delete(IPCNode, true);
}
}

View File

@ -88,10 +88,10 @@ namespace Tasking
trace("Thread \"%s\"(%d) removed from process \"%s\"(%d)",
Thread->Name, Thread->ID, Thread->Parent->Name, Thread->Parent->ID);
// Free memory
delete Thread->Stack;
delete Thread->Memory;
delete Thread->Stack, Thread->Stack = nullptr;
delete Thread->Memory, Thread->Memory = nullptr;
SecurityManager.DestroyToken(Thread->Security.UniqueToken);
delete Thread->Parent->Threads[i];
delete Thread->Parent->Threads[i], Thread->Parent->Threads[i] = nullptr;
// Remove from the list
Thread->Parent->Threads.remove(i);
break;
@ -117,8 +117,8 @@ namespace Tasking
{
trace("Process \"%s\"(%d) removed from the list", Process->Name, Process->ID);
// Free memory
delete ListProcess[i]->IPC;
delete ListProcess[i]->ELFSymbolTable;
delete ListProcess[i]->IPC, ListProcess[i]->IPC = nullptr;
delete ListProcess[i]->ELFSymbolTable, ListProcess[i]->ELFSymbolTable = nullptr;
SecurityManager.DestroyToken(ListProcess[i]->Security.UniqueToken);
if (ListProcess[i]->Security.TrustLevel == TaskTrustLevel::User)
KernelAllocator.FreePages((void *)ListProcess[i]->PageTable, TO_PAGES(PAGE_SIZE));
@ -138,7 +138,7 @@ namespace Tasking
vfs->Delete(ListProcess[i]->ProcessDirectory, true);
// Free memory
delete ListProcess[i];
delete ListProcess[i], ListProcess[i] = nullptr;
// Remove from the list
ListProcess.remove(i);
break;
@ -304,9 +304,9 @@ namespace Tasking
}
}
delete Process->IPC;
delete Process->ELFSymbolTable;
delete Process;
delete Process->IPC, Process->IPC = nullptr;
delete Process->ELFSymbolTable, Process->ELFSymbolTable = nullptr;
delete Process, Process = nullptr;
ListProcess.remove(i);
NextPID--;
break;
@ -325,10 +325,10 @@ namespace Tasking
}
}
delete Thread->Stack;
delete Thread->Memory;
delete Thread->Stack, Thread->Stack = nullptr;
delete Thread->Memory, Thread->Memory = nullptr;
SecurityManager.DestroyToken(Thread->Security.UniqueToken);
delete Thread;
delete Thread, Thread = nullptr;
NextTID--;
}

View File

@ -39,9 +39,9 @@ public:
{
for (int i = 0; i < HashMapCapacity; i++)
if (Nodes[i] != nullptr)
delete Nodes[i];
delete[] Nodes;
delete DummyNode;
delete Nodes[i], Nodes[i] = nullptr;
delete[] Nodes, Nodes = nullptr;
delete DummyNode, DummyNode = nullptr;
}
int HashCode(K Key) { return Key % HashMapCapacity; }

View File

@ -41,7 +41,7 @@ public:
~smart_ptr()
{
spdbg("Smart pointer deleted (%#lx)", m_RealPointer);
delete (m_RealPointer);
delete m_RealPointer, m_RealPointer = nullptr;
}
T &operator*()
@ -151,8 +151,8 @@ public:
if (m_ReferenceCounter->Get() == 0)
{
spdbg("[%#lx] Shared pointer deleted (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter);
delete m_ReferenceCounter;
delete m_RealPointer;
delete m_ReferenceCounter, m_ReferenceCounter = nullptr;
delete m_RealPointer, m_RealPointer = nullptr;
}
}
@ -188,8 +188,8 @@ public:
(*m_ReferenceCounter)--;
if (m_ReferenceCounter->Get() == 0)
{
delete m_ReferenceCounter;
delete m_RealPointer;
delete m_ReferenceCounter;
}
m_RealPointer = Pointer;
m_ReferenceCounter = new Counter();
@ -202,15 +202,13 @@ public:
spdbg("[%#lx] Shared pointer reset (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter);
if (m_ReferenceCounter->Get() == 1)
{
delete m_RealPointer;
delete m_ReferenceCounter;
delete m_RealPointer, m_RealPointer = nullptr;
delete m_ReferenceCounter, m_ReferenceCounter = nullptr;
}
else
{
(*m_ReferenceCounter)--;
}
m_RealPointer = nullptr;
m_ReferenceCounter = nullptr;
}
void swap(shared_ptr<T> &Other)

View File

@ -40,7 +40,7 @@ public:
~String()
{
strdbg("String deleted: \"%s\" (data: %#lx, length: %d, capacity: %d)", this->m_Data, this->m_Data, this->m_Length, this->m_Capacity);
delete[] this->m_Data;
delete[] this->m_Data, this->m_Data = nullptr;
}
int length() const

View File

@ -71,8 +71,7 @@ public:
VectorCapacity = 0;
if (VectorBuffer != nullptr)
{
delete[] VectorBuffer;
VectorBuffer = nullptr;
delete[] VectorBuffer, VectorBuffer = nullptr;
}
}
@ -230,8 +229,7 @@ public:
VectorSize = 0;
if (VectorBuffer != nullptr)
{
delete[] VectorBuffer;
VectorBuffer = nullptr;
delete[] VectorBuffer, VectorBuffer = nullptr;
}
}