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....@antgroup.com>
---
 arch/um/kernel/physmem.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c
index fb2adfb49945..ee693e0b2b58 100644
--- a/arch/um/kernel/physmem.c
+++ b/arch/um/kernel/physmem.c
@@ -81,10 +81,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);
@@ -95,7 +95,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);
-- 
2.34.1


Reply via email to