[lkml]   [2011]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[30/70] pci: use security_capable() when checking capablities during config space read
    2.6.37-stable review patch.  If anyone has any objections, please let us know.


    From: Chris Wright <>

    commit a628e7b87e100befac9702aa0c3b9848a7685e49 upstream.

    This reintroduces commit 47970b1b which was subsequently reverted
    as f00eaeea. The original change was broken and caused X startup
    failures and generally made privileged processes incapable of reading
    device dependent config space. The normal capable() interface returns
    true on success, but the LSM interface returns 0 on success. This thinko
    is now fixed in this patch, and has been confirmed to work properly.

    So, once again...Eric Paris noted that commit de139a3 ("pci: check caps
    from sysfs file open to read device dependent config space") caused the
    capability check to bypass security modules and potentially auditing.
    Rectify this by calling security_capable() when checking the open file's
    capabilities for config space reads.

    Reported-by: Eric Paris <>
    Tested-by: Dave Young <>
    Acked-by: James Morris <>
    Cc: Dave Airlie <>
    Cc: Alex Riesen <>
    Cc: Sedat Dilek <>
    Cc: Linus Torvalds <>
    Signed-off-by: Chris Wright <>
    Signed-off-by: James Morris <>
    Signed-off-by: Greg Kroah-Hartman <>

    drivers/pci/pci-sysfs.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/drivers/pci/pci-sysfs.c
    +++ b/drivers/pci/pci-sysfs.c
    @@ -23,6 +23,7 @@
    #include <linux/mm.h>
    #include <linux/fs.h>
    #include <linux/capability.h>
    +#include <linux/security.h>
    #include <linux/pci-aspm.h>
    #include <linux/slab.h>
    #include "pci.h"
    @@ -368,7 +369,7 @@ pci_read_config(struct file *filp, struc
    u8 *data = (u8*) buf;

    /* Several chips lock up trying to read undefined config space */
    - if (cap_raised(filp->f_cred->cap_effective, CAP_SYS_ADMIN)) {
    + if (security_capable(filp->f_cred, CAP_SYS_ADMIN) == 0) {
    size = dev->cfg_size;
    } else if (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
    size = 128;

     \ /
      Last update: 2011-02-22 23:33    [W:0.040 / U:163.396 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site