forked from mirrors/linux
		
	pidfs: check for valid ioctl commands
Prior to doing any work, check whether the provided ioctl command is supported by pidfs. Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
		
							parent
							
								
									dc14abd337
								
							
						
					
					
						commit
						8ce3528188
					
				
					 1 changed files with 24 additions and 0 deletions
				
			
		
							
								
								
									
										24
									
								
								fs/pidfs.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								fs/pidfs.c
									
									
									
									
									
								
							| 
						 | 
					@ -264,6 +264,27 @@ static long pidfd_info(struct task_struct *task, unsigned int cmd, unsigned long
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static bool pidfs_ioctl_valid(unsigned int cmd)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						switch (cmd) {
 | 
				
			||||||
 | 
						case FS_IOC_GETVERSION:
 | 
				
			||||||
 | 
						case PIDFD_GET_CGROUP_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_INFO:
 | 
				
			||||||
 | 
						case PIDFD_GET_IPC_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_MNT_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_NET_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_TIME_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_UTS_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_USER_NAMESPACE:
 | 
				
			||||||
 | 
						case PIDFD_GET_PID_NAMESPACE:
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static long pidfd_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 | 
					static long pidfd_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct task_struct *task __free(put_task) = NULL;
 | 
						struct task_struct *task __free(put_task) = NULL;
 | 
				
			||||||
| 
						 | 
					@ -272,6 +293,9 @@ static long pidfd_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 | 
				
			||||||
	struct ns_common *ns_common = NULL;
 | 
						struct ns_common *ns_common = NULL;
 | 
				
			||||||
	struct pid_namespace *pid_ns;
 | 
						struct pid_namespace *pid_ns;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!pidfs_ioctl_valid(cmd))
 | 
				
			||||||
 | 
							return -ENOIOCTLCMD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cmd == FS_IOC_GETVERSION) {
 | 
						if (cmd == FS_IOC_GETVERSION) {
 | 
				
			||||||
		if (!arg)
 | 
							if (!arg)
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue