lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 26 Jul 2007 03:06:05 -0700
From:	Andrew Morton <akpm@...ux-foundation.org>
To:	Roland McGrath <roland@...hat.com>
Cc:	Linus Torvalds <torvalds@...ux-foundation.org>,
	linux-kernel@...r.kernel.org,
	"Kawai, Hidehiro" <hidehiro.kawai.ez@...achi.com>,
	Hugh Dickins <hugh@...itas.com>
Subject: Re: [PATCH] ELF core dump options

On Thu, 26 Jul 2007 02:37:43 -0700 (PDT) Roland McGrath <roland@...hat.com> wrote:

> 
> This adds two sysctl items under fs.binfmt_elf for controlling how memory
> segments are dumped in ELF core files.  The core_dump_whole_segments option
> can be set to have private file mappings dumped in their entirety.  Some
> people prefer the certainty to the saving disk space and i/o at dump time,
> and a global default is easier to set than every individual mm's MMF_DUMP_*.

It's a bit disappointing to route around the newly-added
/proc/pid/coredump_filter.  It's inherited across fork so where's the
problem?  Just set init's mask appropriately at boot if that's what you
want.

Plus making it system-wide is fairly sucky compared to making it settable
per-process-tree.

And you had to add considerably more code this way.

> The more interesting new feature is the core_dump_elf_headers option.
> This dumps the first page (only) of a read-only private file mapping if it
> appears to be a mapping of an ELF file.  Including these pages in the core
> dump may give sufficient identifying information to associate the original
> DSO and executable file images and their debugging information with a core
> file in a generic way just from its contents (e.g. when those binaries were
> built with ld --build-id).  I expect this to become the default behavior
> eventually.  Existing versions of gdb can be confused by the core dumps it
> creates, so it won't enabled by default for some time to come.  Soon many
> people will have systems with a gdb that handle these dumps, so they can
> use the sysctl option.
> 
> On biarch machines, there are two sets of options.
> The native dumper uses fs.binfmt_elf.core_dump_*.
> The compat dumper uses fs.binfmt_elf.32bit.core_dump_*.

Documentation/filesystems/proc.txt...

> -static int maydump(struct vm_area_struct *vma, unsigned long mm_flags)
> +static unsigned long vma_dump_size(struct vm_area_struct *vma,
> +				   unsigned long mm_flags)
>  {
>  	/* The vma can be set up to tell us the answer directly.  */
>  	if (vma->vm_flags & VM_ALWAYSDUMP)
> -		return 1;
> +		goto whole;
>  
>  	/* Do not dump I/O mapped devices or special mappings */
>  	if (vma->vm_flags & (VM_IO | VM_RESERVED))
> @@ -1211,17 +1213,51 @@ static int maydump(struct vm_area_struct *vma, unsigned long mm_flags)
>  
>  	/* By default, dump shared memory if mapped from an anonymous file. */
>  	if (vma->vm_flags & VM_SHARED) {
> -		if (vma->vm_file->f_path.dentry->d_inode->i_nlink == 0)
> -			return test_bit(MMF_DUMP_ANON_SHARED, &mm_flags);
> -		else
> -			return test_bit(MMF_DUMP_MAPPED_SHARED, &mm_flags);
> +		if (vma->vm_file->f_path.dentry->d_inode->i_nlink == 0 ?

hm, I'm now wondering whether testing i_nlink was the best (or official)
way of determining whether a MAP_SHARED vma is anonymous or file-backed.
Hugh will know.

> +		    test_bit(MMF_DUMP_ANON_SHARED, &mm_flags) :
> +		    test_bit(MMF_DUMP_MAPPED_SHARED, &mm_flags))

It was peculiar of us to use bitops against a local variable - normally
we'd use open-coded &'s here.  Maybe it's OK - test_bit() is pretty cheap
(on x86, at least), but one wonders whether gcc could do better if it knew
what was going on.

> ...
>  
> +
> +static ctl_table elf_core_dump_sysctls[] = {
> +	{
> +		.ctl_name = CTL_UNNUMBERED,
> +		.procname = "core_dump_whole_segments",
> +		.data = &dump_whole_segments,
> +		.maxlen = sizeof(int),
> +		.mode = 0644,
> +		.proc_handler = &proc_dointvec,
> +	},
> +	{
> +		.ctl_name = CTL_UNNUMBERED,
> +		.procname = "core_dump_elf_headers",
> +		.data = &dump_elf_headers,
> +		.maxlen = sizeof(int),
> +		.mode = 0644,
> +		.proc_handler = &proc_dointvec,
> +	},
> +	{ .ctl_name = 0 }
> +};
> +
> +#if BITS_PER_LONG > 32 && ELF_CLASS == ELFCLASS32
> +static ctl_table binfmt_elf_sysctl_32bit_dir[] = {
> +	{
> +		.ctl_name = CTL_UNNUMBERED,
> +		.procname = "32bit",
> +		.mode = 0555,
> +		.child = elf_core_dump_sysctls,
> +	},
> +	{ .ctl_name = 0 }
> +};
> +#define elf_core_dump_sysctls binfmt_elf_sysctl_32bit_dir
> +#endif

The above makes elf_core_dump_sysctls[] inaccessible from here on.  It will
warn, surely?


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ