mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 15:11:48 -04:00
soc: qcom: Reset string table index for each dump collection request
Section name should be placed in String table. Currently, we used static version for string table index to update subsequent section names. Due to this string table index keeps on increasing during every new dump(subsystem restart) request. This ultimately will result in buffer overflow, leading to Redzone overwritten. Hence, as a fix now reset, this string table index once dump capture is complete. Change-Id: Ibc2446ae4011db5291044eacdc1a1119597d862a Signed-off-by: Jitendra Sharma <shajit@codeaurora.org> Signed-off-by: Mukesh Ojha <mojha@codeaurora.org>
This commit is contained in:
parent
bd0cb90137
commit
becade6094
1 changed files with 8 additions and 6 deletions
|
|
@ -500,19 +500,19 @@ static int _do_ramdump(void *handle, struct ramdump_segment *segments,
|
|||
}
|
||||
|
||||
static inline unsigned int set_section_name(const char *name,
|
||||
struct elfhdr *ehdr)
|
||||
struct elfhdr *ehdr,
|
||||
int *strtable_idx)
|
||||
{
|
||||
char *strtab = elf_str_table(ehdr);
|
||||
static int strtable_idx = 1;
|
||||
int idx, ret = 0;
|
||||
|
||||
idx = strtable_idx;
|
||||
idx = *strtable_idx;
|
||||
if ((strtab == NULL) || (name == NULL))
|
||||
return 0;
|
||||
|
||||
ret = idx;
|
||||
idx += strlcpy((strtab + idx), name, MAX_NAME_LENGTH);
|
||||
strtable_idx = idx + 1;
|
||||
*strtable_idx = idx + 1;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -526,6 +526,7 @@ static int _do_minidump(void *handle, struct ramdump_segment *segments,
|
|||
struct elfhdr *ehdr;
|
||||
struct elf_shdr *shdr;
|
||||
unsigned long offset, strtbl_off;
|
||||
int strtable_idx = 1;
|
||||
|
||||
/*
|
||||
* Acquire the consumer lock here, and hold the lock until we are done
|
||||
|
|
@ -581,13 +582,14 @@ static int _do_minidump(void *handle, struct ramdump_segment *segments,
|
|||
shdr->sh_size = MAX_STRTBL_SIZE;
|
||||
shdr->sh_entsize = 0;
|
||||
shdr->sh_flags = 0;
|
||||
shdr->sh_name = set_section_name("STR_TBL", ehdr);
|
||||
shdr->sh_name = set_section_name("STR_TBL", ehdr, &strtable_idx);
|
||||
shdr++;
|
||||
|
||||
for (i = 0; i < nsegments; i++, shdr++) {
|
||||
/* Update elf header */
|
||||
shdr->sh_type = SHT_PROGBITS;
|
||||
shdr->sh_name = set_section_name(segments[i].name, ehdr);
|
||||
shdr->sh_name = set_section_name(segments[i].name, ehdr,
|
||||
&strtable_idx);
|
||||
shdr->sh_addr = (elf_addr_t)segments[i].address;
|
||||
shdr->sh_size = segments[i].size;
|
||||
shdr->sh_flags = SHF_WRITE;
|
||||
|
|
|
|||
Loading…
Reference in a new issue