From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Salter Subject: [PATCH 2/2] Fix /proc//auxv for FDPIC binaries Date: Tue, 26 Feb 2013 10:09:07 -0500 Message-ID: <1361891347-20806-2-git-send-email-msalter@redhat.com> References: <1361891347-20806-1-git-send-email-msalter@redhat.com> Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Mark Salter To: Alexander Viro Return-path: In-Reply-To: <1361891347-20806-1-git-send-email-msalter@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org The FDPIC loader is not storing aux vector info in mm->saved_aux so the aux vectors were not being exposed through /proc//auxv. This patch copies the aux vectors stored on the user stack into mm->saved_aux so that they may be available through procfs. Signed-off-by: Mark Salter --- fs/binfmt_elf_fdpic.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c index af4c9a4..9651918 100644 --- a/fs/binfmt_elf_fdpic.c +++ b/fs/binfmt_elf_fdpic.c @@ -478,7 +478,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm, struct elf_fdpic_params *interp_params) { const struct cred *cred = current_cred(); - unsigned long sp, csp, nitems; + unsigned long sp, csp, nitems, auxv_end; elf_caddr_t __user *argv, *envp; size_t platform_len = 0, len; char *k_platform, *k_base_platform; @@ -594,6 +594,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm, } while (0) nr = 0; + auxv_end = csp; csp -= 2 * sizeof(unsigned long); NEW_AUX_ENT(AT_NULL, 0); if (k_platform) { @@ -645,6 +646,10 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm, #endif #undef NEW_AUX_ENT + if (copy_from_user(current->mm->saved_auxv, + (const char __user *) csp, auxv_end - csp)) + return -EFAULT; + /* allocate room for argv[] and envv[] */ csp -= (bprm->envc + 1) * sizeof(elf_caddr_t); envp = (elf_caddr_t __user *) csp; -- 1.8.1.2