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]
Message-ID: <62d25870-2caa-18ab-e58c-cee0bc383e16@loongson.cn>
Date:   Tue, 20 Jun 2023 16:29:12 +0800
From:   Youling Tang <tangyouling@...ngson.cn>
To:     Xi Ruoyao <xry111@...111.site>
Cc:     Josh Poimboeuf <jpoimboe@...nel.org>,
        Peter Zijlstra <peterz@...radead.org>,
        Huacai Chen <chenhuacai@...nel.org>,
        madvenka@...ux.microsoft.com, chenzhongjin@...wei.com,
        WANG Xuerui <kernel@...0n.name>, live-patching@...r.kernel.org,
        linux-kernel@...r.kernel.org, loongarch@...ts.linux.dev,
        tangyouling00@...il.com, youling.tang@...look.com
Subject: Re: [RFC PATCH v1 00/23] LoongArch: Add objtool and ORC unwinder
 support

Hi, Ruoyao

On 06/20/2023 04:15 PM, Xi Ruoyao wrote:
> It looks like only 19 patches are successfully delivered, out of 23.
I'm sorry, somehow the patchset didn't reach the mailing list. Probably
due to the sending limit being reached.

>
> And AFAIK objtool needs libelf from elfutils, and the LoongArch support
> in elfutils is not complete (there are about ten failures in the test
> suite as at the latest 0.189 release).  Do we need to add more LoongArch
> support into libelf and/or declare a minimal needed libelf version for
> LoongArch objtool?
After the following series of patches [1], the elfutils test results
are passed.

[1]: https://sourceware.org/pipermail/elfutils-devel/2023q2/006107.html

Thanks,
Youling
>
> On Tue, 2023-06-20 at 15:46 +0800, Youling Tang wrote:
>> This series of patches adds objtool and ORC unwinder support for
>> LoongArch.
>>
>> Patch 01 - 07 are from "Madhavan T. Venkataraman" [1] with minor
>> code tweaks. The "objtool: Reorganize ORC types" patch was not
>> added, because LoongArch cannot share `strcut orc_entry`, it also
>> needs to include ra_offset and ra_reg.
>>
>> Since the changes in Patch 01 - 08 in [1] are architecture-
>> independent,
>> it might be better if they could be separated separately from the
>> series
>> of patches.
>>
>> ORC unwinder can get a reliable stack trace, which provides a
>> prerequisite
>> for the subsequent addition of livepatch support.
>>
>>
>> Instruction decoder
>> ===================
>>
>> To do this, an instruction decoder needs to be implemented. I have
>> implemented
>> a simple, table-driven decoder for LoongArch. Only a subset of the
>> instructions
>> needs to be fully decoded for this purpose:
>>
>>         - Load-Store instructions
>>         - Add instructions
>>         - Branch instructions
>>         - Call instructions
>>         - Return instructions
>>         - Stack pointer authentication instruction
>>
>>
>> Unwind hints
>> ============
>>
>> Unwind hints are collected in a special section. Objtool converts
>> unwind hints
>> to ORC data. The unwinder processes unwind hints to handle special
>> cases
>> mentioned above.
>>
>>
>> ORC unwinder
>> ============
>>
>> Before vmlinux created, we check all metadata, find the stack
>> operation,
>> note stack state and create orc data. Objtool insert two sections into
>> vmlinux. '.orc_unwind_ip' and '.orc_unwind'. (For modules, insert
>> '.rela.orc_unwind_ip' to relocate '.orc_unwind_ip'.) Each insn has
>> only
>> one stack state in .orc_unwind and orc_unwind_ip hint its pc address.
>> Through unwinding orc data, we can get stack info both kernel and
>> module.
>>
>>
>> This is a series of RFC patches, which may require long-term
>> discussions
>> and revisions. It is not based on the latest code but based on 6.3-
>> rc3.
>> Any ideas or suggestions are welcome.
>>
>> base-commit: e8d018dd0257f744ca50a729e3d042cf2ec9da65 (Linux 6.3-rc3)
>>
>> Link:
>> [1]:
>> https://lore.kernel.org/lkml/20230202074036.507249-1-madvenka@linux.microsoft.com/#r
>>
>> Madhavan T. Venkataraman (7):
>>   objtool: Reorganize CFI code
>>   objtool: Reorganize instruction-related code
>>   objtool: Move decode_instructions() to a separate file
>>   objtool: Reorganize Unwind hint code
>>   objtool: Reorganize ORC code
>>   objtool: Reorganize ORC kernel code
>>   objtool: Introduce STATIC_CHECK
>>
>> Youling Tang (16):
>>   tools: LoongArch: Copy inst.h and asm.h to tools
>>   objtool: LoongArch: Add base definition for LoongArch
>>   objtool: LoongArch: Implement decoder
>>   objtool: Add annotate_reachable() for objtools
>>   LoongArch: bug: Add reachable annotation to warning macros
>>   objtool: Add next member in struct reloc
>>   objtool: Add orc_print_dump() package
>>   objtool: Add ORC support for LoongArch
>>   LoongArch: Add ORC unwinder support
>>   LoongArch: Support R_LARCH_32_PCREL relocation type in kernel module
>>   LoongArch: Fix fpu.S objtool warning
>>   LoongArch: Annotate unwind_hint
>>   LoongArch: Move some data definitions into the .data section
>>   objtool: Add arch-specific "noreturn" function handling
>>   objtool: Make update_cfi_state() arch-specific function
>>   LoongArch: objtool: Mark non-standard object files and directories
>>
>>  arch/loongarch/Kconfig                        |   2 +
>>  arch/loongarch/Kconfig.debug                  |  11 +
>>  arch/loongarch/Makefile                       |   4 +
>>  arch/loongarch/include/asm/bug.h              |   1 +
>>  arch/loongarch/include/asm/module.h           |   7 +
>>  arch/loongarch/include/asm/orc_types.h        |  58 ++
>>  arch/loongarch/include/asm/stackframe.h       |   3 +
>>  arch/loongarch/include/asm/unwind.h           |  17 +-
>>  arch/loongarch/include/asm/unwind_hints.h     | 110 +++
>>  arch/loongarch/kernel/Makefile                |   3 +
>>  arch/loongarch/kernel/entry.S                 |   2 +
>>  arch/loongarch/kernel/fpu.S                   |  11 +-
>>  arch/loongarch/kernel/genex.S                 |   2 +
>>  arch/loongarch/kernel/head.S                  |   1 +
>>  arch/loongarch/kernel/module.c                |  21 +-
>>  arch/loongarch/kernel/relocate_kernel.S       |  12 +-
>>  arch/loongarch/kernel/setup.c                 |   2 +
>>  arch/loongarch/kernel/stacktrace.c            |   1 +
>>  arch/loongarch/kernel/unwind_orc.c            | 301 +++++++++
>>  arch/loongarch/kernel/vmlinux.lds.S           |   3 +
>>  arch/loongarch/power/Makefile                 |   2 +
>>  arch/loongarch/vdso/Makefile                  |   2 +
>>  arch/x86/include/asm/unwind.h                 |   5 -
>>  arch/x86/include/asm/unwind_hints.h           |  86 +++
>>  arch/x86/kernel/module.c                      |   7 +-
>>  arch/x86/kernel/unwind_orc.c                  | 268 +-------
>>  arch/x86/kernel/vmlinux.lds.S                 |   2 +-
>>  .../asm => include/asm-generic}/orc_lookup.h  |  43 ++
>>  include/linux/compiler.h                      |   9 +
>>  include/linux/objtool.h                       |  70 --
>>  kernel/Makefile                               |   2 +
>>  kernel/orc_lookup.c                           | 261 ++++++++
>>  scripts/Makefile                              |   5 +-
>>  tools/arch/loongarch/include/asm/asm.h        | 201 ++++++
>>  tools/arch/loongarch/include/asm/inst.h       | 629
>> ++++++++++++++++++
>>  tools/arch/loongarch/include/asm/orc_types.h  |  58 ++
>>  .../arch/loongarch/include/asm/unwind_hints.h | 110 +++
>>  tools/arch/x86/include/asm/unwind_hints.h     | 160 +++++
>>  tools/include/linux/bitops.h                  |  10 +
>>  tools/include/linux/objtool.h                 |  70 --
>>  tools/objtool/Build                           |   8 +-
>>  tools/objtool/Makefile                        |   9 +-
>>  tools/objtool/arch/loongarch/Build            |   3 +
>>  tools/objtool/arch/loongarch/decode.c         | 352 ++++++++++
>>  .../arch/loongarch/include/arch/cfi_regs.h    |  14 +
>>  .../objtool/arch/loongarch/include/arch/elf.h |  15 +
>>  .../arch/loongarch/include/arch/special.h     |  21 +
>>  tools/objtool/arch/loongarch/orc.c            | 155 +++++
>>  tools/objtool/arch/loongarch/special.c        |  25 +
>>  tools/objtool/arch/powerpc/special.c          |   3 +
>>  tools/objtool/arch/x86/Build                  |   1 +
>>  tools/objtool/arch/x86/include/arch/elf.h     |   1 +
>>  tools/objtool/arch/x86/orc.c                  | 164 +++++
>>  tools/objtool/arch/x86/special.c              |   4 +
>>  tools/objtool/cfi.c                           | 108 +++
>>  tools/objtool/check.c                         | 568 +---------------
>>  tools/objtool/decode.c                        | 136 ++++
>>  tools/objtool/elf.c                           |  11 +-
>>  tools/objtool/include/objtool/arch.h          |   3 +
>>  tools/objtool/include/objtool/cfi.h           |  12 +
>>  tools/objtool/include/objtool/check.h         |  97 +--
>>  tools/objtool/include/objtool/elf.h           |   1 +
>>  tools/objtool/include/objtool/insn.h          | 166 +++++
>>  tools/objtool/include/objtool/objtool.h       |   3 +
>>  tools/objtool/include/objtool/orc.h           |  15 +
>>  tools/objtool/include/objtool/special.h       |   3 +
>>  tools/objtool/insn.c                          | 195 ++++++
>>  tools/objtool/orc_dump.c                      |  67 +-
>>  tools/objtool/orc_gen.c                       |  79 +--
>>  tools/objtool/sync-check.sh                   |   9 +
>>  tools/objtool/unwind_hints.c                  | 107 +++
>>  71 files changed, 3721 insertions(+), 1206 deletions(-)
>>  create mode 100644 arch/loongarch/include/asm/orc_types.h
>>  create mode 100644 arch/loongarch/include/asm/unwind_hints.h
>>  create mode 100644 arch/loongarch/kernel/unwind_orc.c
>>  rename {arch/x86/include/asm => include/asm-generic}/orc_lookup.h
>> (50%)
>>  create mode 100644 kernel/orc_lookup.c
>>  create mode 100644 tools/arch/loongarch/include/asm/asm.h
>>  create mode 100644 tools/arch/loongarch/include/asm/inst.h
>>  create mode 100644 tools/arch/loongarch/include/asm/orc_types.h
>>  create mode 100644 tools/arch/loongarch/include/asm/unwind_hints.h
>>  create mode 100644 tools/arch/x86/include/asm/unwind_hints.h
>>  create mode 100644 tools/objtool/arch/loongarch/Build
>>  create mode 100644 tools/objtool/arch/loongarch/decode.c
>>  create mode 100644
>> tools/objtool/arch/loongarch/include/arch/cfi_regs.h
>>  create mode 100644 tools/objtool/arch/loongarch/include/arch/elf.h
>>  create mode 100644
>> tools/objtool/arch/loongarch/include/arch/special.h
>>  create mode 100644 tools/objtool/arch/loongarch/orc.c
>>  create mode 100644 tools/objtool/arch/loongarch/special.c
>>  create mode 100644 tools/objtool/arch/x86/orc.c
>>  create mode 100644 tools/objtool/cfi.c
>>  create mode 100644 tools/objtool/decode.c
>>  create mode 100644 tools/objtool/include/objtool/insn.h
>>  create mode 100644 tools/objtool/include/objtool/orc.h
>>  create mode 100644 tools/objtool/insn.c
>>  create mode 100644 tools/objtool/unwind_hints.c
>>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ