From: Nicholas Mc Guire <der.herr@hofr.at>
To: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Cc: linux-kbuild@vger.kernel.org, sil2review@lists.osadl.org,
Michal Marek <michal.lkml@markovi.net>,
linux-kernel@vger.kernel.org,
Masahiro Yamada <yamada.masahiro@socionext.com>,
Alexey Dobriyan <adobriyan@gmail.com>
Subject: Re: [SIL2review] [PATCH] fixdep: free memory on second error path of do_config_file
Date: Fri, 15 Dec 2017 08:23:16 +0000 [thread overview]
Message-ID: <20171215082316.GB26962@osadl.at> (raw)
In-Reply-To: <1513281250-9186-2-git-send-email-lukas.bulwahn@gmail.com>
On Thu, Dec 14, 2017 at 08:54:10PM +0100, Lukas Bulwahn wrote:
> Commit dee81e988674 ("fixdep: faster CONFIG_ search") introduces the memory
> leak when `map = mmap(...)` was replaced with `map = malloc(...)` and
> `read(fd, map, ...)`. It introduces a new second error path, which does not
> free the allocated memory for `map`. We now correct that behavior and free
> `map` before the do_config_file() function returns.
>
> Facebook's static analysis tool Infer (http://fbinfer.com) found this
> memory leak:
>
> scripts/basic/fixdep.c:297: error: MEMORY_LEAK
> memory dynamically allocated by call to `malloc()` at line 290, \
> column 8 is not reachable after line 297, column 3.
>
> Fixes: dee81e988674 ("fixdep: faster CONFIG_ search")
>
> Signed-off-by: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Reviewed-by: Nicholas Mc Guire <der.herr@hofr.at>
> ---
> scripts/basic/fixdep.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
> index bbf62cb..131c450 100644
> --- a/scripts/basic/fixdep.c
> +++ b/scripts/basic/fixdep.c
> @@ -296,6 +296,7 @@ static void do_config_file(const char *filename)
> if (read(fd, map, st.st_size) != st.st_size) {
> perror("fixdep: read");
> close(fd);
> + free(map);
This looks reasonable but actually it is not clear why do_config_file()
should return at all if read fails as the read error would go unnoticed
in the current code and allow the build to continue. so this probably
should be an exit(2) here and not a return which would then take care
of the free() anyway.
Atleast I do not see the rational to allow continuation if the read
failed as the file should not be empty nor a mismatch with st.st_size
expected. If it were due to a EINTR then it still should terminate as
EINTR was not handled and we thus could miss a valid dependency.
Note: this probably also should be applied to the if (!map) condition
before as well, as at that point it is known that map > 0 and a malloc()
failure would allow skipping parse_config_file() for a valid config.
> return;
> }
> map[st.st_size] = '\0';
> --
> 2.7.4
>
> _______________________________________________
> SIL2review mailing list
> SIL2review@lists.osadl.org
> https://lists.osadl.org/mailman/listinfo/sil2review
next prev parent reply other threads:[~2017-12-15 8:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-14 19:54 Applying Facebook's static analysis tool Infer Lukas Bulwahn
2017-12-14 19:54 ` [PATCH] fixdep: free memory on second error path of do_config_file Lukas Bulwahn
2017-12-15 8:23 ` Nicholas Mc Guire [this message]
2017-12-18 13:58 ` [SIL2review] " Masahiro Yamada
2017-12-27 12:39 ` Lukas Bulwahn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171215082316.GB26962@osadl.at \
--to=der.herr@hofr.at \
--cc=adobriyan@gmail.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas.bulwahn@gmail.com \
--cc=michal.lkml@markovi.net \
--cc=sil2review@lists.osadl.org \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®