From: cov@codeaurora.org (Christopher Covington)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] arm64: Expose TASK_SIZE to userspace via auxv
Date: Tue, 16 Aug 2016 14:32:29 -0400 [thread overview]
Message-ID: <20160816183231.21179-1-cov@codeaurora.org> (raw)
Some userspace applications need to know the maximum virtual address they can
use (TASK_SIZE). There are several possible values for TASK_SIZE with the arm64
kernel, and such applications are either making bad hard-coded assumptions, or
are guessing and checking using system calls like munmap(), which may have
other reasons for returning an error than TASK_SIZE being exceeded. To make
correct functioning easy for userspace applications that need to know the
maximum virtual address they can use, communicate TASK_SIZE via the ELF
auxiliary vector, just like PAGE_SIZE is currently communicated.
Signed-off-by: Christopher Covington <cov@codeaurora.org>
---
Tested with the following commands:
LD_SHOW_AUXV=1 sleep 1 # GNU dynamic ld-linux*.so
hexdump -v -e '4/4 "%08x " "\n"' /proc/self/auxv | \
sed -r 's/0*([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)/\1 0x\4\3/
s/^0 / NULL: /
s/^3 / PHDR: /
s/^4 / PHENT: /
s/^5 / PHNUM: /
s/^6 / PAGESZ: /
s/^7 / BASE: /
s/^8 / FLAGS: /
s/^9 / ENTRY: /
s/^b / UID: /
s/^c / EUID: /
s/^d / GID: /
s/^e / EGID: /
s/^f /PLATFORM: /
s/^10 / HWCAP: /
s/^11 / CLKTCK: /
s/^17 / SECURE: /
s/^19 / RANDOM: /
s/^1f / EXECFN: /
s/^21 / VDSO: /
s/^22 / TASKSZ: /' # compatible with static busybox
---
arch/arm64/include/asm/elf.h | 1 +
arch/arm64/include/uapi/asm/auxvec.h | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index a55384f..3811795 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -145,6 +145,7 @@ typedef struct user_fpsimd_state elf_fpregset_t;
do { \
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
(elf_addr_t)current->mm->context.vdso); \
+ NEW_AUX_ENT(AT_TASKSZ, TASK_SIZE); \
} while (0)
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
diff --git a/arch/arm64/include/uapi/asm/auxvec.h b/arch/arm64/include/uapi/asm/auxvec.h
index 4cf0c17..595bfda 100644
--- a/arch/arm64/include/uapi/asm/auxvec.h
+++ b/arch/arm64/include/uapi/asm/auxvec.h
@@ -18,7 +18,8 @@
/* vDSO location */
#define AT_SYSINFO_EHDR 33
+#define AT_TASKSZ 34
-#define AT_VECTOR_SIZE_ARCH 1 /* entries in ARCH_DLINFO */
+#define AT_VECTOR_SIZE_ARCH 2 /* entries in ARCH_DLINFO */
#endif
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora
Forum, a Linux Foundation Collaborative Project.
WARNING: multiple messages have this Message-ID (diff)
From: Christopher Covington <cov@codeaurora.org>
To: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Mark Rutland <mark.rutland@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
James Hogan <james.hogan@imgtec.com>,
Christopher Covington <cov@codeaurora.org>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: Jon Masters <jcm@redhat.com>, Jeremy Linton <jeremy.linton@arm.com>
Subject: [PATCH] arm64: Expose TASK_SIZE to userspace via auxv
Date: Tue, 16 Aug 2016 14:32:29 -0400 [thread overview]
Message-ID: <20160816183231.21179-1-cov@codeaurora.org> (raw)
Some userspace applications need to know the maximum virtual address they can
use (TASK_SIZE). There are several possible values for TASK_SIZE with the arm64
kernel, and such applications are either making bad hard-coded assumptions, or
are guessing and checking using system calls like munmap(), which may have
other reasons for returning an error than TASK_SIZE being exceeded. To make
correct functioning easy for userspace applications that need to know the
maximum virtual address they can use, communicate TASK_SIZE via the ELF
auxiliary vector, just like PAGE_SIZE is currently communicated.
Signed-off-by: Christopher Covington <cov@codeaurora.org>
---
Tested with the following commands:
LD_SHOW_AUXV=1 sleep 1 # GNU dynamic ld-linux*.so
hexdump -v -e '4/4 "%08x " "\n"' /proc/self/auxv | \
sed -r 's/0*([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)/\1 0x\4\3/
s/^0 / NULL: /
s/^3 / PHDR: /
s/^4 / PHENT: /
s/^5 / PHNUM: /
s/^6 / PAGESZ: /
s/^7 / BASE: /
s/^8 / FLAGS: /
s/^9 / ENTRY: /
s/^b / UID: /
s/^c / EUID: /
s/^d / GID: /
s/^e / EGID: /
s/^f /PLATFORM: /
s/^10 / HWCAP: /
s/^11 / CLKTCK: /
s/^17 / SECURE: /
s/^19 / RANDOM: /
s/^1f / EXECFN: /
s/^21 / VDSO: /
s/^22 / TASKSZ: /' # compatible with static busybox
---
arch/arm64/include/asm/elf.h | 1 +
arch/arm64/include/uapi/asm/auxvec.h | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index a55384f..3811795 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -145,6 +145,7 @@ typedef struct user_fpsimd_state elf_fpregset_t;
do { \
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
(elf_addr_t)current->mm->context.vdso); \
+ NEW_AUX_ENT(AT_TASKSZ, TASK_SIZE); \
} while (0)
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
diff --git a/arch/arm64/include/uapi/asm/auxvec.h b/arch/arm64/include/uapi/asm/auxvec.h
index 4cf0c17..595bfda 100644
--- a/arch/arm64/include/uapi/asm/auxvec.h
+++ b/arch/arm64/include/uapi/asm/auxvec.h
@@ -18,7 +18,8 @@
/* vDSO location */
#define AT_SYSINFO_EHDR 33
+#define AT_TASKSZ 34
-#define AT_VECTOR_SIZE_ARCH 1 /* entries in ARCH_DLINFO */
+#define AT_VECTOR_SIZE_ARCH 2 /* entries in ARCH_DLINFO */
#endif
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora
Forum, a Linux Foundation Collaborative Project.
next reply other threads:[~2016-08-16 18:32 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-16 18:32 Christopher Covington [this message]
2016-08-16 18:32 ` [PATCH] arm64: Expose TASK_SIZE to userspace via auxv Christopher Covington
2016-08-17 10:30 ` Catalin Marinas
2016-08-17 10:30 ` Catalin Marinas
2016-08-17 11:12 ` Christopher Covington
2016-08-17 11:12 ` Christopher Covington
2016-08-18 12:00 ` Ard Biesheuvel
2016-08-18 12:00 ` Ard Biesheuvel
2016-08-18 12:42 ` Catalin Marinas
2016-08-18 12:42 ` Catalin Marinas
2016-08-18 13:18 ` Ard Biesheuvel
2016-08-18 13:18 ` Ard Biesheuvel
2016-08-18 12:17 ` Richard Weinberger
2016-08-18 12:17 ` Richard Weinberger
2016-09-09 14:14 ` Christopher Covington
2016-09-09 14:14 ` Christopher Covington
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=20160816183231.21179-1-cov@codeaurora.org \
--to=cov@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.