Skip to content

Commit

Permalink
Merge tag 'm68knommu-for-v5.9-rc3' of git://git.kernel.org/pub/scm/li…
Browse files Browse the repository at this point in the history
…nux/kernel/git/gerg/m68knommu

Pull m68knommu fix from Greg Ungerer:
 "Only a single fix for the binfmt_flat loader (reverting a recent
  change)"

* tag 'm68knommu-for-v5.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu:
  binfmt_flat: revert "binfmt_flat: don't offset the data start"
  • Loading branch information
Linus Torvalds committed Aug 25, 2020
2 parents d7d1f23 + 2217b98 commit abb3438
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions fs/binfmt_flat.c
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@ static int load_flat_file(struct linux_binprm *bprm,
goto err;
}

len = data_len + extra;
len = data_len + extra + MAX_SHARED_LIBS * sizeof(unsigned long);
len = PAGE_ALIGN(len);
realdatastart = vm_mmap(NULL, 0, len,
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 0);
Expand All @@ -590,7 +590,9 @@ static int load_flat_file(struct linux_binprm *bprm,
vm_munmap(textpos, text_len);
goto err;
}
datapos = ALIGN(realdatastart, FLAT_DATA_ALIGN);
datapos = ALIGN(realdatastart +
MAX_SHARED_LIBS * sizeof(unsigned long),
FLAT_DATA_ALIGN);

pr_debug("Allocated data+bss+stack (%u bytes): %lx\n",
data_len + bss_len + stack_len, datapos);
Expand Down Expand Up @@ -620,7 +622,7 @@ static int load_flat_file(struct linux_binprm *bprm,
memp_size = len;
} else {

len = text_len + data_len + extra;
len = text_len + data_len + extra + MAX_SHARED_LIBS * sizeof(u32);
len = PAGE_ALIGN(len);
textpos = vm_mmap(NULL, 0, len,
PROT_READ | PROT_EXEC | PROT_WRITE, MAP_PRIVATE, 0);
Expand All @@ -635,7 +637,9 @@ static int load_flat_file(struct linux_binprm *bprm,
}

realdatastart = textpos + ntohl(hdr->data_start);
datapos = ALIGN(realdatastart, FLAT_DATA_ALIGN);
datapos = ALIGN(realdatastart +
MAX_SHARED_LIBS * sizeof(u32),
FLAT_DATA_ALIGN);

reloc = (__be32 __user *)
(datapos + (ntohl(hdr->reloc_start) - text_len));
Expand All @@ -652,9 +656,8 @@ static int load_flat_file(struct linux_binprm *bprm,
(text_len + full_data
- sizeof(struct flat_hdr)),
0);
if (datapos != realdatastart)
memmove((void *)datapos, (void *)realdatastart,
full_data);
memmove((void *) datapos, (void *) realdatastart,
full_data);
#else
/*
* This is used on MMU systems mainly for testing.
Expand Down Expand Up @@ -710,7 +713,8 @@ static int load_flat_file(struct linux_binprm *bprm,
if (IS_ERR_VALUE(result)) {
ret = result;
pr_err("Unable to read code+data+bss, errno %d\n", ret);
vm_munmap(textpos, text_len + data_len + extra);
vm_munmap(textpos, text_len + data_len + extra +
MAX_SHARED_LIBS * sizeof(u32));
goto err;
}
}
Expand Down

0 comments on commit abb3438

Please sign in to comment.