Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/GStreamer/orc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2022-05-06 16:56:17 +0300
committerBastien Nocera <hadess@hadess.net>2022-05-06 16:56:17 +0300
commit03d9f144cb333057bb203cbecea3fc29bb336120 (patch)
tree2d12b9231f4d4a4f1bd84684b5e5b6d608adbeb4
parent61125caa52c53b62ccc889e672117eb47c67e13e (diff)
orccodemem: Fix use-after-free in error paths
In file included from gstreamer/subprojects/orc/orc/orc.h:7, from gstreamer/subprojects/orc/orc/orcprogram.h:5, from gstreamer/subprojects/orc/orc/orccodemem.c:30: gstreamer/subprojects/orc/orc/orccodemem.c: In function ‘orc_code_region_allocate_codemem_dual_map.constprop’: gstreamer/subprojects/orc/orc/orcdebug.h:138:3: warning: pointer ‘filename’ may be used after ‘free’ [-Wuse-after-free] 138 | orc_debug_print((level), __FILE__, ORC_FUNCTION, __LINE__, __VA_ARGS__); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gstreamer/subprojects/orc/orc/orcdebug.h:92:26: note: in expansion of macro ‘ORC_DEBUG_PRINT’ 92 | #define ORC_WARNING(...) ORC_DEBUG_PRINT(ORC_DEBUG_WARNING, __VA_ARGS__) | ^~~~~~~~~~~~~~~ gstreamer/subprojects/orc/orc/orccodemem.c:252:5: note: in expansion of macro ‘ORC_WARNING’ 252 | ORC_WARNING ("failed to create write map '%s'. err=%i", filename, errno); | ^~~~~~~~~~~ gstreamer/subprojects/orc/orc/orccodemem.c:234:3: note: call to ‘free’ here 234 | free (filename); | ^~~~~~~~~~~~~~~ gstreamer/subprojects/orc/orc/orcdebug.h:138:3: warning: pointer ‘filename’ may be used after ‘free’ [-Wuse-after-free] 138 | orc_debug_print((level), __FILE__, ORC_FUNCTION, __LINE__, __VA_ARGS__); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gstreamer/subprojects/orc/orc/orcdebug.h:92:26: note: in expansion of macro ‘ORC_DEBUG_PRINT’ 92 | #define ORC_WARNING(...) ORC_DEBUG_PRINT(ORC_DEBUG_WARNING, __VA_ARGS__) | ^~~~~~~~~~~~~~~ gstreamer/subprojects/orc/orc/orccodemem.c:245:5: note: in expansion of macro ‘ORC_WARNING’ 245 | ORC_WARNING("failed to create exec map '%s'. err=%i", filename, errno); | ^~~~~~~~~~~ gstreamer/subprojects/orc/orc/orccodemem.c:234:3: note: call to ‘free’ here 234 | free (filename); | ^~~~~~~~~~~~~~~ Fixes: bb5fcb31 ("orccodemem: Report errno during failures to create mmap codemap.")
-rw-r--r--orc/orccodemem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/orc/orccodemem.c b/orc/orccodemem.c
index 728f347..489b5d2 100644
--- a/orc/orccodemem.c
+++ b/orc/orccodemem.c
@@ -231,12 +231,12 @@ orc_code_region_allocate_codemem_dual_map (OrcCodeRegion *region,
if (force_unlink || !_orc_compiler_flag_debug) {
unlink (filename);
}
- free (filename);
n = ftruncate (fd, SIZE);
if (n < 0) {
ORC_WARNING("failed to expand file to size");
close (fd);
+ free (filename);
return FALSE;
}
@@ -244,18 +244,21 @@ orc_code_region_allocate_codemem_dual_map (OrcCodeRegion *region,
if (region->exec_ptr == MAP_FAILED) {
ORC_WARNING("failed to create exec map '%s'. err=%i", filename, errno);
close (fd);
+ free (filename);
return FALSE;
}
region->write_ptr = mmap (NULL, SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
if (region->write_ptr == MAP_FAILED) {
ORC_WARNING ("failed to create write map '%s'. err=%i", filename, errno);
+ free (filename);
munmap (region->exec_ptr, SIZE);
close (fd);
return FALSE;
}
region->size = SIZE;
+ free (filename);
close (fd);
return TRUE;
}