]> git.hungrycats.org Git - linux/commitdiff
um: Fix potential integer overflow during physmem setup
authorTiwei Bie <tiwei.btw@antgroup.com>
Mon, 16 Sep 2024 04:59:48 +0000 (12:59 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Dec 2024 09:32:54 +0000 (10:32 +0100)
[ Upstream commit a98b7761f697e590ed5d610d87fa12be66f23419 ]

This issue happens when the real map size is greater than LONG_MAX,
which can be easily triggered on UML/i386.

Fixes: fe205bdd1321 ("um: Print minimum physical memory requirement")
Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
Link: https://patch.msgid.link/20240916045950.508910-3-tiwei.btw@antgroup.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/um/kernel/physmem.c

index 91485119ae67a7f6282e1792b8b93974e63ce332..4339580f5a4f64be40af43aecef9b822fa3947b3 100644 (file)
@@ -80,10 +80,10 @@ void __init setup_physmem(unsigned long start, unsigned long reserve_end,
                          unsigned long len, unsigned long long highmem)
 {
        unsigned long reserve = reserve_end - start;
-       long map_size = len - reserve;
+       unsigned long map_size = len - reserve;
        int err;
 
-       if(map_size <= 0) {
+       if (len <= reserve) {
                os_warn("Too few physical memory! Needed=%lu, given=%lu\n",
                        reserve, len);
                exit(1);
@@ -94,7 +94,7 @@ void __init setup_physmem(unsigned long start, unsigned long reserve_end,
        err = os_map_memory((void *) reserve_end, physmem_fd, reserve,
                            map_size, 1, 1, 1);
        if (err < 0) {
-               os_warn("setup_physmem - mapping %ld bytes of memory at 0x%p "
+               os_warn("setup_physmem - mapping %lu bytes of memory at 0x%p "
                        "failed - errno = %d\n", map_size,
                        (void *) reserve_end, err);
                exit(1);