lkml.org 
[lkml]   [2023]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 15/16] dmaengine: idxd: add pid to exported sysfs attribute for opened file
    Date
    From: Dave Jiang <dave.jiang@intel.com>

    Provide the pid of the application for the opened file. This allows the
    monitor daemon to easily correlate which app opened the file and easily
    kill the app by pid if that is desired action.

    Tested-by: Tony Zhu <tony.zhu@intel.com>
    Signed-off-by: Dave Jiang <dave.jiang@intel.com>
    Co-developed-by: Fenghua Yu <fenghua.yu@intel.com>
    Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
    ---
    Documentation/ABI/stable/sysfs-driver-dma-idxd | 8 ++++++++
    drivers/dma/idxd/cdev.c | 11 +++++++++++
    2 files changed, 19 insertions(+)

    diff --git a/Documentation/ABI/stable/sysfs-driver-dma-idxd b/Documentation/ABI/stable/sysfs-driver-dma-idxd
    index 73ab86196a41..5d0df57f5298 100644
    --- a/Documentation/ABI/stable/sysfs-driver-dma-idxd
    +++ b/Documentation/ABI/stable/sysfs-driver-dma-idxd
    @@ -335,3 +335,11 @@ Description: Show the number of Completion Record (CR) faults failures that this
    driver cannot fault in the address for the CR. Typically this is caused
    by a bad address programmed in the submitted descriptor or a malicious
    submitter is using bad CR address on purpose.
    +
    +What: /sys/bus/dsa/devices/wq<m>.<n>/dsa<x>\!wq<m>.<n>/file<y>/pid
    +Date: Sept 14, 2022
    +KernelVersion: 6.4.0
    +Contact: dmaengine@vger.kernel.org
    +Description: Show the process id of the application that opened the file. This is
    + helpful information for a monitor daemon that wants to kill the
    + application that opened the file.
    diff --git a/drivers/dma/idxd/cdev.c b/drivers/dma/idxd/cdev.c
    index 9fc6565bf807..e124f0628f1c 100644
    --- a/drivers/dma/idxd/cdev.c
    +++ b/drivers/dma/idxd/cdev.c
    @@ -47,6 +47,7 @@ struct idxd_user_context {
    struct idxd_dev idxd_dev;
    u64 counters[COUNTER_MAX];
    int id;
    + pid_t pid;
    };

    static void idxd_cdev_evl_drain_pasid(struct idxd_wq *wq, u32 pasid);
    @@ -76,9 +77,18 @@ static ssize_t cr_fault_failures_show(struct device *dev,
    }
    static DEVICE_ATTR_RO(cr_fault_failures);

    +static ssize_t pid_show(struct device *dev, struct device_attribute *attr, char *buf)
    +{
    + struct idxd_user_context *ctx = dev_to_uctx(dev);
    +
    + return sysfs_emit(buf, "%u\n", ctx->pid);
    +}
    +static DEVICE_ATTR_RO(pid);
    +
    static struct attribute *cdev_file_attributes[] = {
    &dev_attr_cr_faults.attr,
    &dev_attr_cr_fault_failures.attr,
    + &dev_attr_pid.attr,
    NULL
    };

    @@ -236,6 +246,7 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp)

    ctx->wq = wq;
    filp->private_data = ctx;
    + ctx->pid = current->pid;

    if (device_user_pasid_enabled(idxd)) {
    sva = iommu_sva_bind_device(dev, current->mm);
    --
    2.37.1
    \
     
     \ /
      Last update: 2023-03-27 00:45    [W:8.722 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site