mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map()
If we fail to allocate propname buffer, we need to drop the reference
count we just took. Because the pinctrl_dt_free_maps() includes the
droping operation, here we call it directly.
Fixes: 91d5c5060e ("pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map")
Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Zeng Heng <zengheng4@huawei.com>
Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
Message-ID: <20240415105328.3651441-1-zengheng4@huawei.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
			
			
This commit is contained in:
		
							parent
							
								
									c5d3b64c56
								
							
						
					
					
						commit
						a0cedbcc88
					
				
					 1 changed files with 6 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -220,14 +220,16 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev)
 | 
			
		|||
	for (state = 0; ; state++) {
 | 
			
		||||
		/* Retrieve the pinctrl-* property */
 | 
			
		||||
		propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
 | 
			
		||||
		if (!propname)
 | 
			
		||||
			return -ENOMEM;
 | 
			
		||||
		if (!propname) {
 | 
			
		||||
			ret = -ENOMEM;
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
		prop = of_find_property(np, propname, &size);
 | 
			
		||||
		kfree(propname);
 | 
			
		||||
		if (!prop) {
 | 
			
		||||
			if (state == 0) {
 | 
			
		||||
				of_node_put(np);
 | 
			
		||||
				return -ENODEV;
 | 
			
		||||
				ret = -ENODEV;
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue