mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	libbpf: fix errno is overwritten after being closed.
In the ensure_good_fd function, if the fcntl function succeeds but the close function fails, ensure_good_fd returns a normal fd and sets errno, which may cause users to misunderstand. The close failure is not a serious problem, and the correct FD has been handed over to the upper-layer application. Let's restore errno here. Signed-off-by: Xin Liu <liuxin350@huawei.com> Link: https://lore.kernel.org/r/20221223133618.10323-1-liuxin350@huawei.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
		
							parent
							
								
									4633a00682
								
							
						
					
					
						commit
						0745324562
					
				
					 1 changed files with 2 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -543,10 +543,9 @@ static inline int ensure_good_fd(int fd)
 | 
			
		|||
		fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
 | 
			
		||||
		saved_errno = errno;
 | 
			
		||||
		close(old_fd);
 | 
			
		||||
		if (fd < 0) {
 | 
			
		||||
		errno = saved_errno;
 | 
			
		||||
		if (fd < 0)
 | 
			
		||||
			pr_warn("failed to dup FD %d to FD > 2: %d\n", old_fd, -saved_errno);
 | 
			
		||||
			errno = saved_errno;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return fd;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue