lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <e9a77873-0b57-4df1-b8d6-32ef043e6d84@suse.com>
Date: Tue, 20 Jan 2026 12:48:40 +0100
From: Petr Pavlu <petr.pavlu@...e.com>
To: Weigang He <geoffreyhe2@...il.com>
Cc: masahiroy@...nel.org, sam@...nborg.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] genksyms: fix file pointer leaks on error paths

On 1/17/26 11:26 AM, Weigang He wrote:
> The option parsing loop processes multiple command-line options
> sequentially. When -r or -T options successfully open their files,
> but a later option causes an early return (e.g., -h for help, an
> unknown option, or a failed fopen), the previously opened file
> pointers are leaked.
> 
> Fix this by closing ref_file and dumpfile before each early return
> in the option parsing switch statement.
> 
> Fixes: 64e6c1e12372 ("genksyms: track symbol checksum changes")
> Signed-off-by: Weigang He <geoffreyhe2@...il.com>
> ---
>  scripts/genksyms/genksyms.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c
> index 83e48670c2fcf..dee9216797935 100644
> --- a/scripts/genksyms/genksyms.c
> +++ b/scripts/genksyms/genksyms.c
> @@ -776,6 +776,8 @@ int main(int argc, char **argv)
>  			ref_file = fopen(optarg, "r");
>  			if (!ref_file) {
>  				perror(optarg);
> +				if (dumpfile)
> +					fclose(dumpfile);
>  				return 1;
>  			}
>  			break;
> @@ -784,6 +786,8 @@ int main(int argc, char **argv)
>  			dumpfile = fopen(optarg, "w");
>  			if (!dumpfile) {
>  				perror(optarg);
> +				if (ref_file)
> +					fclose(ref_file);
>  				return 1;
>  			}
>  			break;
> @@ -792,9 +796,17 @@ int main(int argc, char **argv)
>  			break;
>  		case 'h':
>  			genksyms_usage();
> +			if (ref_file)
> +				fclose(ref_file);
> +			if (dumpfile)
> +				fclose(dumpfile);
>  			return 0;
>  		default:
>  			genksyms_usage();
> +			if (ref_file)
> +				fclose(ref_file);
> +			if (dumpfile)
> +				fclose(dumpfile);
>  			return 1;
>  		}
>  	{

Genksyms is a utility used exclusively during the kernel and module
build process. My understanding is that it is designed to exit
immediately upon encountering an error and leaves the cleanup of memory
and open files to the kernel. Notice the use of xmalloc(), xstrdup() and
exit(1). This is intentional to keep the code simple.

-- 
Cheers,
Petr

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ