mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	lockdown: Lock down /proc/kcore
Disallow access to /proc/kcore when the kernel is locked down to prevent access to cryptographic data. This is limited to lockdown confidentiality mode and is still permitted in integrity mode. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Matthew Garrett <mjg59@google.com> Reviewed-by: Kees Cook <keescook@chromium.org> Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
		
							parent
							
								
									906357f77a
								
							
						
					
					
						commit
						02e935bf5b
					
				
					 3 changed files with 7 additions and 0 deletions
				
			
		|  | @ -31,6 +31,7 @@ | ||||||
| #include <linux/ioport.h> | #include <linux/ioport.h> | ||||||
| #include <linux/memory.h> | #include <linux/memory.h> | ||||||
| #include <linux/sched/task.h> | #include <linux/sched/task.h> | ||||||
|  | #include <linux/security.h> | ||||||
| #include <asm/sections.h> | #include <asm/sections.h> | ||||||
| #include "internal.h" | #include "internal.h" | ||||||
| 
 | 
 | ||||||
|  | @ -545,6 +546,10 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos) | ||||||
| 
 | 
 | ||||||
| static int open_kcore(struct inode *inode, struct file *filp) | static int open_kcore(struct inode *inode, struct file *filp) | ||||||
| { | { | ||||||
|  | 	int ret = security_locked_down(LOCKDOWN_KCORE); | ||||||
|  | 
 | ||||||
|  | 	if (ret) | ||||||
|  | 		return ret; | ||||||
| 	if (!capable(CAP_SYS_RAWIO)) | 	if (!capable(CAP_SYS_RAWIO)) | ||||||
| 		return -EPERM; | 		return -EPERM; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -116,6 +116,7 @@ enum lockdown_reason { | ||||||
| 	LOCKDOWN_MODULE_PARAMETERS, | 	LOCKDOWN_MODULE_PARAMETERS, | ||||||
| 	LOCKDOWN_MMIOTRACE, | 	LOCKDOWN_MMIOTRACE, | ||||||
| 	LOCKDOWN_INTEGRITY_MAX, | 	LOCKDOWN_INTEGRITY_MAX, | ||||||
|  | 	LOCKDOWN_KCORE, | ||||||
| 	LOCKDOWN_CONFIDENTIALITY_MAX, | 	LOCKDOWN_CONFIDENTIALITY_MAX, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -31,6 +31,7 @@ static char *lockdown_reasons[LOCKDOWN_CONFIDENTIALITY_MAX+1] = { | ||||||
| 	[LOCKDOWN_MODULE_PARAMETERS] = "unsafe module parameters", | 	[LOCKDOWN_MODULE_PARAMETERS] = "unsafe module parameters", | ||||||
| 	[LOCKDOWN_MMIOTRACE] = "unsafe mmio", | 	[LOCKDOWN_MMIOTRACE] = "unsafe mmio", | ||||||
| 	[LOCKDOWN_INTEGRITY_MAX] = "integrity", | 	[LOCKDOWN_INTEGRITY_MAX] = "integrity", | ||||||
|  | 	[LOCKDOWN_KCORE] = "/proc/kcore access", | ||||||
| 	[LOCKDOWN_CONFIDENTIALITY_MAX] = "confidentiality", | 	[LOCKDOWN_CONFIDENTIALITY_MAX] = "confidentiality", | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 David Howells
						David Howells