m68knommu: fixes for 5.9-rc3
Fixes include: . revert binfmt_flat data offset removal -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEmsfM6tQwfNjBOxr3TiQVqaG9L4AFAl9FEmEACgkQTiQVqaG9 L4CzmBAAqqvgz04SYakQ1CLaeG2syWW3JM9XmPdYgoca+YJwm1SRaSpAxXJRQxfG /4iQucbjFW7lD+KiemepHkYQapesNW8UaHdwN2YEemRMfjCj69WJ9wVh2jCyaBN8 t7Qg1CuK5L9TfjqXYvAFW5dyeO2/hNQuFGYpy6sSrE2MW1m1vC7pG8Ku+yhhRKn6 W6xt3+R9PVHtYszBf8aMMcc+G394C4K7B8cbZbyllayFMX59ZKyArZJx6A43FT1I Lb/yaEh4uujnL1XnlT2LOy2RA7heJpfCFH8fwz2oA5tMhzqHIpEZ82iCaaMyRvXe fbx2IDXD/NqwxgrbU1PuUP9lyUuWTiqczwwv5FQDFoEBH9My04QR6Do/fUojWoIz ah8SzS2H96o20CJZXQaUpwdLXyj9E5OCME0J2EBIu6RkM2kbaDoRHwKIKEyFx0qx vE/vC/KY2b81xwQgmKQa28HhCmQRlQvLBZTm8pO41ut3y6zgGzFs9/MsAmcQrrAk 0dsIlOR6ApKDPM2QCF8WXB9cSY2D7ZdEPd1Sujam65n0rXfESPBpQmr5Izx0j6KZ 9p1FVphJT1UYa1SZiCZq8BYz4vIqgKvJgMTFW2p0WtNC9T7Dc9/uBmWxnrLdbcqe Y2+IyialY2YAvnIEkQV7dBrSaAkslxwe9a723dbhx4vkq2HBU0Y= =ENzl -----END PGP SIGNATURE----- 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"
This commit is contained in:
Коммит
abb3438d69
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче