Hi,

On Tue, 1 Mar 2011, Aaro Koskinen wrote:
The current check looks wrong and prints "[heap]" only if the mapping
matches exactly the heap. However, the heap may be merged with some
other mappings, and there may be also be multiple mappings.

Signed-off-by: Aaro Koskinen <[email protected]>
Cc: [email protected]

Below is a test program and an example output showing the problem,
and the correct output with the patch:

Without the patch:

        # ./a.out &
        # cat /proc/$!/maps | head -4
        00008000-00009000 r-xp 00000000 01:00 9224       /a.out
        00010000-00011000 rw-p 00000000 01:00 9224       /a.out
        00011000-00012000 rw-p 00000000 00:00 0
        00012000-00013000 rw-p 00000000 00:00 0

With the patch:

        # ./a.out &
        # cat /proc/$!/maps | head -4
        00008000-00009000 r-xp 00000000 01:00 9228       /a.out
        00010000-00011000 rw-p 00000000 01:00 9228       /a.out
        00011000-00012000 rw-p 00000000 00:00 0          [heap]
        00012000-00013000 rw-p 00000000 00:00 0          [heap]

The test program:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>

int main (void)
{
        if (sbrk(4096) == (void *)-1) {
                perror("first sbrk(): ");
                return EXIT_FAILURE;
        }

        if (mlockall(MCL_FUTURE)) {
                perror("mlockall(): ");
                return EXIT_FAILURE;
        }

        if (sbrk(4096) == (void *)-1) {
                perror("second sbrk(): ");
                return EXIT_FAILURE;
        }

        while (1)
                sleep(1);
}

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to