Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa3e7eaf authored by Al Viro's avatar Al Viro
Browse files

switch elf_core_write_extra_data() to dump_emit()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 506f21c5
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -40,8 +40,7 @@ int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
	return 1;
}

int elf_core_write_extra_data(struct file *file, size_t *size,
			      unsigned long limit)
int elf_core_write_extra_data(struct coredump_params *cprm)
{
	const struct elf_phdr *const gate_phdrs =
		(const struct elf_phdr *) (GATE_ADDR + GATE_EHDR->e_phoff);
@@ -52,8 +51,7 @@ int elf_core_write_extra_data(struct file *file, size_t *size,
			void *addr = (void *)gate_phdrs[i].p_vaddr;
			size_t memsz = PAGE_ALIGN(gate_phdrs[i].p_memsz);

			*size += memsz;
			if (*size > limit || !dump_write(file, addr, memsz))
			if (!dump_emit(cprm, addr, memsz))
				return 0;
			break;
		}
+2 −6
Original line number Diff line number Diff line
@@ -38,8 +38,7 @@ int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
	return 1;
}

int elf_core_write_extra_data(struct file *file, size_t *size,
			      unsigned long limit)
int elf_core_write_extra_data(struct coredump_params *cprm)
{
	if ( vsyscall_ehdr ) {
		const struct elfhdr *const ehdrp =
@@ -52,10 +51,7 @@ int elf_core_write_extra_data(struct file *file, size_t *size,
			if (phdrp[i].p_type == PT_LOAD) {
				void *addr = (void *) phdrp[i].p_vaddr;
				size_t filesz = phdrp[i].p_filesz;

				*size += filesz;
				if (*size > limit
				    || !dump_write(file, addr, filesz))
				if (!dump_emit(cprm, addr, filesz))
					return 0;
			}
		}
+3 −1
Original line number Diff line number Diff line
@@ -2196,8 +2196,10 @@ static int elf_core_dump(struct coredump_params *cprm)
		}
	}

	if (!elf_core_write_extra_data(cprm->file, &size, cprm->limit))
	cprm->written = size;
	if (!elf_core_write_extra_data(cprm))
		goto end_coredump;
	size = cprm->written;

	if (e_phnum == PN_XNUM) {
		size += sizeof(*shdr4extnum);
+3 −1
Original line number Diff line number Diff line
@@ -1818,8 +1818,10 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
				    cprm->mm_flags) < 0)
		goto end_coredump;

	if (!elf_core_write_extra_data(cprm->file, &size, cprm->limit))
	cprm->written = size;
	if (!elf_core_write_extra_data(cprm))
		goto end_coredump;
	size = cprm->written;

	if (e_phnum == PN_XNUM) {
		size += sizeof(*shdr4extnum);
+1 −1
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ extern Elf_Half elf_core_extra_phdrs(void);
extern int
elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset);
extern int
elf_core_write_extra_data(struct file *file, size_t *size, unsigned long limit);
elf_core_write_extra_data(struct coredump_params *cprm);
extern size_t elf_core_extra_data_size(void);

#endif /* _LINUX_ELFCORE_H */