mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
perf tools: Use mkostemp() for O_CLOEXEC on temporary files
mkstemp() creates file descriptors without the close-on-exec flag. These fds leak to child processes spawned during symbol resolution (addr2line, objdump), wasting descriptors and potentially exposing temporary file contents. Replace mkstemp() with mkostemp(tmpbuf, O_CLOEXEC) at all three call sites: - filename__decompress() in dso.c - read_gnu_debugdata() in symbol-elf.c - kcore__init() in symbol-elf.c Fixes:42b3fa6708("perf tools: Introduce dso__decompress_kmodule_{fd,path}") Fixes:b10f74308e("perf symbol: Support .gnu_debugdata for symbols") Fixes:afba19d9dc("perf symbols: Workaround objdump difficulties with kcore") Reported-by: sashiko-bot <sashiko-bot@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Stephen Brennan <stephen.s.brennan@oracle.com> Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
9c74f0aab3
commit
b8acc68f13
|
|
@ -346,7 +346,7 @@ int filename__decompress(const char *name, char *pathname,
|
|||
if (!compressions[comp].is_compressed(name))
|
||||
return open(name, O_RDONLY | O_CLOEXEC);
|
||||
|
||||
fd = mkstemp(tmpbuf);
|
||||
fd = mkostemp(tmpbuf, O_CLOEXEC);
|
||||
if (fd < 0) {
|
||||
*err = errno;
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -1119,9 +1119,9 @@ static Elf *read_gnu_debugdata(struct dso *dso, Elf *elf, const char *name, int
|
|||
return NULL;
|
||||
}
|
||||
|
||||
temp_fd = mkstemp(temp_filename);
|
||||
temp_fd = mkostemp(temp_filename, O_CLOEXEC);
|
||||
if (temp_fd < 0) {
|
||||
pr_debug("%s: mkstemp: %m\n", __func__);
|
||||
pr_debug("%s: mkostemp: %m\n", __func__);
|
||||
*dso__load_errno(dso) = -errno;
|
||||
fclose(wrapped);
|
||||
return NULL;
|
||||
|
|
@ -1993,7 +1993,7 @@ static int kcore__init(struct kcore *kcore, char *filename, int elfclass,
|
|||
kcore->elfclass = elfclass;
|
||||
|
||||
if (temp)
|
||||
kcore->fd = mkstemp(filename);
|
||||
kcore->fd = mkostemp(filename, O_CLOEXEC);
|
||||
else
|
||||
kcore->fd = open(filename, O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC, 0400);
|
||||
if (kcore->fd == -1)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user