Skip to content

Commit

Permalink
mcount: Fix Unchecked Return Value in mcount_setup_trampoline()
Browse files Browse the repository at this point in the history
Fixed: #498

Signed-off-by: GwanYeong Kim <gy741.kim@gmail.com>
  • Loading branch information
gy741 authored and namhyung committed Sep 17, 2018
1 parent 1db6a8b commit fa88fef
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
10 changes: 8 additions & 2 deletions arch/i386/mcount-dynamic.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ int mcount_setup_trampoline(struct mcount_dynamic_info *mdi)
unsigned char trampoline[] = { 0xe8, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x60, 0x04 };
unsigned long fentry_addr = (unsigned long)__fentry__;
size_t trampoline_size = 16;
void *trampoline_check;

/* find unused 16-byte at the end of the code segment */
mdi->trampoline = ALIGN(mdi->text_addr + mdi->text_size, PAGE_SIZE) - trampoline_size;
Expand All @@ -31,8 +32,13 @@ int mcount_setup_trampoline(struct mcount_dynamic_info *mdi)
pr_dbg2("adding a page for fentry trampoline at %#lx\n",
mdi->trampoline);

mmap((void *)mdi->trampoline, PAGE_SIZE, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
trampoline_check = mmap((void *)mdi->trampoline, PAGE_SIZE,
PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
-1, 0);

if (trampoline_check == MAP_FAILED)
pr_err("failed to mmap trampoline for setup");
}

if (mprotect((void *)mdi->text_addr, mdi->text_size, PROT_READ | PROT_WRITE)) {
Expand Down
10 changes: 8 additions & 2 deletions arch/x86_64/mcount-dynamic.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ int mcount_setup_trampoline(struct mcount_dynamic_info *mdi)
unsigned long xray_exit_addr = (unsigned long)__xray_exit;
struct arch_dynamic_info *adi = mdi->arch;
size_t trampoline_size = 16;
void *trampoline_check;

if (adi && adi->xrmap_count)
trampoline_size *= 2;
Expand All @@ -53,8 +54,13 @@ int mcount_setup_trampoline(struct mcount_dynamic_info *mdi)
pr_dbg2("adding a page for fentry trampoline at %#lx\n",
mdi->trampoline);

mmap((void *)mdi->trampoline, PAGE_SIZE, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
trampoline_check = mmap((void *)mdi->trampoline, PAGE_SIZE,
PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
-1, 0);

if (trampoline_check == MAP_FAILED)
pr_err("failed to mmap trampoline for setup");
}

if (mprotect((void *)mdi->text_addr, mdi->text_size, PROT_READ | PROT_WRITE)) {
Expand Down

0 comments on commit fa88fef

Please sign in to comment.