[<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