All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
Cc: Jidong Xiao <jidong.xiao@gmail.com>,
	david@lang.hm, Cong Wang <xiyou.wangcong@gmail.com>,
	Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: Can we move device drivers into user-space?
Date: Sat, 25 Feb 2012 22:06:26 -0200	[thread overview]
Message-ID: <4F497782.3060902@redhat.com> (raw)
In-Reply-To: <20120225150940.GA3719@localhost>

Em 25-02-2012 13:10, Eduard - Gabriel Munteanu escreveu:
> On Fri, Feb 24, 2012 at 04:21:09PM -0200, Mauro Carvalho Chehab wrote:
>> Moving a buggy driver to userspace won't fix the bug. You're just moving
>> it from one place to another place. Also, the code will likely require changes
>> to work on userspace, so, the chances are that you're actually introducing more
>> bugs.
> 
> Hi,
> 
> 
> It does provide isolation, see below.

It depends on what you call isolation. Moving drivers to userspace
will protect ring 0, this but won't prevent OS attacks. See below.
> 
>> The impact of the bug won't also reduce, on most cases, as the userspace driver
>> will very likely require root capabilities.
> 
> Not as proposed, that's the point. For IOMMU-enabled systems, you can
> safely delegate an entire device to a userspace device and minimize
> privileged code. If I understand correctly, the performance impact is
> also minimal with respect to driver <-> device interaction. I'm not sure
> if driver <-> client might be problematic, but you can probably have the
> device DMA directly from/into client memory given the right mechanisms.
> 
> This is currently employed by virtualization software to do PCI
> passthrough. The guest OS can directly control the hardware.
> 
> Sure, you can't do it without proper hardware support. The question is
> how we can reuse existing code.
> 
>> Also, as driver talks directly with the hardware, an userspace block driver
>> would have access to the raw disk data. So, even if you find a way for it to
>> run unprivileged, it can still mangle the data written on the disk, and
>> even have a malicious code there that adds or allows to add a malware at the
>> disk partitions.
> 
> That's true, but it still makes sense for other drivers, say NIC
> drivers. Why should corrupting a network driver possibly result in total
> privilege escalation?

Bad NIC drivers could allow overriding firewall settings, making an external
packet to look as if it were a local one.

>> That's said, there are much more eyes inspecting the kernel sources than on any 
>> other userspace project. So, the risk of a bad code to be inserted unnoticed at
>> the Linux kernel is degrees of magnitude lower than on an userspace driver.
> 
> Those much more eyes have already missed important bugs in the past.

Yes, nobody is perfect. But the probability that something passes on a 4000+ people
review is lower than the probability of a bug on a piece of code where just one 
or two people are looking on it.

> No disrespect here, I'm just saying in many cases (like the one mentioned
> above) this approach almost eliminates the issue altogether.

It doesn't. Security is based on 3 pilars: confidentiality, integrity, availability (CIA).

Moving a driver from kernelspace to userspace will likely weak all 3:

- it is easier to inspect the data, reducing confidentiality;
- it is easier to forge data or to mangle, reducing integrity;
- the driver availability will likely weak, as less people will likely be looking
  into it, and the driver doesn't need to have the generally stronger criteria
  adopted by the Kernel maintainers to accept it[1].


[1] Ok, if an userspace driver stops, the kernel can still run (this is not different
than the great majority of kernel driver OOPSes: only the driver stops). Yet, if 
the driver is needed for normal operation of that system, having it stopped drops
the system availability.

Also, it is easier to replace an userspace driver than a kernel one, especially
if the distro has some mechanism to taint non-signed drivers, or if module
support is disabled.

> It's one reason we keep certain userspace out of the kernel.
> 
>> So, I can't see any advantage on doing something like that.
>>
> 
> Another advantage is you can debug and/or profile the driver more
> easily.

This is only partially true. The current debug tools available on the
Kernel are not hard to deal with, and are not behind what's available
on userspace.

> Consider a failed takeover attempt that results in a core dump
> (which also wouldn't result in a complete DoS of the machine).
>
> Anyway, I'm not arguing "this is the way it should be done". After all,
> not all machines are able to handle such a setup. But don't throw the
> baby out with the water, it's worth considering ways to make things
> safer. Also, let's not label things like this one as "microkernel" or
> "academia" and totally reject them; instead consider whether it's
> practical given recent advancements.
> 
> 
> 	Regards,
> 	Eduard
> 


  reply	other threads:[~2012-02-26  0:07 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-23  4:56 Can we move device drivers into user-space? Jidong Xiao
2012-02-23 15:57 ` Cong Wang
2012-02-23 16:34   ` Jidong Xiao
2012-02-23 20:48     ` david
2012-02-23 21:01       ` Jidong Xiao
2012-02-24 18:21         ` Mauro Carvalho Chehab
2012-02-25 15:10           ` Eduard - Gabriel Munteanu
2012-02-26  0:06             ` Mauro Carvalho Chehab [this message]
2012-02-26  0:29               ` Richard Yao
2012-02-27 11:31                 ` Mauro Carvalho Chehab
2012-02-26  1:58               ` Dr. David Alan Gilbert
2012-02-26  3:34                 ` arts zhao
2012-02-27 11:29                 ` Mauro Carvalho Chehab
2012-02-25 15:31           ` Richard Yao
2012-02-23 21:18       ` Roland Dreier
2012-02-24 15:19 ` Jidong Xiao
2012-02-24 15:38   ` Greg KH
2012-02-24 16:38     ` Jidong Xiao
2012-02-24 16:54       ` Greg KH
2012-02-24 17:06         ` Jidong Xiao
2012-02-24 17:13           ` Greg KH
2012-02-24 17:21             ` Jidong Xiao
2012-02-24 17:31               ` Greg KH
2012-02-25  2:33             ` Richard Yao
2012-02-25  4:28               ` Jidong Xiao
2012-02-24 17:10         ` Al Viro
2012-02-25 19:23         ` Jidong Xiao
2012-02-25 20:55           ` Greg KH
2012-02-25 23:43             ` Jidong Xiao
2012-02-26 17:40               ` Greg KH
2012-02-26 22:46             ` Greg KH
2012-02-27 11:17       ` Bernd Petrovitsch
2012-02-24 17:07     ` Guenter Roeck
2012-02-24 17:17       ` Greg KH
2012-02-24 17:47         ` Guenter Roeck
2012-02-24 18:34           ` Greg KH
2012-02-24 19:15             ` Henrik Rydberg
2012-02-24 19:26               ` Greg KH
2012-02-24 20:10                 ` Henrik Rydberg
2012-02-24 20:16                   ` Greg KH
2012-02-24 20:37                     ` Henrik Rydberg
2012-02-24 20:56                       ` Greg KH
2012-02-24 21:22                         ` Henrik Rydberg
2012-02-24 21:30                           ` Ted Ts'o
2012-02-24 22:14                             ` Henrik Rydberg
2012-02-24 22:20                               ` Greg KH
2012-02-24 22:49                                 ` Henrik Rydberg
2012-02-24 22:54                                   ` Greg KH
2012-02-24 23:14                                     ` Henrik Rydberg
2012-02-25 12:15                               ` Theodore Tso
2012-02-26  9:54                                 ` Henrik Rydberg
2012-02-26  4:56                               ` Bobby Powers
2012-02-26 10:47                                 ` Henrik Rydberg
2012-02-26 12:26                                   ` Richard Yao
2012-02-26 14:23                                     ` Bernd Petrovitsch
2012-02-26 15:29                                       ` Henrik Rydberg
     [not found]                                     ` <365b85cee33d4f1aadc31336663de21c@HUBCAS2.cs.stonybrook.edu>
2012-02-26 15:05                                       ` Richard Yao
2012-02-26 20:30                                         ` Ted Ts'o
     [not found]                                         ` <09a5cca9cffb4300843f682be529e8ca@HUBCAS2.cs.stonybrook.edu>
2012-02-26 21:25                                           ` Richard Yao
2012-02-26 21:35                                             ` Theodore Tso
     [not found]                                             ` <10de0ef9fb5d44c08669191e12343a97@HUBCAS2.cs.stonybrook.edu>
2012-02-26 22:03                                               ` Richard Yao
2012-02-27 11:17                                                 ` Bernd Petrovitsch
2012-02-26 23:08                                   ` david
2012-02-27  0:01                                     ` Henrik Rydberg
2012-02-27  0:53                                       ` david
2012-02-27  9:07                                         ` Henrik Rydberg
2012-03-01  9:54           ` Thomas Gleixner
2012-02-24 15:58   ` Valdis.Kletnieks

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F497782.3060902@redhat.com \
    --to=mchehab@redhat.com \
    --cc=david@lang.hm \
    --cc=eduard.munteanu@linux360.ro \
    --cc=jidong.xiao@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=xiyou.wangcong@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.