Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'm68knommu-for-v5.9-rc3' of git://git.kernel.org/pub/scm/linux/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"

+12 -8
+12 -8
fs/binfmt_flat.c
··· 576 576 goto err; 577 577 } 578 578 579 - len = data_len + extra; 579 + len = data_len + extra + MAX_SHARED_LIBS * sizeof(unsigned long); 580 580 len = PAGE_ALIGN(len); 581 581 realdatastart = vm_mmap(NULL, 0, len, 582 582 PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 0); ··· 590 590 vm_munmap(textpos, text_len); 591 591 goto err; 592 592 } 593 - datapos = ALIGN(realdatastart, FLAT_DATA_ALIGN); 593 + datapos = ALIGN(realdatastart + 594 + MAX_SHARED_LIBS * sizeof(unsigned long), 595 + FLAT_DATA_ALIGN); 594 596 595 597 pr_debug("Allocated data+bss+stack (%u bytes): %lx\n", 596 598 data_len + bss_len + stack_len, datapos); ··· 622 620 memp_size = len; 623 621 } else { 624 622 625 - len = text_len + data_len + extra; 623 + len = text_len + data_len + extra + MAX_SHARED_LIBS * sizeof(u32); 626 624 len = PAGE_ALIGN(len); 627 625 textpos = vm_mmap(NULL, 0, len, 628 626 PROT_READ | PROT_EXEC | PROT_WRITE, MAP_PRIVATE, 0); ··· 637 635 } 638 636 639 637 realdatastart = textpos + ntohl(hdr->data_start); 640 - datapos = ALIGN(realdatastart, FLAT_DATA_ALIGN); 638 + datapos = ALIGN(realdatastart + 639 + MAX_SHARED_LIBS * sizeof(u32), 640 + FLAT_DATA_ALIGN); 641 641 642 642 reloc = (__be32 __user *) 643 643 (datapos + (ntohl(hdr->reloc_start) - text_len)); ··· 656 652 (text_len + full_data 657 653 - sizeof(struct flat_hdr)), 658 654 0); 659 - if (datapos != realdatastart) 660 - memmove((void *)datapos, (void *)realdatastart, 661 - full_data); 655 + memmove((void *) datapos, (void *) realdatastart, 656 + full_data); 662 657 #else 663 658 /* 664 659 * This is used on MMU systems mainly for testing. ··· 713 710 if (IS_ERR_VALUE(result)) { 714 711 ret = result; 715 712 pr_err("Unable to read code+data+bss, errno %d\n", ret); 716 - vm_munmap(textpos, text_len + data_len + extra); 713 + vm_munmap(textpos, text_len + data_len + extra + 714 + MAX_SHARED_LIBS * sizeof(u32)); 717 715 goto err; 718 716 } 719 717 }