linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Anshuman Khandual <khandual@linux.vnet.ibm.com>
To: viro@zeniv.linux.org.uk
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	palves@redhat.com,
	Anshuman Khandual <khandual@linux.vnet.ibm.com>
Subject: [PATCH] elf, coredump: Extract only the active register set during core dump
Date: Fri, 23 May 2014 10:46:53 +0530	[thread overview]
Message-ID: <1400822213-18004-1-git-send-email-khandual@linux.vnet.ibm.com> (raw)

Regset active hooks provide a way to query how many registers in the
register set are active at any point of time. Currently this information
is being ignored while creating core dump sections corresponding to any
core note register set. This way the core dump will contain data which are
not part of the active context of the process and may not be useful. This
patch will make sure that only the active part of the register set are
captured during the core dump process which will reduce the core dump
size.

Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
---
NOTE:
Pedro Alves has mentioned that producing smaller note sections in the core
dump may break some existing consumers. I request suggestions, reviews and
test reports on different architectures to prove that this patch does not
break any existing consumer. Thank you.

Please find the previous discussion here

https://lkml.org/lkml/2014/5/20/185

Regards
Anshuman

 fs/binfmt_elf.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index aa3cb62..00aba07 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1551,10 +1551,18 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
 		const struct user_regset *regset = &view->regsets[i];
 		do_thread_regset_writeback(t->task, regset);
 		if (regset->core_note_type && regset->get &&
-		    (!regset->active || regset->active(t->task, regset))) {
+		    (!regset->active || regset->active(t->task, regset) > 0)) {
 			int ret;
-			size_t size = regset->n * regset->size;
-			void *data = kmalloc(size, GFP_KERNEL);
+			size_t size;
+			void *data;
+
+			if (!regset->active)
+				size = regset->n * regset->size;
+			else
+				size = regset->active(t->task, regset)
+								* regset->size;
+
+			data = kmalloc(size, GFP_KERNEL);
 			if (unlikely(!data))
 				return 0;
 			ret = regset->get(t->task, regset,
-- 
1.7.11.7

             reply	other threads:[~2014-05-23  5:16 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-23  5:16 Anshuman Khandual [this message]
2014-05-27 17:44 ` [PATCH] elf, coredump: Extract only the active register set during core dump Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1400822213-18004-1-git-send-email-khandual@linux.vnet.ibm.com \
    --to=khandual@linux.vnet.ibm.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=palves@redhat.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).