mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	capabilities: do not drop CAP_SETPCAP from the initial task
In olden' days of yore CAP_SETPCAP had special meaning for the init task. We actually have code to make sure that CAP_SETPCAP wasn't in pE of things using the init_cred. But CAP_SETPCAP isn't so special any more and we don't have a reason to special case dropping it for init or kthreads.... Signed-off-by: Eric Paris <eparis@redhat.com> Acked-by: Andrew G. Morgan <morgan@kernel.org> Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
		
							parent
							
								
									4bf2ea77db
								
							
						
					
					
						commit
						ffa8e59df0
					
				
					 2 changed files with 4 additions and 4 deletions
				
			
		|  | @ -412,7 +412,6 @@ extern const kernel_cap_t __cap_init_eff_set; | |||
| 
 | ||||
| # define CAP_EMPTY_SET    ((kernel_cap_t){{ 0, 0 }}) | ||||
| # define CAP_FULL_SET     ((kernel_cap_t){{ ~0, ~0 }}) | ||||
| # define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }}) | ||||
| # define CAP_FS_SET       ((kernel_cap_t){{ CAP_FS_MASK_B0 \ | ||||
| 				    | CAP_TO_MASK(CAP_LINUX_IMMUTABLE), \ | ||||
| 				    CAP_FS_MASK_B1 } }) | ||||
|  | @ -423,10 +422,10 @@ extern const kernel_cap_t __cap_init_eff_set; | |||
| #endif /* _KERNEL_CAPABILITY_U32S != 2 */ | ||||
| 
 | ||||
| #define CAP_INIT_INH_SET    CAP_EMPTY_SET | ||||
| #define CAP_INIT_EFF_SET    CAP_FULL_SET | ||||
| 
 | ||||
| # define cap_clear(c)         do { (c) = __cap_empty_set; } while (0) | ||||
| # define cap_set_full(c)      do { (c) = __cap_full_set; } while (0) | ||||
| # define cap_set_init_eff(c)  do { (c) = __cap_init_eff_set; } while (0) | ||||
| 
 | ||||
| #define cap_raise(c, flag)  ((c).cap[CAP_TO_INDEX(flag)] |= CAP_TO_MASK(flag)) | ||||
| #define cap_lower(c, flag)  ((c).cap[CAP_TO_INDEX(flag)] &= ~CAP_TO_MASK(flag)) | ||||
|  | @ -547,6 +546,9 @@ extern bool capable(int cap); | |||
| extern bool ns_capable(struct user_namespace *ns, int cap); | ||||
| extern bool task_ns_capable(struct task_struct *t, int cap); | ||||
| 
 | ||||
| extern const kernel_cap_t __cap_empty_set; | ||||
| extern const kernel_cap_t __cap_full_set; | ||||
| 
 | ||||
| /**
 | ||||
|  * nsown_capable - Check superior capability to one's own user_ns | ||||
|  * @cap: The capability in question | ||||
|  |  | |||
|  | @ -23,11 +23,9 @@ | |||
| 
 | ||||
| const kernel_cap_t __cap_empty_set = CAP_EMPTY_SET; | ||||
| const kernel_cap_t __cap_full_set = CAP_FULL_SET; | ||||
| const kernel_cap_t __cap_init_eff_set = CAP_INIT_EFF_SET; | ||||
| 
 | ||||
| EXPORT_SYMBOL(__cap_empty_set); | ||||
| EXPORT_SYMBOL(__cap_full_set); | ||||
| EXPORT_SYMBOL(__cap_init_eff_set); | ||||
| 
 | ||||
| int file_caps_enabled = 1; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Eric Paris
						Eric Paris