Make /dev/mem configurable, as we don't want it.
Signed-off-by: Brian Swetland <swetland@google.com>
This commit is contained in:
@@ -6,6 +6,19 @@ menu "Character devices"
|
|||||||
|
|
||||||
source "drivers/tty/Kconfig"
|
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
|
config DEVKMEM
|
||||||
bool "/dev/kmem virtual device support"
|
bool "/dev/kmem virtual device support"
|
||||||
default y
|
default y
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ static inline int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_DEVMEM) || defined(CONFIG_DEVKMEM)
|
||||||
#ifdef CONFIG_STRICT_DEVMEM
|
#ifdef CONFIG_STRICT_DEVMEM
|
||||||
static inline int range_is_allowed(unsigned long pfn, unsigned long size)
|
static inline int range_is_allowed(unsigned long pfn, unsigned long size)
|
||||||
{
|
{
|
||||||
@@ -81,7 +82,9 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEVMEM
|
||||||
void __weak unxlate_dev_mem_ptr(unsigned long phys, void *addr)
|
void __weak unxlate_dev_mem_ptr(unsigned long phys, void *addr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -208,6 +211,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
|
|||||||
*ppos += written;
|
*ppos += written;
|
||||||
return written;
|
return written;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_DEVMEM */
|
||||||
|
|
||||||
|
#if defined(CONFIG_DEVMEM) || defined(CONFIG_DEVKMEM)
|
||||||
|
|
||||||
int __weak phys_mem_access_prot_allowed(struct file *file,
|
int __weak phys_mem_access_prot_allowed(struct file *file,
|
||||||
unsigned long pfn, unsigned long size, pgprot_t *vma_prot)
|
unsigned long pfn, unsigned long size, pgprot_t *vma_prot)
|
||||||
@@ -329,6 +335,7 @@ static int mmap_mem(struct file *file, struct vm_area_struct *vma)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_DEVMEM */
|
||||||
|
|
||||||
#ifdef CONFIG_DEVKMEM
|
#ifdef CONFIG_DEVKMEM
|
||||||
static int mmap_kmem(struct file *file, struct vm_area_struct *vma)
|
static int mmap_kmem(struct file *file, struct vm_area_struct *vma)
|
||||||
@@ -693,6 +700,8 @@ static loff_t null_lseek(struct file *file, loff_t offset, int orig)
|
|||||||
return file->f_pos = 0;
|
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
|
* 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,
|
* check against negative addresses: they are ok. The return value is weird,
|
||||||
@@ -726,10 +735,14 @@ static loff_t memory_lseek(struct file *file, loff_t offset, int orig)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_DEVMEM) || defined(CONFIG_DEVKMEM) || defined(CONFIG_DEVPORT)
|
||||||
static int open_port(struct inode * inode, struct file * filp)
|
static int open_port(struct inode * inode, struct file * filp)
|
||||||
{
|
{
|
||||||
return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
|
return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#define zero_lseek null_lseek
|
#define zero_lseek null_lseek
|
||||||
#define full_lseek null_lseek
|
#define full_lseek null_lseek
|
||||||
@@ -739,6 +752,7 @@ static int open_port(struct inode * inode, struct file * filp)
|
|||||||
#define open_kmem open_mem
|
#define open_kmem open_mem
|
||||||
#define open_oldmem open_mem
|
#define open_oldmem open_mem
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEVMEM
|
||||||
static const struct file_operations mem_fops = {
|
static const struct file_operations mem_fops = {
|
||||||
.llseek = memory_lseek,
|
.llseek = memory_lseek,
|
||||||
.read = read_mem,
|
.read = read_mem,
|
||||||
@@ -747,6 +761,7 @@ static const struct file_operations mem_fops = {
|
|||||||
.open = open_mem,
|
.open = open_mem,
|
||||||
.get_unmapped_area = get_unmapped_area_mem,
|
.get_unmapped_area = get_unmapped_area_mem,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DEVKMEM
|
#ifdef CONFIG_DEVKMEM
|
||||||
static const struct file_operations kmem_fops = {
|
static const struct file_operations kmem_fops = {
|
||||||
@@ -850,7 +865,9 @@ static const struct memdev {
|
|||||||
const struct file_operations *fops;
|
const struct file_operations *fops;
|
||||||
struct backing_dev_info *dev_info;
|
struct backing_dev_info *dev_info;
|
||||||
} devlist[] = {
|
} devlist[] = {
|
||||||
|
#ifdef CONFIG_DEVMEM
|
||||||
[1] = { "mem", 0, &mem_fops, &directly_mappable_cdev_bdi },
|
[1] = { "mem", 0, &mem_fops, &directly_mappable_cdev_bdi },
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_DEVKMEM
|
#ifdef CONFIG_DEVKMEM
|
||||||
[2] = { "kmem", 0, &kmem_fops, &directly_mappable_cdev_bdi },
|
[2] = { "kmem", 0, &kmem_fops, &directly_mappable_cdev_bdi },
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user