svn commit: r326143 - head/stand/common
Warner Losh
imp at FreeBSD.org
Fri Nov 24 05:00:26 UTC 2017
Author: imp
Date: Fri Nov 24 05:00:25 2017
New Revision: 326143
URL: https://svnweb.freebsd.org/changeset/base/326143
Log:
Fix theoretical integer overflow issues. If the product here is
greater than 2^31-1, then the result will be huge. This is unlikely,
as we don't support that many sections, but out of an abundace of
caution cast to size_t so the multiplication won't overflow
mysteriously when size_t is larger than 32-bits. The resulting code
may be a smidge larger, but this isn't super-space critical code.
CID: 1194216, 1194217, 1194222, 1194223, 1265018, 1265019,1265020,
1265021
Sponsored by: Netflix
Modified:
head/stand/common/load_elf.c
Modified: head/stand/common/load_elf.c
==============================================================================
--- head/stand/common/load_elf.c Fri Nov 24 04:42:21 2017 (r326142)
+++ head/stand/common/load_elf.c Fri Nov 24 05:00:25 2017 (r326143)
@@ -456,7 +456,7 @@ __elfN(loadimage)(struct preloaded_file *fp, elf_file_
* think the rule is going to have to be that you must strip a
* file to remove symbols before gzipping it.
*/
- chunk = ehdr->e_shnum * ehdr->e_shentsize;
+ chunk = (size_t)ehdr->e_shnum * (size_t)ehdr->e_shentsize;
if (chunk == 0 || ehdr->e_shoff == 0)
goto nosyms;
shdr = alloc_pread(ef->fd, ehdr->e_shoff, chunk);
@@ -747,7 +747,7 @@ __elfN(load_modmetadata)(struct preloaded_file *fp, u_
goto out;
}
- size = ef.ehdr->e_shnum * ef.ehdr->e_shentsize;
+ size = (size_t)ef.ehdr->e_shnum * (size_t)ef.ehdr->e_shentsize;
shdr = alloc_pread(ef.fd, ef.ehdr->e_shoff, size);
if (shdr == NULL) {
err = ENOMEM;
More information about the svn-src-head
mailing list