Skip to content

Commit 55cf2f4

Browse files
Dan Carpenterkees
authored andcommitted
binfmt_flat: Fix integer overflow bug on 32 bit systems
Most of these sizes and counts are capped at 256MB so the math doesn't result in an integer overflow. The "relocs" count needs to be checked as well. Otherwise on 32bit systems the calculation of "full_data" could be wrong. full_data = data_len + relocs * sizeof(unsigned long); Fixes: c995ee2 ("binfmt_flat: prevent kernel dammage from corrupted executable headers") Cc: stable@vger.kernel.org Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> Acked-by: Nicolas Pitre <npitre@baylibre.com> Link: https://lore.kernel.org/r/5be17f6c-5338-43be-91ef-650153b975cb@stanley.mountain Signed-off-by: Kees Cook <kees@kernel.org>
1 parent 184a935 commit 55cf2f4

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

fs/binfmt_flat.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ static int load_flat_file(struct linux_binprm *bprm,
478478
* 28 bits (256 MB) is way more than reasonable in this case.
479479
* If some top bits are set we have probable binary corruption.
480480
*/
481-
if ((text_len | data_len | bss_len | stack_len | full_data) >> 28) {
481+
if ((text_len | data_len | bss_len | stack_len | relocs | full_data) >> 28) {
482482
pr_err("bad header\n");
483483
ret = -ENOEXEC;
484484
goto err;

0 commit comments

Comments
 (0)