mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-23 08:00:20 +00:00
LibELF: Fix stack overflow in ELFImage::relocations()
Thanks to braindead for finding the bug! :^)
This commit is contained in:
parent
0f42908073
commit
7ae7a60caa
Notes:
sideshowbarker
2024-07-19 10:21:00 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/7ae7a60caaa
2 changed files with 8 additions and 10 deletions
|
@ -1,5 +1,6 @@
|
|||
#include "ELFImage.h"
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <AK/kstdio.h>
|
||||
#include <LibELF/ELFImage.h>
|
||||
|
||||
ELFImage::ELFImage(const u8* buffer)
|
||||
: m_buffer(buffer)
|
||||
|
@ -194,14 +195,11 @@ const ELFImage::Relocation ELFImage::RelocationSection::relocation(unsigned inde
|
|||
|
||||
const ELFImage::RelocationSection ELFImage::Section::relocations() const
|
||||
{
|
||||
// FIXME: This is ugly.
|
||||
char relocation_sectionName[128];
|
||||
sprintf(relocation_sectionName, ".rel%s", name());
|
||||
StringBuilder builder;
|
||||
builder.append(".rel");
|
||||
builder.append(name());
|
||||
|
||||
#ifdef ELFIMAGE_DEBUG
|
||||
dbgprintf("looking for '%s'\n", relocation_sectionName);
|
||||
#endif
|
||||
auto relocation_section = m_image.lookup_section(relocation_sectionName);
|
||||
auto relocation_section = m_image.lookup_section(builder.to_string());
|
||||
if (relocation_section.type() != SHT_REL)
|
||||
return static_cast<const RelocationSection>(m_image.section(0));
|
||||
|
||||
|
@ -211,7 +209,7 @@ const ELFImage::RelocationSection ELFImage::Section::relocations() const
|
|||
return static_cast<const RelocationSection>(relocation_section);
|
||||
}
|
||||
|
||||
const ELFImage::Section ELFImage::lookup_section(const char* name) const
|
||||
const ELFImage::Section ELFImage::lookup_section(const String& name) const
|
||||
{
|
||||
if (auto it = m_sections.find(name); it != m_sections.end())
|
||||
return section((*it).value);
|
||||
|
|
|
@ -171,7 +171,7 @@ public:
|
|||
|
||||
// NOTE: Returns section(0) if section with name is not found.
|
||||
// FIXME: I don't love this API.
|
||||
const Section lookup_section(const char* name) const;
|
||||
const Section lookup_section(const String& name) const;
|
||||
|
||||
bool is_executable() const { return header().e_type == ET_EXEC; }
|
||||
bool is_relocatable() const { return header().e_type == ET_REL; }
|
||||
|
|
Loading…
Reference in a new issue