From: Chris Wright <chrisw@sous-sol.org>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Chris Wright <chrisw@sous-sol.org>,
greg@kroah.com, jbarnes@virtuousgeek.org, matthew@wil.cx,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
kvm@vger.kernel.org, ddutile@redhat.com,
alex.williamson@redhat.com
Subject: [PATCH 2/2 v2] pci: check caps from sysfs file open to read device dependent config space
Date: Thu, 13 May 2010 10:43:07 -0700 [thread overview]
Message-ID: <20100513174307.GH28034@sequoia.sous-sol.org> (raw)
In-Reply-To: <20100513105911.6469c434@lxorguk.ukuu.org.uk>
* Alan Cox (alan@lxorguk.ukuu.org.uk) wrote:
> I agree with the problem - but IMHO the fix is to require opening the file
> checks CAP_SYS_something instead: not to hack the read method and make it
> even weirder and more un-Linux than it is now.
This patch does that. Not as convenient from the KVM/libvirt point of view
because it is not prepared to do this setup before dropping privileges
and launching the VM.
thanks,
-chris
--
From: Chris Wright <chrisw@sous-sol.org>
Subject: [PATCH 2/2 v2] pci: check caps from sysfs file open to read device dependent config space
The PCI config space bin_attr read handler has a hardcoded CAP_SYS_ADMIN
check to verify privileges before allowing a user to read device
dependent config space. This is meant to protect from an unprivileged
user potentially locking up the box.
When assigning a PCI device directly to a guest with libvirt and KVM,
the sysfs config space file is chown'd to the unprivileged user that
the KVM guest will run as. The guest needs to have full access to the
device's config space since it's responsible for driving the device.
However, despite being the owner of the sysfs file, the CAP_SYS_ADMIN
check will not allow read access beyond the config header.
With this patch we check privileges against the capabilities used when
openining the sysfs file. The allows a privileged process to open the
file and hand it to an unprivileged process, and the unprivileged process
can still read all of the config space.
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
drivers/pci/pci-sysfs.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index ad44557..6309c5a 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -21,6 +21,7 @@
#include <linux/stat.h>
#include <linux/topology.h>
#include <linux/mm.h>
+#include <linux/fs.h>
#include <linux/capability.h>
#include <linux/pci-aspm.h>
#include <linux/slab.h>
@@ -367,7 +368,7 @@ pci_read_config(struct file *filp, struct kobject *kobj,
u8 *data = (u8*) buf;
/* Several chips lock up trying to read undefined config space */
- if (capable(CAP_SYS_ADMIN)) {
+ if (cap_raised(filp->f_cred->cap_effective, CAP_SYS_ADMIN)) {
size = dev->cfg_size;
} else if (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
size = 128;
--
1.6.5.2
next prev parent reply other threads:[~2010-05-13 17:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-13 1:28 [PATCH 1/2] sysfs: add struct file* to bin_attr callbacks Chris Wright
2010-05-13 1:29 ` [PATCH 2/2] pci: allow sysfs file owner to read device dependent config space Chris Wright
2010-05-13 9:59 ` Alan Cox
2010-05-13 15:05 ` Chris Wright
2010-05-13 17:43 ` Chris Wright [this message]
2010-05-13 19:06 ` [PATCH 2/2 v2] pci: check caps from sysfs file open " Greg KH
2010-05-13 19:16 ` Chris Wright
2010-05-13 10:56 ` [PATCH 2/2] pci: allow sysfs file owner " Avi Kivity
2010-05-13 11:02 ` Daniel P. Berrange
2010-05-14 19:09 ` Greg KH
2010-05-14 19:26 ` Jesse Barnes
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=20100513174307.GH28034@sequoia.sous-sol.org \
--to=chrisw@sous-sol.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=alex.williamson@redhat.com \
--cc=ddutile@redhat.com \
--cc=greg@kroah.com \
--cc=jbarnes@virtuousgeek.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=matthew@wil.cx \
/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.