[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH RFC PKS/PMEM 57/58] nvdimm/pmem: Stray access protection for pmem->virt_addr
 
- To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,	Thomas Gleixner <tglx@xxxxxxxxxxxxx>,	Ingo Molnar <mingo@xxxxxxxxxx>,	Borislav Petkov <bp@xxxxxxxxx>,	Andy Lutomirski <luto@xxxxxxxxxx>,	Peter Zijlstra <peterz@xxxxxxxxxxxxx>
 
- From: ira.weiny@xxxxxxxxx
 
- Date: Fri,  9 Oct 2020 12:50:32 -0700
 
- Cc: Ira Weiny <ira.weiny@xxxxxxxxx>,	x86@xxxxxxxxxx,	Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,	Dan Williams <dan.j.williams@xxxxxxxxx>,	Fenghua Yu <fenghua.yu@xxxxxxxxx>,	linux-doc@xxxxxxxxxxxxxxx,	linux-kernel@xxxxxxxxxxxxxxx,	linux-nvdimm@xxxxxxxxxxxx,	linux-fsdevel@xxxxxxxxxxxxxxx,	linux-mm@xxxxxxxxx,	linux-kselftest@xxxxxxxxxxxxxxx,	linuxppc-dev@xxxxxxxxxxxxxxxx,	kvm@xxxxxxxxxxxxxxx,	netdev@xxxxxxxxxxxxxxx,	bpf@xxxxxxxxxxxxxxx,	kexec@xxxxxxxxxxxxxxxxxxx,	linux-bcache@xxxxxxxxxxxxxxx,	linux-mtd@xxxxxxxxxxxxxxxxxxx,	devel@xxxxxxxxxxxxxxxxxxxx,	linux-efi@xxxxxxxxxxxxxxx,	linux-mmc@xxxxxxxxxxxxxxx,	linux-scsi@xxxxxxxxxxxxxxx,	target-devel@xxxxxxxxxxxxxxx,	linux-nfs@xxxxxxxxxxxxxxx,	ceph-devel@xxxxxxxxxxxxxxx,	linux-ext4@xxxxxxxxxxxxxxx,	linux-aio@xxxxxxxxx,	io-uring@xxxxxxxxxxxxxxx,	linux-erofs@xxxxxxxxxxxxxxxx,	linux-um@xxxxxxxxxxxxxxxxxxx,	linux-ntfs-dev@xxxxxxxxxxxxxxxxxxxxx,	reiserfs-devel@xxxxxxxxxxxxxxx,	linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx,	linux-nilfs@xxxxxxxxxxxxxxx,	cluster-devel@xxxxxxxxxx,	ecryptfs@xxxxxxxxxxxxxxx,	linux-cifs@xxxxxxxxxxxxxxx,	linux-btrfs@xxxxxxxxxxxxxxx,	linux-afs@xxxxxxxxxxxxxxxxxxx,	linux-rdma@xxxxxxxxxxxxxxx,	amd-gfx@xxxxxxxxxxxxxxxxxxxxx,	dri-devel@xxxxxxxxxxxxxxxxxxxxx,	intel-gfx@xxxxxxxxxxxxxxxxxxxxx,	drbd-dev@xxxxxxxxxxxxxxxx,	linux-block@xxxxxxxxxxxxxxx,	xen-devel@xxxxxxxxxxxxxxxxxxxx,	linux-cachefs@xxxxxxxxxx,	samba-technical@xxxxxxxxxxxxxxx,	intel-wired-lan@xxxxxxxxxxxxxxxx
 
- Delivery-date: Fri, 09 Oct 2020 19:54:14 +0000
 
- Ironport-sdr: H8bQ2F75ooVY2NRJCpX/U8qZHkgTS9+a84f9GqjJMTf/7sPa785KonRZXlZZdluWAAn3WcHYds KcVwzJGbiUfg==
 
- Ironport-sdr: src9VKOvZKZdzmhAmOplZF/CbXKWViy2IZEce2k3Dk75HVdMa01qWYEbu8ywq24hGpakhLlrfI iYxmJaXcxtuw==
 
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
 
 
 
From: Ira Weiny <ira.weiny@xxxxxxxxx>
The pmem driver uses a cached virtual address to access its memory
directly.  Because the nvdimm driver is well aware of the special
protections it has mapped memory with, we call dev_access_[en|dis]able()
around the direct pmem->virt_addr (pmem_addr) usage instead of the
unnecessary overhead of trying to get a page to kmap.
Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx>
---
 drivers/nvdimm/pmem.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index fab29b514372..e4dc1ae990fc 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -148,7 +148,9 @@ static blk_status_t pmem_do_read(struct pmem_device *pmem,
        if (unlikely(is_bad_pmem(&pmem->bb, sector, len)))
                return BLK_STS_IOERR;
 
+       dev_access_enable(false);
        rc = read_pmem(page, page_off, pmem_addr, len);
+       dev_access_disable(false);
        flush_dcache_page(page);
        return rc;
 }
@@ -180,11 +182,13 @@ static blk_status_t pmem_do_write(struct pmem_device 
*pmem,
         * after clear poison.
         */
        flush_dcache_page(page);
+       dev_access_enable(false);
        write_pmem(pmem_addr, page, page_off, len);
        if (unlikely(bad_pmem)) {
                rc = pmem_clear_poison(pmem, pmem_off, len);
                write_pmem(pmem_addr, page, page_off, len);
        }
+       dev_access_disable(false);
 
        return rc;
 }
-- 
2.28.0.rc0.12.gb6a658bd00c9
 
    
     |