* [PATCH v2 0/2] Add STRICT_DEVMEM support on RISC-V
@ 2020-06-22 6:33 Zong Li
2020-06-22 6:33 ` [PATCH v2 1/2] riscv: Support CONFIG_STRICT_DEVMEM Zong Li
2020-06-22 6:33 ` [PATCH v2 2/2] riscv: mm: refine the Makefile Zong Li
0 siblings, 2 replies; 3+ messages in thread
From: Zong Li @ 2020-06-22 6:33 UTC (permalink / raw)
To: paul.walmsley, palmer, mick, linux-riscv, linux-kernel; +Cc: Zong Li
This patch set adds devmem_is_allowed to support STRICT_DEVMEM. In
devmem_is_allowed, it invokes page_is_ram to check the specific
address whether registered as System RAM in iomem_resource. The resource
initialization is in kexec/kdump patch series which is reviewing,
page_is_ram checking is no use until it is merged.
Zong Li (2):
riscv: Support CONFIG_STRICT_DEVMEM
riscv: mm: refine the Makefile
arch/riscv/Kconfig | 1 +
arch/riscv/include/asm/io.h | 2 ++
arch/riscv/mm/Makefile | 5 +----
arch/riscv/mm/mmap.c | 24 ++++++++++++++++++++++++
4 files changed, 28 insertions(+), 4 deletions(-)
create mode 100644 arch/riscv/mm/mmap.c
--
2.27.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 1/2] riscv: Support CONFIG_STRICT_DEVMEM
2020-06-22 6:33 [PATCH v2 0/2] Add STRICT_DEVMEM support on RISC-V Zong Li
@ 2020-06-22 6:33 ` Zong Li
2020-06-22 6:33 ` [PATCH v2 2/2] riscv: mm: refine the Makefile Zong Li
1 sibling, 0 replies; 3+ messages in thread
From: Zong Li @ 2020-06-22 6:33 UTC (permalink / raw)
To: paul.walmsley, palmer, mick, linux-riscv, linux-kernel; +Cc: Zong Li
Implement the 'devmem_is_allowed()' interface for RISC-V, like some of
other architectures have done. It will be called from range_is_allowed()
when userpsace attempts to access /dev/mem.
Access to exclusive IOMEM and kernel RAM is denied unless
CONFIG_STRICT_DEVMEM is set to 'n'.
Test it by devmem, the result as follows:
- CONFIG_STRICT_DEVMEM=y
$ devmem 0x10010000
0x00000000
$ devmem 0x80200000
0x0000106F
- CONFIG_STRICT_DEVMEM is not set
$ devmem 0x10010000
devmem: mmap: Operation not permitted
$ devmem 0x80200000
devmem: mmap: Operation not permitted
Changes in v2:
- Move implementations out from mm/init.c. Suggested by Nick Kossifidis.
Signed-off-by: Zong Li <zong.li@sifive.com>
---
arch/riscv/Kconfig | 1 +
arch/riscv/include/asm/io.h | 2 ++
arch/riscv/mm/Makefile | 1 +
arch/riscv/mm/mmap.c | 24 ++++++++++++++++++++++++
4 files changed, 28 insertions(+)
create mode 100644 arch/riscv/mm/mmap.c
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 089293e4ad46..c6569939f7ba 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -17,6 +17,7 @@ config RISCV
select ARCH_HAS_BINFMT_FLAT
select ARCH_HAS_DEBUG_VIRTUAL if MMU
select ARCH_HAS_DEBUG_WX
+ select ARCH_HAS_DEVMEM_IS_ALLOWED
select ARCH_HAS_GCOV_PROFILE_ALL
select ARCH_HAS_GIGANTIC_PAGE
select ARCH_HAS_MMIOWB
diff --git a/arch/riscv/include/asm/io.h b/arch/riscv/include/asm/io.h
index 3835c3295dc5..04ac65ab93ce 100644
--- a/arch/riscv/include/asm/io.h
+++ b/arch/riscv/include/asm/io.h
@@ -147,4 +147,6 @@ __io_writes_outs(outs, u64, q, __io_pbr(), __io_paw())
#include <asm-generic/io.h>
+extern int devmem_is_allowed(unsigned long pfn);
+
#endif /* _ASM_RISCV_IO_H */
diff --git a/arch/riscv/mm/Makefile b/arch/riscv/mm/Makefile
index 363ef01c30b1..4530ad52f1d6 100644
--- a/arch/riscv/mm/Makefile
+++ b/arch/riscv/mm/Makefile
@@ -10,6 +10,7 @@ obj-y += extable.o
obj-$(CONFIG_MMU) += fault.o pageattr.o
obj-y += cacheflush.o
obj-y += context.o
+obj-y += mmap.o
ifeq ($(CONFIG_MMU),y)
obj-$(CONFIG_SMP) += tlbflush.o
diff --git a/arch/riscv/mm/mmap.c b/arch/riscv/mm/mmap.c
new file mode 100644
index 000000000000..095fc82897b1
--- /dev/null
+++ b/arch/riscv/mm/mmap.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2020 SiFive
+ */
+
+#ifdef CONFIG_STRICT_DEVMEM
+#include <linux/ioport.h>
+
+/*
+ * devmem_is_allowed() checks to see if /dev/mem access to a certain address
+ * is valid. The argument is a physical page number.
+ *
+ * Disallow access to system RAM as well as device-exclusive MMIO regions.
+ * This effectively disable read()/write() on /dev/mem.
+ */
+int devmem_is_allowed(unsigned long pfn)
+{
+ if (iomem_is_exclusive(pfn << PAGE_SHIFT))
+ return 0;
+ if (!page_is_ram(pfn))
+ return 1;
+ return 0;
+}
+#endif
--
2.27.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v2 2/2] riscv: mm: refine the Makefile
2020-06-22 6:33 [PATCH v2 0/2] Add STRICT_DEVMEM support on RISC-V Zong Li
2020-06-22 6:33 ` [PATCH v2 1/2] riscv: Support CONFIG_STRICT_DEVMEM Zong Li
@ 2020-06-22 6:33 ` Zong Li
1 sibling, 0 replies; 3+ messages in thread
From: Zong Li @ 2020-06-22 6:33 UTC (permalink / raw)
To: paul.walmsley, palmer, mick, linux-riscv, linux-kernel; +Cc: Zong Li
Put all objects which selected by obj-y together.
Signed-off-by: Zong Li <zong.li@sifive.com>
---
arch/riscv/mm/Makefile | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/arch/riscv/mm/Makefile b/arch/riscv/mm/Makefile
index 4530ad52f1d6..7f95f66e135a 100644
--- a/arch/riscv/mm/Makefile
+++ b/arch/riscv/mm/Makefile
@@ -5,12 +5,8 @@ ifdef CONFIG_FTRACE
CFLAGS_REMOVE_init.o = -pg
endif
-obj-y += init.o
-obj-y += extable.o
+obj-y += init.o extable.o cacheflush.o context.o mmap.o
obj-$(CONFIG_MMU) += fault.o pageattr.o
-obj-y += cacheflush.o
-obj-y += context.o
-obj-y += mmap.o
ifeq ($(CONFIG_MMU),y)
obj-$(CONFIG_SMP) += tlbflush.o
--
2.27.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-06-22 6:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-22 6:33 [PATCH v2 0/2] Add STRICT_DEVMEM support on RISC-V Zong Li
2020-06-22 6:33 ` [PATCH v2 1/2] riscv: Support CONFIG_STRICT_DEVMEM Zong Li
2020-06-22 6:33 ` [PATCH v2 2/2] riscv: mm: refine the Makefile Zong Li
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.