mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 01:41:27 +00:00 
			
		
		
		
	cppcheck: (error) Null pointer dereference: who_perm
As indicated by the VERIFY the local who_perm variable can never be NULL in parse_fs_perm(). Due to the existence of the is_set conditional, which is always true, cppcheck 1.88 was reporting a possible NULL reference. Resolve the issue by removing the extraneous is_set variable. Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #9732
This commit is contained in:
		
							parent
							
								
									070402f112
								
							
						
					
					
						commit
						1e49b288cb
					
				@ -5102,7 +5102,6 @@ parse_fs_perm(fs_perm_t *fsperm, nvlist_t *nvl)
 | 
			
		||||
		zfs_deleg_who_type_t perm_type = name[0];
 | 
			
		||||
		char perm_locality = name[1];
 | 
			
		||||
		const char *perm_name = name + 3;
 | 
			
		||||
		boolean_t is_set = B_TRUE;
 | 
			
		||||
		who_perm_t *who_perm = NULL;
 | 
			
		||||
 | 
			
		||||
		assert('$' == name[2]);
 | 
			
		||||
@ -5132,57 +5131,56 @@ parse_fs_perm(fs_perm_t *fsperm, nvlist_t *nvl)
 | 
			
		||||
			assert(!"unhandled zfs_deleg_who_type_t");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (is_set) {
 | 
			
		||||
			who_perm_node_t *found_node = NULL;
 | 
			
		||||
			who_perm_node_t *node = safe_malloc(
 | 
			
		||||
			    sizeof (who_perm_node_t));
 | 
			
		||||
			who_perm = &node->who_perm;
 | 
			
		||||
			uu_avl_index_t idx = 0;
 | 
			
		||||
		who_perm_node_t *found_node = NULL;
 | 
			
		||||
		who_perm_node_t *node = safe_malloc(
 | 
			
		||||
		    sizeof (who_perm_node_t));
 | 
			
		||||
		who_perm = &node->who_perm;
 | 
			
		||||
		uu_avl_index_t idx = 0;
 | 
			
		||||
 | 
			
		||||
			uu_avl_node_init(node, &node->who_avl_node, avl_pool);
 | 
			
		||||
			who_perm_init(who_perm, fsperm, perm_type, perm_name);
 | 
			
		||||
		uu_avl_node_init(node, &node->who_avl_node, avl_pool);
 | 
			
		||||
		who_perm_init(who_perm, fsperm, perm_type, perm_name);
 | 
			
		||||
 | 
			
		||||
			if ((found_node = uu_avl_find(avl, node, NULL, &idx))
 | 
			
		||||
			    == NULL) {
 | 
			
		||||
				if (avl == fsperm->fsp_uge_avl) {
 | 
			
		||||
					uid_t rid = 0;
 | 
			
		||||
					struct passwd *p = NULL;
 | 
			
		||||
					struct group *g = NULL;
 | 
			
		||||
					const char *nice_name = NULL;
 | 
			
		||||
		if ((found_node = uu_avl_find(avl, node, NULL, &idx))
 | 
			
		||||
		    == NULL) {
 | 
			
		||||
			if (avl == fsperm->fsp_uge_avl) {
 | 
			
		||||
				uid_t rid = 0;
 | 
			
		||||
				struct passwd *p = NULL;
 | 
			
		||||
				struct group *g = NULL;
 | 
			
		||||
				const char *nice_name = NULL;
 | 
			
		||||
 | 
			
		||||
					switch (perm_type) {
 | 
			
		||||
					case ZFS_DELEG_USER_SETS:
 | 
			
		||||
					case ZFS_DELEG_USER:
 | 
			
		||||
						rid = atoi(perm_name);
 | 
			
		||||
						p = getpwuid(rid);
 | 
			
		||||
						if (p)
 | 
			
		||||
							nice_name = p->pw_name;
 | 
			
		||||
						break;
 | 
			
		||||
					case ZFS_DELEG_GROUP_SETS:
 | 
			
		||||
					case ZFS_DELEG_GROUP:
 | 
			
		||||
						rid = atoi(perm_name);
 | 
			
		||||
						g = getgrgid(rid);
 | 
			
		||||
						if (g)
 | 
			
		||||
							nice_name = g->gr_name;
 | 
			
		||||
						break;
 | 
			
		||||
				switch (perm_type) {
 | 
			
		||||
				case ZFS_DELEG_USER_SETS:
 | 
			
		||||
				case ZFS_DELEG_USER:
 | 
			
		||||
					rid = atoi(perm_name);
 | 
			
		||||
					p = getpwuid(rid);
 | 
			
		||||
					if (p)
 | 
			
		||||
						nice_name = p->pw_name;
 | 
			
		||||
					break;
 | 
			
		||||
				case ZFS_DELEG_GROUP_SETS:
 | 
			
		||||
				case ZFS_DELEG_GROUP:
 | 
			
		||||
					rid = atoi(perm_name);
 | 
			
		||||
					g = getgrgid(rid);
 | 
			
		||||
					if (g)
 | 
			
		||||
						nice_name = g->gr_name;
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
					default:
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					if (nice_name != NULL)
 | 
			
		||||
						(void) strlcpy(
 | 
			
		||||
						    node->who_perm.who_ug_name,
 | 
			
		||||
						    nice_name, 256);
 | 
			
		||||
				default:
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				uu_avl_insert(avl, node, idx);
 | 
			
		||||
			} else {
 | 
			
		||||
				node = found_node;
 | 
			
		||||
				who_perm = &node->who_perm;
 | 
			
		||||
				if (nice_name != NULL)
 | 
			
		||||
					(void) strlcpy(
 | 
			
		||||
					    node->who_perm.who_ug_name,
 | 
			
		||||
					    nice_name, 256);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			uu_avl_insert(avl, node, idx);
 | 
			
		||||
		} else {
 | 
			
		||||
			node = found_node;
 | 
			
		||||
			who_perm = &node->who_perm;
 | 
			
		||||
		}
 | 
			
		||||
		VERIFY3P(who_perm, !=, NULL);
 | 
			
		||||
 | 
			
		||||
		assert(who_perm != NULL);
 | 
			
		||||
		(void) parse_who_perm(who_perm, nvl2, perm_locality);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user