mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
PCI/switchtec: Add Gen4 MRPC GAS access permission check
Gen4 hardware provides new MRPC commands to read and write directly from any address in the PCI BAR (which Microsemi refers to as GAS). Since accessing BARs can be dangerous and break the driver, we don't want unprivileged users to have this ability. Therefore, require CAP_SYS_ADMIN for the local and remote GAS access MRPC commands. Privileged processes will already have access to the BAR through the sysfs resource file so this doesn't give userspace any capabilities it didn't already have. [logang@deltatee.com: rework commit message] Link: https://lore.kernel.org/r/20200106190337.2428-11-logang@deltatee.com Signed-off-by: Kelvin Cao <kelvin.cao@microchip.com> Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
4efa1d2e36
commit
ce7c88600b
@ -479,6 +479,12 @@ static ssize_t switchtec_dev_write(struct file *filp, const char __user *data,
|
||||
rc = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
if (((MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_WRITE) ||
|
||||
(MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_READ)) &&
|
||||
!capable(CAP_SYS_ADMIN)) {
|
||||
rc = -EPERM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
data += sizeof(stuser->cmd);
|
||||
rc = copy_from_user(&stuser->data, data, size - sizeof(stuser->cmd));
|
||||
|
@ -21,6 +21,11 @@
|
||||
#define SWITCHTEC_EVENT_FATAL BIT(4)
|
||||
|
||||
#define SWITCHTEC_DMA_MRPC_EN BIT(0)
|
||||
|
||||
#define MRPC_GAS_READ 0x29
|
||||
#define MRPC_GAS_WRITE 0x87
|
||||
#define MRPC_CMD_ID(x) ((x) & 0xffff)
|
||||
|
||||
enum {
|
||||
SWITCHTEC_GAS_MRPC_OFFSET = 0x0000,
|
||||
SWITCHTEC_GAS_TOP_CFG_OFFSET = 0x1000,
|
||||
|
Loading…
Reference in New Issue
Block a user