Package: procps Version: 2:3.3.9-9 Severity: normal File: /usr/bin/pmap Tags: patch
Dear Maintainer,
# pmap -x `pidof X` Address Kbytes RSS Dirty Mode Mapping
[...]
338f6000 4293918720 0 0 ----- [ anon ]
[...]
# grep -A1 ^338f6000 /proc/`pidof X`/smaps
338f6000-f38f6000 ---p 00000000 00:00 0
Size: 3145728 kB
So, this map size is 3GiB, but it reported as 4TiB.
This error is is due to arithmetic right shift on signed integer type
for pmap.c:one_proc() variable:
...
KLONG diff = 0;
...
diff = end - start;
...
[...], (unsigned long)(diff >> 10),
smaps file and trivial patch attached.
Fixed output (correct):
[...]
338f6000 3145728 0 0 ----- [ anon ]
[...]
-- System Information:
Debian Release: 8.1
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: i386 (x86_64)
Kernel: Linux 3.16.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R (charmap=KOI8-R)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages procps depends on:
ii initscripts 2.88dsf-59
ii libc6 2.19-18
ii libncurses5 5.9+20140913-1+b1
ii libncursesw5 5.9+20140913-1+b1
ii libprocps3 2:3.3.9-9
ii libtinfo5 5.9+20140913-1+b1
ii lsb-base 4.1+Debian13+nmu1
Versions of packages procps recommends:
ii psmisc 22.21-2
procps suggests no packages.
-- no debconf information
Xorg-smaps.txt.gz
Description: application/gzip
From: Yuriy M. Kaminskiy <[email protected]> Subject: [pmap] fix integer overflow on 2GiB+ maps on 32-bit platforms Index: procps-3.3.9/pmap.c =================================================================== --- procps-3.3.9.orig/pmap.c +++ procps-3.3.9/pmap.c @@ -517,7 +517,7 @@ static int one_proc(proc_t * p) unsigned long total_shared = 0ul; unsigned long total_private_readonly = 0ul; unsigned long total_private_writeable = 0ul; - KLONG diff = 0; + unsigned KLONG diff = 0; const char *cp2 = NULL; unsigned long long rss = 0ull; unsigned long long private_dirty = 0ull;

