fix mem errors
This commit is contained in:
parent
85471efb4c
commit
bf39d3283b
3 changed files with 11 additions and 0 deletions
|
@ -399,6 +399,10 @@ static int relocate_instruction_rela(struct linker *linker,
|
|||
/// get the segment that the symbol is in
|
||||
struct segment_table_entry *ent;
|
||||
const char *segname = seg->obj->shstrtab->data + B32(shdr->sh_name);
|
||||
if (B32(shdr->sh_name) >= seg->obj->shstrtab->len) {
|
||||
ERROR("relocation segment name out of bounds");
|
||||
return M_ERROR;
|
||||
}
|
||||
if (segtab_get(&linker->segments, &ent, segname)) {
|
||||
ERROR("could not locate segment for relocation");
|
||||
return M_ERROR;
|
||||
|
|
|
@ -43,6 +43,11 @@ static int load_shdr(struct object *obj, struct segment *seg, size_t index)
|
|||
}
|
||||
seg->name = &obj->shstrtab->data[name];
|
||||
|
||||
if (seg->phdr->p_filesz != hdr->sh_size) {
|
||||
ERROR("segment phdr and shdr file sizes to not match");
|
||||
return M_ERROR;
|
||||
}
|
||||
|
||||
// map bytes
|
||||
uint32_t len = B32(hdr->sh_size);
|
||||
uint32_t off = B32(hdr->sh_offset);
|
||||
|
|
|
@ -121,12 +121,14 @@ int segtab_ent_push(struct segment_table_entry *ent, struct segment *seg)
|
|||
if (first->align != seg->align) {
|
||||
ERROR("segment '%s' doest not have matching alignment",
|
||||
ent->name);
|
||||
return M_ERROR;
|
||||
}
|
||||
if (first->read != seg->read ||
|
||||
first->write != seg->write ||
|
||||
first->execute != seg->execute) {
|
||||
ERROR("segment '%s' doest not have matching RWX",
|
||||
ent->name);
|
||||
return M_ERROR;
|
||||
}
|
||||
} else {
|
||||
ent->off = seg->new_off;
|
||||
|
|
Loading…
Reference in a new issue