Message ID | 20190926175602.33098-1-keescook@chromium.org (mailing list archive) |
---|---|
Headers | show |
Series | vmlinux.lds.h: Refactor EXCEPTION_TABLE and NOTES | expand |
On Thu, Sep 26, 2019 at 10:55:33AM -0700, Kees Cook wrote: > This series works to move the linker sections for NOTES and > EXCEPTION_TABLE into the RO_DATA area, where they belong on most > (all?) architectures. The problem being addressed was the discovery > by Rick Edgecombe that the exception table was accidentally marked > executable while he was developing his execute-only-memory series. When > permissions were flipped from readable-and-executable to only-executable, > the exception table became unreadable, causing things to explode rather > badly. :) > > Roughly speaking, the steps are: > > - regularize the linker names for PT_NOTE and PT_LOAD program headers > (to "note" and "text" respectively) > - regularize restoration of linker section to program header assignment > (when PT_NOTE exists) > - move NOTES into RO_DATA > - finish macro naming conversions for RO_DATA and RW_DATA > - move EXCEPTION_TABLE into RO_DATA on architectures where this is clear > - clean up some x86-specific reporting of kernel memory resources > - switch x86 linker fill byte from x90 (NOP) to 0xcc (INT3), just because > I finally realized what that trailing ": 0x9090" meant -- and we should > trap, not slide, if execution lands in section padding Yap, nice patchset overall. > Since these changes are treewide, I'd love to get architecture-maintainer > Acks and either have this live in x86 -tip or in my own tree, however > people think it should go. Sure, I don't mind taking v2 through tip once I get ACKs from the respective arch maintainers. Thx.
On Thu, Oct 10, 2019 at 08:03:31PM +0200, Borislav Petkov wrote: > On Thu, Sep 26, 2019 at 10:55:33AM -0700, Kees Cook wrote: > > This series works to move the linker sections for NOTES and > > EXCEPTION_TABLE into the RO_DATA area, where they belong on most > > (all?) architectures. The problem being addressed was the discovery > > by Rick Edgecombe that the exception table was accidentally marked > > executable while he was developing his execute-only-memory series. When > > permissions were flipped from readable-and-executable to only-executable, > > the exception table became unreadable, causing things to explode rather > > badly. :) > > > > Roughly speaking, the steps are: > > > > - regularize the linker names for PT_NOTE and PT_LOAD program headers > > (to "note" and "text" respectively) > > - regularize restoration of linker section to program header assignment > > (when PT_NOTE exists) > > - move NOTES into RO_DATA > > - finish macro naming conversions for RO_DATA and RW_DATA > > - move EXCEPTION_TABLE into RO_DATA on architectures where this is clear > > - clean up some x86-specific reporting of kernel memory resources > > - switch x86 linker fill byte from x90 (NOP) to 0xcc (INT3), just because > > I finally realized what that trailing ": 0x9090" meant -- and we should > > trap, not slide, if execution lands in section padding > > Yap, nice patchset overall. Thanks! > > Since these changes are treewide, I'd love to get architecture-maintainer > > Acks and either have this live in x86 -tip or in my own tree, however > > people think it should go. > > Sure, I don't mind taking v2 through tip once I get ACKs from the > respective arch maintainers. Okay, excellent. I've only had acks from arm64, but I'll call it out again in v2. Thanks for the review!
On October 10, 2019 4:57:36 PM PDT, Kees Cook <keescook@chromium.org> wrote: >On Thu, Oct 10, 2019 at 08:03:31PM +0200, Borislav Petkov wrote: >> On Thu, Sep 26, 2019 at 10:55:33AM -0700, Kees Cook wrote: >> > This series works to move the linker sections for NOTES and >> > EXCEPTION_TABLE into the RO_DATA area, where they belong on most >> > (all?) architectures. The problem being addressed was the discovery >> > by Rick Edgecombe that the exception table was accidentally marked >> > executable while he was developing his execute-only-memory series. >When >> > permissions were flipped from readable-and-executable to >only-executable, >> > the exception table became unreadable, causing things to explode >rather >> > badly. :) >> > >> > Roughly speaking, the steps are: >> > >> > - regularize the linker names for PT_NOTE and PT_LOAD program >headers >> > (to "note" and "text" respectively) >> > - regularize restoration of linker section to program header >assignment >> > (when PT_NOTE exists) >> > - move NOTES into RO_DATA >> > - finish macro naming conversions for RO_DATA and RW_DATA >> > - move EXCEPTION_TABLE into RO_DATA on architectures where this is >clear >> > - clean up some x86-specific reporting of kernel memory resources >> > - switch x86 linker fill byte from x90 (NOP) to 0xcc (INT3), just >because >> > I finally realized what that trailing ": 0x9090" meant -- and we >should >> > trap, not slide, if execution lands in section padding >> >> Yap, nice patchset overall. > >Thanks! > >> > Since these changes are treewide, I'd love to get >architecture-maintainer >> > Acks and either have this live in x86 -tip or in my own tree, >however >> > people think it should go. >> >> Sure, I don't mind taking v2 through tip once I get ACKs from the >> respective arch maintainers. > >Okay, excellent. I've only had acks from arm64, but I'll call it out >again in v2. Thanks for the review! I would like to once again advocate for the generalized link table mechanism. It is nuts that each individual table should need vmlinux.lds hacking across architectures.