summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorElena Salomatkina <esalomatkina@ispras.ru>2024-10-23 00:37:08 +0300
committerMasahiro Yamada <masahiroy@kernel.org>2024-10-23 16:11:13 +0900
commit4b60a5655528786bf659e9627fb0b45900f4cc66 (patch)
tree3ee7420598fa664b4b1635cdc7f3effab10ab2c4 /scripts
parent42f7652d3eb527d03665b09edac47f85fb600924 (diff)
sumversion: Fix a memory leak in get_src_version()
strsep() modifies its first argument - buf. An invalid pointer will be passed to the free() function. Make the pointer passed to free() match the return value of read_text_file(). Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: 9413e7640564 ("kbuild: split the second line of *.mod into *.usyms") Signed-off-by: Elena Salomatkina <esalomatkina@ispras.ru> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/mod/sumversion.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c
index e7d2da45b0df..6de9af17599d 100644
--- a/scripts/mod/sumversion.c
+++ b/scripts/mod/sumversion.c
@@ -392,7 +392,7 @@ out_file:
/* Calc and record src checksum. */
void get_src_version(const char *modname, char sum[], unsigned sumlen)
{
- char *buf;
+ char *buf, *pos;
struct md4_ctx md;
char *fname;
char filelist[PATH_MAX + 1];
@@ -401,9 +401,10 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen)
snprintf(filelist, sizeof(filelist), "%s.mod", modname);
buf = read_text_file(filelist);
+ pos = buf;
md4_init(&md);
- while ((fname = strsep(&buf, "\n"))) {
+ while ((fname = strsep(&pos, "\n"))) {
if (!*fname)
continue;
if (!(is_static_library(fname)) &&