lkml.org 
[lkml]   [2022]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 01/23] rseq: Introduce feature size and alignment ELF auxiliary vector entries
    Date
    Export the rseq feature size supported by the kernel as well as the
    required allocation alignment for the rseq per-thread area to user-space
    through ELF auxiliary vector entries.

    This is part of the extensible rseq ABI.

    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    ---
    fs/binfmt_elf.c | 5 +++++
    include/uapi/linux/auxvec.h | 2 ++
    include/uapi/linux/rseq.h | 5 +++++
    3 files changed, 12 insertions(+)

    diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
    index 63c7ebb0da89..04fca1e4cbd2 100644
    --- a/fs/binfmt_elf.c
    +++ b/fs/binfmt_elf.c
    @@ -46,6 +46,7 @@
    #include <linux/cred.h>
    #include <linux/dax.h>
    #include <linux/uaccess.h>
    +#include <linux/rseq.h>
    #include <asm/param.h>
    #include <asm/page.h>

    @@ -288,6 +289,10 @@ create_elf_tables(struct linux_binprm *bprm, const struct elfhdr *exec,
    if (bprm->have_execfd) {
    NEW_AUX_ENT(AT_EXECFD, bprm->execfd);
    }
    +#ifdef CONFIG_RSEQ
    + NEW_AUX_ENT(AT_RSEQ_FEATURE_SIZE, offsetof(struct rseq, end));
    + NEW_AUX_ENT(AT_RSEQ_ALIGN, __alignof__(struct rseq));
    +#endif
    #undef NEW_AUX_ENT
    /* AT_NULL is zero; clear the rest too */
    memset(elf_info, 0, (char *)mm->saved_auxv +
    diff --git a/include/uapi/linux/auxvec.h b/include/uapi/linux/auxvec.h
    index c7e502bf5a6f..6991c4b8ab18 100644
    --- a/include/uapi/linux/auxvec.h
    +++ b/include/uapi/linux/auxvec.h
    @@ -30,6 +30,8 @@
    * differ from AT_PLATFORM. */
    #define AT_RANDOM 25 /* address of 16 random bytes */
    #define AT_HWCAP2 26 /* extension of AT_HWCAP */
    +#define AT_RSEQ_FEATURE_SIZE 27 /* rseq supported feature size */
    +#define AT_RSEQ_ALIGN 28 /* rseq allocation alignment */

    #define AT_EXECFN 31 /* filename of program */

    diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h
    index 77ee207623a9..05d3c4cdeb40 100644
    --- a/include/uapi/linux/rseq.h
    +++ b/include/uapi/linux/rseq.h
    @@ -130,6 +130,11 @@ struct rseq {
    * this thread.
    */
    __u32 flags;
    +
    + /*
    + * Flexible array member at end of structure, after last feature field.
    + */
    + char end[];
    } __attribute__((aligned(4 * sizeof(__u64))));

    #endif /* _UAPI_LINUX_RSEQ_H */
    --
    2.17.1
    \
     
     \ /
      Last update: 2022-07-29 21:05    [W:5.798 / U:0.572 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site