Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f945a126 authored by Robert Love's avatar Robert Love Committed by Ruchi Kandoi
Browse files

Make /dev/mem configurable, as we don't want it.

parent b2776bf7
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -6,6 +6,19 @@ menu "Character devices"

source "drivers/tty/Kconfig"

config DEVMEM
	bool "Memory device driver"
	default y
	help
	  The memory driver provides two character devices, mem and kmem, which
	  provide access to the system's memory. The mem device is a view of
	  physical memory, and each byte in the device corresponds to the
	  matching physical address. The kmem device is the same as mem, but
	  the addresses correspond to the kernel's virtual address space rather
	  than physical memory. These devices are standard parts of a Linux
	  system and most users should say Y here. You might say N if very
	  security conscience or memory is tight.

config DEVKMEM
	bool "/dev/kmem virtual device support"
	default y
+17 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ static inline int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
}
#endif

#if defined(CONFIG_DEVMEM) || defined(CONFIG_DEVKMEM)
#ifdef CONFIG_STRICT_DEVMEM
static inline int range_is_allowed(unsigned long pfn, unsigned long size)
{
@@ -83,7 +84,9 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
	return 1;
}
#endif
#endif

#ifdef CONFIG_DEVMEM
void __weak unxlate_dev_mem_ptr(unsigned long phys, void *addr)
{
}
@@ -216,6 +219,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
	*ppos += written;
	return written;
}
#endif	/* CONFIG_DEVMEM */

#if defined(CONFIG_DEVMEM) || defined(CONFIG_DEVKMEM)

int __weak phys_mem_access_prot_allowed(struct file *file,
	unsigned long pfn, unsigned long size, pgprot_t *vma_prot)
@@ -337,6 +343,7 @@ static int mmap_mem(struct file *file, struct vm_area_struct *vma)
	}
	return 0;
}
#endif	/* CONFIG_DEVMEM */

#ifdef CONFIG_DEVKMEM
static int mmap_kmem(struct file *file, struct vm_area_struct *vma)
@@ -667,6 +674,8 @@ static loff_t null_lseek(struct file *file, loff_t offset, int orig)
	return file->f_pos = 0;
}

#if defined(CONFIG_DEVMEM) || defined(CONFIG_DEVKMEM) || defined(CONFIG_DEVPORT)

/*
 * The memory devices use the full 32/64 bits of the offset, and so we cannot
 * check against negative addresses: they are ok. The return value is weird,
@@ -700,10 +709,14 @@ static loff_t memory_lseek(struct file *file, loff_t offset, int orig)
	return ret;
}

#endif

#if defined(CONFIG_DEVMEM) || defined(CONFIG_DEVKMEM) || defined(CONFIG_DEVPORT)
static int open_port(struct inode *inode, struct file *filp)
{
	return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
}
#endif

#define zero_lseek	null_lseek
#define full_lseek      null_lseek
@@ -712,6 +725,7 @@ static int open_port(struct inode *inode, struct file *filp)
#define open_mem	open_port
#define open_kmem	open_mem

#ifdef CONFIG_DEVMEM
static const struct file_operations mem_fops = {
	.llseek		= memory_lseek,
	.read		= read_mem,
@@ -720,6 +734,7 @@ static const struct file_operations mem_fops = {
	.open		= open_mem,
	.get_unmapped_area = get_unmapped_area_mem,
};
#endif

#ifdef CONFIG_DEVKMEM
static const struct file_operations kmem_fops = {
@@ -782,7 +797,9 @@ static const struct memdev {
	const struct file_operations *fops;
	struct backing_dev_info *dev_info;
} devlist[] = {
#ifdef CONFIG_DEVMEM
	 [1] = { "mem", 0, &mem_fops, &directly_mappable_cdev_bdi },
#endif
#ifdef CONFIG_DEVKMEM
	 [2] = { "kmem", 0, &kmem_fops, &directly_mappable_cdev_bdi },
#endif