diff mbox

pty: make ptmx file ops read-only after init

Message ID 20160908223558.GA11742@www.outflux.net (mailing list archive)
State New, archived
Headers show

Commit Message

Kees Cook Sept. 8, 2016, 10:35 p.m. UTC
The ptmx_fops structure is only changed during init, so mark it as such.

Signed-off-by: Kees Cook <keescook@chromium.org>
---
 drivers/tty/pty.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jiri Slaby Sept. 14, 2016, 7:59 a.m. UTC | #1
On 09/09/2016, 12:35 AM, Kees Cook wrote:
> The ptmx_fops structure is only changed during init, so mark it as such.

Right, but I am missing what is the benefit? You would have to elaborate
here...

> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---
>  drivers/tty/pty.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
> index 51e0d32883ba..a23fa5ed1d67 100644
> --- a/drivers/tty/pty.c
> +++ b/drivers/tty/pty.c
> @@ -800,7 +800,7 @@ out_free_file:
>  	return retval;
>  }
>  
> -static struct file_operations ptmx_fops;
> +static struct file_operations ptmx_fops __ro_after_init;
>  
>  static void __init unix98_pty_init(void)
>  {
> 

thanks,
Alan Cox Sept. 14, 2016, 2:04 p.m. UTC | #2
On Wed, 14 Sep 2016 09:59:42 +0200
Jiri Slaby <jslaby@suse.cz> wrote:

> On 09/09/2016, 12:35 AM, Kees Cook wrote:
> > The ptmx_fops structure is only changed during init, so mark it as such.  
> 
> Right, but I am missing what is the benefit? You would have to elaborate
> here...

The pages end up marked read only even to the kernel (and in future could
even be marked read only forever when in kvm if we get suitable virtual
machine extensions). That makes it much harder to patch those vectors
when making security attacks.
Kees Cook Sept. 14, 2016, 4:17 p.m. UTC | #3
On Wed, Sep 14, 2016 at 7:04 AM, One Thousand Gnomes
<gnomes@lxorguk.ukuu.org.uk> wrote:
> On Wed, 14 Sep 2016 09:59:42 +0200
> Jiri Slaby <jslaby@suse.cz> wrote:
>
>> On 09/09/2016, 12:35 AM, Kees Cook wrote:
>> > The ptmx_fops structure is only changed during init, so mark it as such.
>>
>> Right, but I am missing what is the benefit? You would have to elaborate
>> here...
>
> The pages end up marked read only even to the kernel (and in future could
> even be marked read only forever when in kvm if we get suitable virtual
> machine extensions). That makes it much harder to patch those vectors
> when making security attacks.

Correct, this is a continuing effort to reduce the internal attack
surface of the kernel, where one of the most common exploitation
methods is overwriting function pointers.

Some examples of attacks and mitigations are here:
http://kernsec.org/wiki/index.php/Exploit_Methods/Function_pointer_overwrite

While this patch isn't a huge change, it's still a viable candidate. I
send these as I notice them, and hope that other folks will start to
see these opportunities and send more patches too. :)

-Kees
Jiri Slaby Sept. 21, 2016, 9:40 a.m. UTC | #4
On 09/14/2016, 06:17 PM, Kees Cook wrote:
> Correct, this is a continuing effort to reduce the internal attack
> surface of the kernel, where one of the most common exploitation
> methods is overwriting function pointers.
> 
> Some examples of attacks and mitigations are here:
> http://kernsec.org/wiki/index.php/Exploit_Methods/Function_pointer_overwrite
> 
> While this patch isn't a huge change, it's still a viable candidate. I
> send these as I notice them, and hope that other folks will start to
> see these opportunities and send more patches too. :)

I didn't object to the patch. I could imagine the use case. But putting
the idea to the commit message would have made it clear.

thanks,
diff mbox

Patch

diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
index 51e0d32883ba..a23fa5ed1d67 100644
--- a/drivers/tty/pty.c
+++ b/drivers/tty/pty.c
@@ -800,7 +800,7 @@  out_free_file:
 	return retval;
 }
 
-static struct file_operations ptmx_fops;
+static struct file_operations ptmx_fops __ro_after_init;
 
 static void __init unix98_pty_init(void)
 {