Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1620699 > unrolled thread
| Started by | Kees Cook <keescook@chromium.org> |
|---|---|
| First post | 2017-04-10 22:20 +0200 |
| Last post | 2017-04-10 22:20 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [kernel-hardening] Re: [RFC v2][PATCH 04/11] x86: Implement __arch_rare_write_begin/unmap() Kees Cook <keescook@chromium.org> - 2017-04-10 22:20 +0200
Re: [kernel-hardening] Re: [RFC v2][PATCH 04/11] x86: Implement __arch_rare_write_begin/unmap() Andy Lutomirski <luto@kernel.org> - 2017-04-10 22:20 +0200
| From | Kees Cook <keescook@chromium.org> |
|---|---|
| Date | 2017-04-10 22:20 +0200 |
| Subject | Re: [kernel-hardening] Re: [RFC v2][PATCH 04/11] x86: Implement __arch_rare_write_begin/unmap() |
| Message-ID | <tuNX3-5AE-7@gated-at.bofh.it> |
On Sun, Apr 9, 2017 at 1:24 PM, PaX Team <pageexec@freemail.hu> wrote: > On 7 Apr 2017 at 22:07, Andy Lutomirski wrote: >> No one has explained how CR0.WP is weaker or slower than my proposal. > > you misunderstood, Daniel was talking about your use_mm approach. > >> Here's what I'm proposing: >> >> At boot, choose a random address A. > > what is the threat that a random address defends against? > >> Create an mm_struct that has a >> single VMA starting at A that represents the kernel's rarely-written >> section. Compute O = (A - VA of rarely-written section). To do a >> rare write, use_mm() the mm, write to (VA + O), then unuse_mm(). > > the problem is that the amount of __read_only data extends beyond vmlinux, > i.e., this approach won't scale. another problem is that it can't be used > inside use_mm and switch_mm themselves (no read-only task structs or percpu > pgd for you ;) and probably several other contexts. These are the limitations that concern me: what will we NOT be able to make read-only as a result of the use_mm() design choice? My RFC series included a simple case and a constify case, but I did not include things like making page tables read-only, etc. I cant accept not using cr0, since we need to design something that works on arm64 too, which doesn't have anything like this (AFAIK), but I'd like to make sure we don't paint ourselves into a corner. -Kees -- Kees Cook Pixel Security
[toc] | [next] | [standalone]
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Date | 2017-04-10 22:20 +0200 |
| Message-ID | <tuNX3-5AE-9@gated-at.bofh.it> |
| In reply to | #1620699 |
On Mon, Apr 10, 2017 at 1:13 PM, Kees Cook <keescook@chromium.org> wrote: > On Sun, Apr 9, 2017 at 1:24 PM, PaX Team <pageexec@freemail.hu> wrote: >> On 7 Apr 2017 at 22:07, Andy Lutomirski wrote: >>> No one has explained how CR0.WP is weaker or slower than my proposal. >> >> you misunderstood, Daniel was talking about your use_mm approach. >> >>> Here's what I'm proposing: >>> >>> At boot, choose a random address A. >> >> what is the threat that a random address defends against? >> >>> Create an mm_struct that has a >>> single VMA starting at A that represents the kernel's rarely-written >>> section. Compute O = (A - VA of rarely-written section). To do a >>> rare write, use_mm() the mm, write to (VA + O), then unuse_mm(). >> >> the problem is that the amount of __read_only data extends beyond vmlinux, >> i.e., this approach won't scale. another problem is that it can't be used >> inside use_mm and switch_mm themselves (no read-only task structs or percpu >> pgd for you ;) and probably several other contexts. > > These are the limitations that concern me: what will we NOT be able to > make read-only as a result of the use_mm() design choice? My RFC > series included a simple case and a constify case, but I did not > include things like making page tables read-only, etc. If we make page tables read-only, we may need to have multiple levels of rareness. Page table writes aren't all that rare, and I can imagine distros configuring the kernel so that static structs full of function pointers are read-only (IMO that should be the default or even mandatory), but page tables may be a different story. That being said, CR3-twiddling to write to page tables could actually work. Hmm.
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web