aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/security.h
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-05-30 13:30:51 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-05-31 13:11:54 -0400
commite5467859f7f79b69fc49004403009dfdba3bec53 (patch)
tree73b011daf79eeddd61bbcaf65cd197b5e5f6f149 /include/linux/security.h
parentd007794a182bc072a7b7479909dbd0d67ba341be (diff)
split ->file_mmap() into ->mmap_addr()/->mmap_file()
... i.e. file-dependent and address-dependent checks. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux/security.h')
-rw-r--r--include/linux/security.h36
1 files changed, 20 insertions, 16 deletions
diff --git a/include/linux/security.h b/include/linux/security.h
index 4ad59c9fa731..f1bae0963ddc 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -87,9 +87,8 @@ extern int cap_inode_removexattr(struct dentry *dentry, const char *name);
87extern int cap_inode_need_killpriv(struct dentry *dentry); 87extern int cap_inode_need_killpriv(struct dentry *dentry);
88extern int cap_inode_killpriv(struct dentry *dentry); 88extern int cap_inode_killpriv(struct dentry *dentry);
89extern int cap_mmap_addr(unsigned long addr); 89extern int cap_mmap_addr(unsigned long addr);
90extern int cap_file_mmap(struct file *file, unsigned long reqprot, 90extern int cap_mmap_file(struct file *file, unsigned long reqprot,
91 unsigned long prot, unsigned long flags, 91 unsigned long prot, unsigned long flags);
92 unsigned long addr, unsigned long addr_only);
93extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); 92extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags);
94extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, 93extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
95 unsigned long arg4, unsigned long arg5); 94 unsigned long arg4, unsigned long arg5);
@@ -587,15 +586,17 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
587 * simple integer value. When @arg represents a user space pointer, it 586 * simple integer value. When @arg represents a user space pointer, it
588 * should never be used by the security module. 587 * should never be used by the security module.
589 * Return 0 if permission is granted. 588 * Return 0 if permission is granted.
590 * @file_mmap : 589 * @mmap_addr :
590 * Check permissions for a mmap operation at @addr.
591 * @addr contains virtual address that will be used for the operation.
592 * Return 0 if permission is granted.
593 * @mmap_file :
591 * Check permissions for a mmap operation. The @file may be NULL, e.g. 594 * Check permissions for a mmap operation. The @file may be NULL, e.g.
592 * if mapping anonymous memory. 595 * if mapping anonymous memory.
593 * @file contains the file structure for file to map (may be NULL). 596 * @file contains the file structure for file to map (may be NULL).
594 * @reqprot contains the protection requested by the application. 597 * @reqprot contains the protection requested by the application.
595 * @prot contains the protection that will be applied by the kernel. 598 * @prot contains the protection that will be applied by the kernel.
596 * @flags contains the operational flags. 599 * @flags contains the operational flags.
597 * @addr contains virtual address that will be used for the operation.
598 * @addr_only contains a boolean: 0 if file-backed VMA, otherwise 1.
599 * Return 0 if permission is granted. 600 * Return 0 if permission is granted.
600 * @file_mprotect: 601 * @file_mprotect:
601 * Check permissions before changing memory access permissions. 602 * Check permissions before changing memory access permissions.
@@ -1482,10 +1483,10 @@ struct security_operations {
1482 void (*file_free_security) (struct file *file); 1483 void (*file_free_security) (struct file *file);
1483 int (*file_ioctl) (struct file *file, unsigned int cmd, 1484 int (*file_ioctl) (struct file *file, unsigned int cmd,
1484 unsigned long arg); 1485 unsigned long arg);
1485 int (*file_mmap) (struct file *file, 1486 int (*mmap_addr) (unsigned long addr);
1487 int (*mmap_file) (struct file *file,
1486 unsigned long reqprot, unsigned long prot, 1488 unsigned long reqprot, unsigned long prot,
1487 unsigned long flags, unsigned long addr, 1489 unsigned long flags);
1488 unsigned long addr_only);
1489 int (*file_mprotect) (struct vm_area_struct *vma, 1490 int (*file_mprotect) (struct vm_area_struct *vma,
1490 unsigned long reqprot, 1491 unsigned long reqprot,
1491 unsigned long prot); 1492 unsigned long prot);
@@ -1744,9 +1745,9 @@ int security_file_permission(struct file *file, int mask);
1744int security_file_alloc(struct file *file); 1745int security_file_alloc(struct file *file);
1745void security_file_free(struct file *file); 1746void security_file_free(struct file *file);
1746int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg); 1747int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
1747int security_file_mmap(struct file *file, unsigned long reqprot, 1748int security_mmap_file(struct file *file, unsigned long reqprot,
1748 unsigned long prot, unsigned long flags, 1749 unsigned long prot, unsigned long flags);
1749 unsigned long addr, unsigned long addr_only); 1750int security_mmap_addr(unsigned long addr);
1750int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, 1751int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
1751 unsigned long prot); 1752 unsigned long prot);
1752int security_file_lock(struct file *file, unsigned int cmd); 1753int security_file_lock(struct file *file, unsigned int cmd);
@@ -2182,11 +2183,14 @@ static inline int security_file_ioctl(struct file *file, unsigned int cmd,
2182 return 0; 2183 return 0;
2183} 2184}
2184 2185
2185static inline int security_file_mmap(struct file *file, unsigned long reqprot, 2186static inline int security_mmap_file(struct file *file, unsigned long reqprot,
2186 unsigned long prot, 2187 unsigned long prot,
2187 unsigned long flags, 2188 unsigned long flags)
2188 unsigned long addr, 2189{
2189 unsigned long addr_only) 2190 return 0;
2191}
2192
2193static inline int security_mmap_addr(unsigned long addr)
2190{ 2194{
2191 return cap_mmap_addr(addr); 2195 return cap_mmap_addr(addr);
2192} 2196}