[PATCH] sysctl: remove the proc_dir_entry member for the sysctl tables
It isn't needed anymore, all of the users are gone, and all of the ctl_table initializers have been converted to use explicit names of the fields they are initializing. [akpm@osdl.org: NTFS fix] Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Acked-by: Stephen Smalley <sds@tycho.nsa.gov> Cc: James Morris <jmorris@namei.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									d912b0cc1a
								
							
						
					
					
						commit
						3fbfa98112
					
				| @ -73,14 +73,6 @@ int ntfs_sysctl(int add) | ||||
| 		sysctls_root_table = register_sysctl_table(sysctls_root); | ||||
| 		if (!sysctls_root_table) | ||||
| 			return -ENOMEM; | ||||
| #ifdef CONFIG_PROC_FS | ||||
| 		/*
 | ||||
| 		 * If the proc filesystem is in use and we are a module, need | ||||
| 		 * to set the owner of our proc entry to our module. In the | ||||
| 		 * non-modular case, THIS_MODULE is NULL, so this is ok. | ||||
| 		 */ | ||||
| 		ntfs_sysctls[0].de->owner = THIS_MODULE; | ||||
| #endif | ||||
| 	} else { | ||||
| 		BUG_ON(!sysctls_root_table); | ||||
| 		unregister_sysctl_table(sysctls_root_table); | ||||
|  | ||||
| @ -1025,7 +1025,6 @@ struct ctl_table | ||||
| 	ctl_table *parent;		/* Automatically set */ | ||||
| 	proc_handler *proc_handler;	/* Callback for text formatting */ | ||||
| 	ctl_handler *strategy;		/* Callback function for all r/w */ | ||||
| 	struct proc_dir_entry *de;	/* /proc control block */ | ||||
| 	void *extra1; | ||||
| 	void *extra2; | ||||
| }; | ||||
|  | ||||
| @ -261,7 +261,6 @@ static void dn_dev_sysctl_register(struct net_device *dev, struct dn_dev_parms * | ||||
| 	for(i = 0; i < ARRAY_SIZE(t->dn_dev_vars) - 1; i++) { | ||||
| 		long offset = (long)t->dn_dev_vars[i].data; | ||||
| 		t->dn_dev_vars[i].data = ((char *)parms) + offset; | ||||
| 		t->dn_dev_vars[i].de = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	if (dev) { | ||||
| @ -273,13 +272,9 @@ static void dn_dev_sysctl_register(struct net_device *dev, struct dn_dev_parms * | ||||
| 	} | ||||
| 
 | ||||
| 	t->dn_dev_dev[0].child = t->dn_dev_vars; | ||||
| 	t->dn_dev_dev[0].de = NULL; | ||||
| 	t->dn_dev_conf_dir[0].child = t->dn_dev_dev; | ||||
| 	t->dn_dev_conf_dir[0].de = NULL; | ||||
| 	t->dn_dev_proto_dir[0].child = t->dn_dev_conf_dir; | ||||
| 	t->dn_dev_proto_dir[0].de = NULL; | ||||
| 	t->dn_dev_root_dir[0].child = t->dn_dev_proto_dir; | ||||
| 	t->dn_dev_root_dir[0].de = NULL; | ||||
| 	t->dn_dev_vars[0].extra1 = (void *)dev; | ||||
| 
 | ||||
| 	t->sysctl_header = register_sysctl_table(t->dn_dev_root_dir); | ||||
|  | ||||
| @ -1576,7 +1576,6 @@ static void devinet_sysctl_register(struct in_device *in_dev, | ||||
| 		return; | ||||
| 	for (i = 0; i < ARRAY_SIZE(t->devinet_vars) - 1; i++) { | ||||
| 		t->devinet_vars[i].data += (char *)p - (char *)&ipv4_devconf; | ||||
| 		t->devinet_vars[i].de = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	if (dev) { | ||||
| @ -1598,13 +1597,9 @@ static void devinet_sysctl_register(struct in_device *in_dev, | ||||
| 
 | ||||
| 	t->devinet_dev[0].procname    = dev_name; | ||||
| 	t->devinet_dev[0].child	      = t->devinet_vars; | ||||
| 	t->devinet_dev[0].de	      = NULL; | ||||
| 	t->devinet_conf_dir[0].child  = t->devinet_dev; | ||||
| 	t->devinet_conf_dir[0].de     = NULL; | ||||
| 	t->devinet_proto_dir[0].child = t->devinet_conf_dir; | ||||
| 	t->devinet_proto_dir[0].de    = NULL; | ||||
| 	t->devinet_root_dir[0].child  = t->devinet_proto_dir; | ||||
| 	t->devinet_root_dir[0].de     = NULL; | ||||
| 
 | ||||
| 	t->sysctl_header = register_sysctl_table(t->devinet_root_dir); | ||||
| 	if (!t->sysctl_header) | ||||
|  | ||||
| @ -3998,7 +3998,6 @@ static void addrconf_sysctl_register(struct inet6_dev *idev, struct ipv6_devconf | ||||
| 		return; | ||||
| 	for (i=0; t->addrconf_vars[i].data; i++) { | ||||
| 		t->addrconf_vars[i].data += (char*)p - (char*)&ipv6_devconf; | ||||
| 		t->addrconf_vars[i].de = NULL; | ||||
| 		t->addrconf_vars[i].extra1 = idev; /* embedded; no ref */ | ||||
| 	} | ||||
| 	if (dev) { | ||||
| @ -4021,13 +4020,9 @@ static void addrconf_sysctl_register(struct inet6_dev *idev, struct ipv6_devconf | ||||
| 	t->addrconf_dev[0].procname = dev_name; | ||||
| 
 | ||||
| 	t->addrconf_dev[0].child = t->addrconf_vars; | ||||
| 	t->addrconf_dev[0].de = NULL; | ||||
| 	t->addrconf_conf_dir[0].child = t->addrconf_dev; | ||||
| 	t->addrconf_conf_dir[0].de = NULL; | ||||
| 	t->addrconf_proto_dir[0].child = t->addrconf_conf_dir; | ||||
| 	t->addrconf_proto_dir[0].de = NULL; | ||||
| 	t->addrconf_root_dir[0].child = t->addrconf_proto_dir; | ||||
| 	t->addrconf_root_dir[0].de = NULL; | ||||
| 
 | ||||
| 	t->sysctl_header = register_sysctl_table(t->addrconf_root_dir); | ||||
| 	if (t->sysctl_header == NULL) | ||||
|  | ||||
| @ -1423,6 +1423,41 @@ static int selinux_capable(struct task_struct *tsk, int cap) | ||||
| 	return task_has_capability(tsk,cap); | ||||
| } | ||||
| 
 | ||||
| static int selinux_sysctl_get_sid(ctl_table *table, u16 tclass, u32 *sid) | ||||
| { | ||||
| 	int buflen, rc; | ||||
| 	char *buffer, *path, *end; | ||||
| 
 | ||||
| 	rc = -ENOMEM; | ||||
| 	buffer = (char*)__get_free_page(GFP_KERNEL); | ||||
| 	if (!buffer) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	buflen = PAGE_SIZE; | ||||
| 	end = buffer+buflen; | ||||
| 	*--end = '\0'; | ||||
| 	buflen--; | ||||
| 	path = end-1; | ||||
| 	*path = '/'; | ||||
| 	while (table) { | ||||
| 		const char *name = table->procname; | ||||
| 		size_t namelen = strlen(name); | ||||
| 		buflen -= namelen + 1; | ||||
| 		if (buflen < 0) | ||||
| 			goto out_free; | ||||
| 		end -= namelen; | ||||
| 		memcpy(end, name, namelen); | ||||
| 		*--end = '/'; | ||||
| 		path = end; | ||||
| 		table = table->parent; | ||||
| 	} | ||||
| 	rc = security_genfs_sid("proc", path, tclass, sid); | ||||
| out_free: | ||||
| 	free_page((unsigned long)buffer); | ||||
| out: | ||||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
| static int selinux_sysctl(ctl_table *table, int op) | ||||
| { | ||||
| 	int error = 0; | ||||
| @ -1437,8 +1472,8 @@ static int selinux_sysctl(ctl_table *table, int op) | ||||
| 
 | ||||
| 	tsec = current->security; | ||||
| 
 | ||||
| 	rc = selinux_proc_get_sid(table->de, (op == 001) ? | ||||
| 	                          SECCLASS_DIR : SECCLASS_FILE, &tsid); | ||||
| 	rc = selinux_sysctl_get_sid(table, (op == 0001) ? | ||||
| 				    SECCLASS_DIR : SECCLASS_FILE, &tsid); | ||||
| 	if (rc) { | ||||
| 		/* Default to the well-defined sysctl SID. */ | ||||
| 		tsid = SECINITSID_SYSCTL; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user