diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-05-30 13:30:51 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-05-31 13:11:54 -0400 |
commit | e5467859f7f79b69fc49004403009dfdba3bec53 (patch) | |
tree | 73b011daf79eeddd61bbcaf65cd197b5e5f6f149 /include/linux/security.h | |
parent | d007794a182bc072a7b7479909dbd0d67ba341be (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.h | 36 |
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); | |||
87 | extern int cap_inode_need_killpriv(struct dentry *dentry); | 87 | extern int cap_inode_need_killpriv(struct dentry *dentry); |
88 | extern int cap_inode_killpriv(struct dentry *dentry); | 88 | extern int cap_inode_killpriv(struct dentry *dentry); |
89 | extern int cap_mmap_addr(unsigned long addr); | 89 | extern int cap_mmap_addr(unsigned long addr); |
90 | extern int cap_file_mmap(struct file *file, unsigned long reqprot, | 90 | extern 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); | ||
93 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); | 92 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); |
94 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, | 93 | extern 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); | |||
1744 | int security_file_alloc(struct file *file); | 1745 | int security_file_alloc(struct file *file); |
1745 | void security_file_free(struct file *file); | 1746 | void security_file_free(struct file *file); |
1746 | int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg); | 1747 | int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
1747 | int security_file_mmap(struct file *file, unsigned long reqprot, | 1748 | int 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); | 1750 | int security_mmap_addr(unsigned long addr); |
1750 | int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, | 1751 | int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, |
1751 | unsigned long prot); | 1752 | unsigned long prot); |
1752 | int security_file_lock(struct file *file, unsigned int cmd); | 1753 | int 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 | ||
2185 | static inline int security_file_mmap(struct file *file, unsigned long reqprot, | 2186 | static 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 | |||
2193 | static inline int security_mmap_addr(unsigned long addr) | ||
2190 | { | 2194 | { |
2191 | return cap_mmap_addr(addr); | 2195 | return cap_mmap_addr(addr); |
2192 | } | 2196 | } |