[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 00/16] linux: generalize sections, ranges and linker tables



On Fri, Aug 19, 2016 at 2:32 PM,  <mcgrof@xxxxxxxxxx> wrote:
> From: "Luis R. Rodriguez" <mcgrof@xxxxxxxxxx>
>
> This v4 addresses feedback from the previous v3 series [0], and also
> addresses a huge array of additional tests against many architectures
> outside of what 0-day provides. As I mentioned in my last v3 series,
> 0-day had only found one issue with the series, a blackfin architecture
> linker issue with the last series. Guenter Rock was kind enough to give
> my series a test spin on his test bed and he found quite a bit of other
> oddball issues with obscure architectures, and even on x86 with an old
> toolchain. After a lot of work and coordinating with a few maintainers
> I'm happy to report all issues found so far through all possible testing
> I could do are now fixed, this series also addresses all feedback from
> the last series, as such this goes submitted as PATCH form.
>
> In addressing fixing this work on a few architectures some of the previous
> patches are further simplified. The kprobes port to linker tables is made
> much easier now that I've addressed moving out core kprobe declarations
> into asm-generic/kprobes.h. Refer to the patch "kprobes: move kprobe
> declarations to asm-generic/kprobes.h". This makes for a much cleaner
> solution across architectures.
>
> Boris feedback on making the code bit rot feature optional is addressed
> by using a new Kconfig symbol for this, CONFIG_BUILD_AVOID_BITROT,
> but given Greg's concerns over lack of clarity over what this was all about
> I've ripped that functionality out into its own patch with a bit more
> extensive documentation and re-wording. See the patch "kbuild: enable option
> to force compile force-obj-y and force-lib-y". I hope makes it clear how
> linker tables can help with avoiding code bit rot. I've gone with a new
> Kconfig symbol CONFIG_BUILD_AVOID_BITROT given CONFIG_COMPILE_TEST is
> not available on UML, this feature is desirable on all architectures.
>
> The documentation is revamped, now that the DocBook format is deprecated
> I ported the documention into the trendy hipster Sphinx documentation
> format.
>
> AT Boris' request I've adapated the userspace linker table application
> forintegration into the kernel under tools/ to make it easier to keep
> things in sync, however since this requires a bit of changes to some headers
> in tools/ I'll submit that separately.
>
> [0] 
> https://lkml.kernel.org/r/1469222687-1600-1-git-send-email-mcgrof@xxxxxxxxxx
>
> If you'd like this in git-form, you can get it on the 20160819-linker-table-v4
> branch of my linux-next tree on kernel.org, this also includes the series of
> the linker table userspace sandbox:
>
> https://git.kernel.org/cgit/linux/kernel/git/mcgrof/linux-next.git/log/?h=20160819-linker-table-v4
>
> Please let me know if there are any concerns or questions.

Thanks for the documentation and examples on this feature; I appreciate it! :)

While it seems like all the section declarations work in this series
is designed for assembler source, I'm curious if I've missed a way to
do this in .c source too. I'd love to avoid doing the crazy thing I'm
currently doing in lkdtm with section markings. Namely, I want to
write a function in .c and have it moved into the .rodata section. The
linkers get very very angry with me and I don't seem to be able to
override the progbits to lose "x". Right now I'm doing an objcopy in
drivers/misc/Makefile:

OBJCOPYFLAGS_lkdtm_rodata_objcopy.o := \
                        --set-section-flags .text=alloc,readonly \
                        --rename-section .text=.rodata
targets += lkdtm_rodata.o lkdtm_rodata_objcopy.o
$(obj)/lkdtm_rodata_objcopy.o: $(obj)/lkdtm_rodata.o FORCE
        $(call if_changed,objcopy)

Thanks!

-Kees

>
> Luis R. Rodriguez (16):
>   x86: remove LTO_REFERENCE_INITCALL()
>   dell-smo8800: include uaccess.h
>   scripts/module-common.lds: enable generation
>   generic-sections: add section core helpers
>   xtensa: skip adding literal when SORT() is used
>   ranges.h: add helpers to build and identify Linux section ranges
>   tables.h: add linker table support
>   kbuild: enable option to force compile force-obj-y and force-lib-y
>   firmware/Makefile: force recompilation if makefile changes
>   firmware: port built-in section to linker table
>   jump_label: move guard #endif down where it belongs
>   jump_label: port __jump_table to linker tables
>   dynamic_debug: port to use linker tables
>   kprobes: move kprobe declarations to asm-generic/kprobes.h
>   kprobes: port .kprobes.text to section range
>   kprobes: port blacklist kprobes to linker table
>
>  .gitignore                                         |   2 +
>  Documentation/index.rst                            |   1 +
>  Documentation/kbuild/makefiles.txt                 |  36 ++
>  Documentation/sections/conf.py                     |   4 +
>  Documentation/sections/index.rst                   |  13 +
>  Documentation/sections/linker-tables.rst           | 202 +++++++
>  Documentation/sections/ranges.rst                  |  49 ++
>  Documentation/sections/section-core.rst            | 153 +++++
>  MAINTAINERS                                        |  37 ++
>  Makefile                                           |   6 +-
>  arch/alpha/include/asm/Kbuild                      |   4 +
>  arch/arc/include/asm/Kbuild                        |   3 +
>  arch/arc/include/asm/kprobes.h                     |   6 +-
>  arch/arc/kernel/vmlinux.lds.S                      |   1 -
>  arch/arm/include/asm/Kbuild                        |   3 +
>  arch/arm/include/asm/jump_label.h                  |   6 +-
>  arch/arm/include/asm/kprobes.h                     |   4 +
>  arch/arm/kernel/entry-armv.S                       |   3 +-
>  arch/arm/kernel/vmlinux-xip.lds.S                  |   1 -
>  arch/arm/kernel/vmlinux.lds.S                      |   1 -
>  arch/arm/probes/decode.h                           |   1 +
>  arch/arm64/include/asm/Kbuild                      |   3 +
>  arch/arm64/include/asm/jump_label.h                |   6 +-
>  arch/arm64/include/asm/kprobes.h                   |   4 +
>  arch/arm64/kernel/armv8_deprecated.c               |   1 +
>  arch/arm64/kernel/insn.c                           |   1 +
>  arch/arm64/kernel/probes/kprobes.c                 |   4 +-
>  arch/arm64/kernel/vmlinux.lds.S                    |   1 -
>  arch/avr32/include/asm/Kbuild                      |   3 +
>  arch/avr32/include/asm/kprobes.h                   |   4 +
>  arch/avr32/kernel/entry-avr32b.S                   |  13 +-
>  arch/avr32/kernel/vmlinux.lds.S                    |   1 -
>  arch/blackfin/include/asm/Kbuild                   |   4 +
>  arch/blackfin/kernel/vmlinux.lds.S                 |   1 -
>  arch/c6x/include/asm/Kbuild                        |   3 +
>  arch/c6x/include/asm/tables.h                      |  26 +
>  arch/c6x/kernel/vmlinux.lds.S                      |   1 -
>  arch/cris/include/asm/Kbuild                       |   4 +
>  arch/frv/include/asm/Kbuild                        |   4 +
>  arch/h8300/include/asm/Kbuild                      |   4 +
>  arch/hexagon/include/asm/Kbuild                    |   4 +
>  arch/hexagon/kernel/vmlinux.lds.S                  |   1 -
>  arch/ia64/include/asm/Kbuild                       |   3 +
>  arch/ia64/include/asm/kprobes.h                    |   7 +-
>  arch/ia64/kernel/jprobes.S                         |   3 +-
>  arch/ia64/kernel/vmlinux.lds.S                     |   1 -
>  arch/ia64/lib/flush.S                              |   6 +-
>  arch/m32r/include/asm/Kbuild                       |   4 +
>  arch/m68k/include/asm/Kbuild                       |   4 +
>  arch/metag/include/asm/Kbuild                      |   4 +
>  arch/metag/kernel/vmlinux.lds.S                    |   1 -
>  arch/microblaze/include/asm/Kbuild                 |   4 +
>  arch/microblaze/kernel/vmlinux.lds.S               |   1 -
>  arch/mips/include/asm/Kbuild                       |   3 +
>  arch/mips/include/asm/jump_label.h                 |   6 +-
>  arch/mips/include/asm/kprobes.h                    |   6 +-
>  arch/mips/kernel/vmlinux.lds.S                     |   1 -
>  arch/mn10300/include/asm/Kbuild                    |   3 +
>  arch/mn10300/include/asm/kprobes.h                 |   4 +
>  arch/mn10300/kernel/vmlinux.lds.S                  |   1 -
>  arch/nios2/include/asm/Kbuild                      |   4 +
>  arch/nios2/kernel/vmlinux.lds.S                    |   1 -
>  arch/openrisc/include/asm/Kbuild                   |   4 +
>  arch/openrisc/kernel/vmlinux.lds.S                 |   1 -
>  arch/parisc/include/asm/Kbuild                     |   4 +
>  arch/parisc/kernel/vmlinux.lds.S                   |   1 -
>  arch/powerpc/include/asm/Kbuild                    |   3 +
>  arch/powerpc/include/asm/jump_label.h              |   8 +-
>  arch/powerpc/include/asm/kprobes.h                 |   6 +
>  arch/powerpc/include/asm/ppc_asm.h                 |   7 +-
>  arch/powerpc/kernel/vmlinux.lds.S                  |   1 -
>  arch/s390/include/asm/Kbuild                       |   3 +
>  arch/s390/include/asm/jump_label.h                 |   6 +-
>  arch/s390/include/asm/kprobes.h                    |   4 +
>  arch/s390/kernel/entry.S                           |   5 +-
>  arch/s390/kernel/kprobes.c                         |   6 +-
>  arch/s390/kernel/mcount.S                          |   3 +-
>  arch/s390/kernel/vmlinux.lds.S                     |   1 -
>  arch/score/include/asm/Kbuild                      |   4 +
>  arch/score/kernel/vmlinux.lds.S                    |   1 -
>  arch/sh/include/asm/Kbuild                         |   3 +
>  arch/sh/include/asm/kprobes.h                      |   2 +
>  arch/sh/kernel/vmlinux.lds.S                       |   1 -
>  arch/sparc/include/asm/Kbuild                      |   3 +
>  arch/sparc/include/asm/jump_label.h                |   6 +-
>  arch/sparc/include/asm/kprobes.h                   |   5 +
>  arch/sparc/kernel/vmlinux.lds.S                    |   1 -
>  arch/sparc/mm/ultra.S                              |   3 +-
>  arch/tile/include/asm/Kbuild                       |   3 +
>  arch/tile/include/asm/kprobes.h                    |   6 +-
>  arch/tile/kernel/vmlinux.lds.S                     |   1 -
>  arch/um/include/asm/Kbuild                         |   4 +
>  arch/unicore32/include/asm/Kbuild                  |   3 +
>  arch/unicore32/include/asm/section-core.h          |  19 +
>  arch/x86/include/asm/Kbuild                        |   3 +
>  arch/x86/include/asm/jump_label.h                  |  10 +-
>  arch/x86/include/asm/kprobes.h                     |   6 +
>  arch/x86/kernel/cpu/microcode/core.c               |   8 +-
>  arch/x86/kernel/kprobes/core.c                     |  11 +-
>  arch/x86/kernel/vmlinux.lds.S                      |   1 -
>  arch/x86/tools/relocs.c                            |   4 +
>  arch/xtensa/include/asm/Kbuild                     |   4 +
>  arch/xtensa/kernel/Makefile                        |   8 +-
>  drivers/base/firmware_class.c                      |  12 +-
>  drivers/platform/x86/dell-smo8800.c                |   1 +
>  firmware/Makefile                                  |   6 +-
>  include/asm-generic/kprobes.h                      |  26 +
>  include/asm-generic/ranges.h                       | 103 ++++
>  include/asm-generic/section-core.h                 | 341 +++++++++++
>  include/asm-generic/sections.h                     |   4 +-
>  include/asm-generic/tables.h                       |  50 ++
>  include/asm-generic/vmlinux.lds.h                  |  73 +--
>  include/linux/compiler.h                           |   8 -
>  include/linux/dynamic_debug.h                      |   5 +-
>  include/linux/init.h                               |  20 +-
>  include/linux/jump_label.h                         |   8 +-
>  include/linux/kprobes.h                            |  24 +-
>  include/linux/ranges.h                             | 128 +++++
>  include/linux/sections.h                           | 111 ++++
>  include/linux/tables.h                             | 638 
> +++++++++++++++++++++
>  init/Kconfig                                       |  22 +
>  kernel/jump_label.c                                |  17 +-
>  kernel/kprobes.c                                   |  17 +-
>  lib/dynamic_debug.c                                |  13 +-
>  scripts/Makefile.build                             |   7 +-
>  scripts/Makefile.clean                             |   2 +
>  scripts/Makefile.lib                               |  11 +
>  scripts/Makefile.modpost                           |   2 +-
>  scripts/mod/modpost.c                              |   2 +-
>  scripts/{module-common.lds => module-common.lds.S} |   6 +
>  scripts/recordmcount.c                             |   2 +-
>  scripts/recordmcount.pl                            |   2 +-
>  tools/objtool/special.c                            |   2 +-
>  133 files changed, 2328 insertions(+), 214 deletions(-)
>  create mode 100644 Documentation/sections/conf.py
>  create mode 100644 Documentation/sections/index.rst
>  create mode 100644 Documentation/sections/linker-tables.rst
>  create mode 100644 Documentation/sections/ranges.rst
>  create mode 100644 Documentation/sections/section-core.rst
>  create mode 100644 arch/c6x/include/asm/tables.h
>  create mode 100644 arch/unicore32/include/asm/section-core.h
>  create mode 100644 include/asm-generic/kprobes.h
>  create mode 100644 include/asm-generic/ranges.h
>  create mode 100644 include/asm-generic/section-core.h
>  create mode 100644 include/asm-generic/tables.h
>  create mode 100644 include/linux/ranges.h
>  create mode 100644 include/linux/sections.h
>  create mode 100644 include/linux/tables.h
>  rename scripts/{module-common.lds => module-common.lds.S} (80%)
>
> --
> 2.9.2
>



-- 
Kees Cook
Nexus Security

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.