aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2022-04-05 15:18:25 +0200
committerStefano Brivio <sbrivio@redhat.com>2022-04-07 11:44:35 +0200
commit0bf6adc8865922b1adee9f05933771e8a53e500c (patch)
treea17317586843e001b3f396691b904a315d0fa053
parent2b1fbf463148277a21aabc6ff1775a80feedb59f (diff)
downloadpasst-0bf6adc8865922b1adee9f05933771e8a53e500c.tar
passt-0bf6adc8865922b1adee9f05933771e8a53e500c.tar.gz
passt-0bf6adc8865922b1adee9f05933771e8a53e500c.tar.bz2
passt-0bf6adc8865922b1adee9f05933771e8a53e500c.tar.lz
passt-0bf6adc8865922b1adee9f05933771e8a53e500c.tar.xz
passt-0bf6adc8865922b1adee9f05933771e8a53e500c.tar.zst
passt-0bf6adc8865922b1adee9f05933771e8a53e500c.zip
arch: Pointer to local outside scope, CWE-562
Reported by Coverity: if we fail to run the AVX2 version, once execve() fails, we had already replaced argv[0] with the new stack-allocated path string, and that's then passed back to main(). Use a static variable instead. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--arch.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/arch.c b/arch.c
index b8e1db5..ae21d59 100644
--- a/arch.c
+++ b/arch.c
@@ -22,6 +22,8 @@
* @argv: Arguments from command line
*/
#ifdef __x86_64__
+static char avx2_path[PATH_MAX];
+
void arch_avx2_exec(char **argv)
{
char *p = strstr(argv[0], ".avx2");
@@ -29,11 +31,9 @@ void arch_avx2_exec(char **argv)
if (p) {
*p = 0;
} else if (__builtin_cpu_supports("avx2")) {
- char path[PATH_MAX];
-
- snprintf(path, PATH_MAX, "%s.avx2", argv[0]);
- argv[0] = path;
- execve(path, argv, environ);
+ snprintf(avx2_path, PATH_MAX, "%s.avx2", argv[0]);
+ argv[0] = avx2_path;
+ execve(avx2_path, argv, environ);
perror("Can't run AVX2 build, using non-AVX2 version");
}
}