2005-03-01 17:06:22

by Jochen Suckfuell

[permalink] [raw]
Subject: Unbacked shared memory not included in ELF core dump

Hi!

Since 2.6.10, unbacked shared memory allocated via shmget is not
included in core dumps. The relevant patch has been done to binfmt_elf.c
after the discussion to "include all vmas with unbacked pages in ELF
core dumps", here:
http://www.ussg.iu.edu/hypermail/linux/kernel/0410.2/1890.html

The result was:

static int maydump(struct vm_area_struct *vma)
{
/* Do not dump I/O mapped devices, shared memory, or special mappings */
if (vma->vm_flags & (VM_IO | VM_SHARED | VM_RESERVED))
return 0;
...

I consider this a bug, since we clearly lose unbacked shared memory in
the process.

bye
Jochen Suckf?ll


2005-03-08 13:43:47

by Jochen Suckfuell

[permalink] [raw]
Subject: 2.6.11 bug: unbacked private shared memory segments missing in core dump

Hello!

Since 2.6.10, unbacked private shared memory allocated via shmget is not
included in core dumps.

This is a simple example code demonstrating the bug:

#include <sys/shm.h>

int main(int argc, char ** argv)
{
int size = 1000;
int id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 0660));
if(id < 0) return(1);
int *buffer = (int *)shmat(id, 0, 0);
int i;
for(i = 0; i < 1000; i++)
buffer[i] = i;

// now dump core
*((unsigned long *)1) = 0;

// The private shared memory is not included in the core dump,
// although it's not backed and cannot be accessed any more in any
// way.
return 0;
}

This bug was introduced in 2.6.10 by a patch to binfmt_elf.c that
resulted in:

static int maydump(struct vm_area_struct *vma)
{
/* Do not dump I/O mapped devices, shared memory, or special mappings */
if (vma->vm_flags & (VM_IO | VM_SHARED | VM_RESERVED))
return 0;
...

(See the thread at
http://www.ussg.iu.edu/hypermail/linux/kernel/0410.2/1890.html)

Excluding all pages with VM_SHARED set is also excluding the unbacked
private mapping and should be replaced by a more specific criterion.

Bye
Jochen

2005-03-21 23:38:29

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.6.11 bug: unbacked private shared memory segments missing in core dump

Jochen Suckfuell <[email protected]> wrote:
>
> Hello!
>
> Since 2.6.10, unbacked private shared memory allocated via shmget is not
> included in core dumps.

Can you please confirm that 2.6.12-rc1 fixed this?

Thanks.

> This is a simple example code demonstrating the bug:
>
> #include <sys/shm.h>
>
> int main(int argc, char ** argv)
> {
> int size = 1000;
> int id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 0660));
> if(id < 0) return(1);
> int *buffer = (int *)shmat(id, 0, 0);
> int i;
> for(i = 0; i < 1000; i++)
> buffer[i] = i;
>
> // now dump core
> *((unsigned long *)1) = 0;
>
> // The private shared memory is not included in the core dump,
> // although it's not backed and cannot be accessed any more in any
> // way.
> return 0;
> }
>
> This bug was introduced in 2.6.10 by a patch to binfmt_elf.c that
> resulted in:
>
> static int maydump(struct vm_area_struct *vma)
> {
> /* Do not dump I/O mapped devices, shared memory, or special mappings */
> if (vma->vm_flags & (VM_IO | VM_SHARED | VM_RESERVED))
> return 0;
> ...
>
> (See the thread at
> http://www.ussg.iu.edu/hypermail/linux/kernel/0410.2/1890.html)
>
> Excluding all pages with VM_SHARED set is also excluding the unbacked
> private mapping and should be replaced by a more specific criterion.
>
> Bye
> Jochen
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

2005-03-23 09:38:46

by Jochen Suckfuell

[permalink] [raw]
Subject: Re: 2.6.11 bug: unbacked private shared memory segments missing in core dump


On Mon, Mar 21, 2005 at 03:29:48PM -0800, Andrew Morton wrote:
> Jochen Suckfuell <[email protected]> wrote:
> >
> > Hello!
> >
> > Since 2.6.10, unbacked private shared memory allocated via shmget is not
> > included in core dumps.
>
> Can you please confirm that 2.6.12-rc1 fixed this?

Yes, it's fixed.

Thanks to everyone involved.


Bye
Jochen Suckfuell