mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ethtool: Allow zero-length register dumps again
Some drivers (ab)use the ethtool_ops::get_regs operation to expose
only a hardware revision ID.  Commit
a77f5db361 ('ethtool: Allocate register
dump buffer with vmalloc()') had the side-effect of breaking these, as
vmalloc() returns a null pointer for size=0 whereas kmalloc() did not.
For backward-compatibility, allow zero-length dumps again.
Reported-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Cc: stable@kernel.org [2.6.37+]
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									1511022c9a
								
							
						
					
					
						commit
						67ae7cf1ee
					
				
					 1 changed files with 2 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -923,7 +923,7 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
 | 
			
		|||
		regs.len = reglen;
 | 
			
		||||
 | 
			
		||||
	regbuf = vzalloc(reglen);
 | 
			
		||||
	if (!regbuf)
 | 
			
		||||
	if (reglen && !regbuf)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
	ops->get_regs(dev, ®s, regbuf);
 | 
			
		||||
| 
						 | 
				
			
			@ -932,7 +932,7 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
 | 
			
		|||
	if (copy_to_user(useraddr, ®s, sizeof(regs)))
 | 
			
		||||
		goto out;
 | 
			
		||||
	useraddr += offsetof(struct ethtool_regs, data);
 | 
			
		||||
	if (copy_to_user(useraddr, regbuf, regs.len))
 | 
			
		||||
	if (regbuf && copy_to_user(useraddr, regbuf, regs.len))
 | 
			
		||||
		goto out;
 | 
			
		||||
	ret = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue