Package: src:cairocffi
Version: 1.7.1-3
Severity: normal
Dear Maintainer,
while investigating why an Apache webserver configured to serve
(Debian-packaged) graphite-web executed gcc and ld every once in a
while, we found that this could be attributed to cairocffi using a
misguided combination of ctypes.util.find_library() and dlopen to find
libcairo (and others). See below for a trivial demonstrator using strace.
I'm preparing a patch to correct this.
Cheers,
-Hilko
$ strace -f -eexecve,execveat python3 -c "import cairocffi"
execve("/usr/bin/python3", ["python3", "-c", "import cairocffi"],
0x7ffd21c803f0 /* 25 vars */) = 0
strace: Process 1065131 attached
[pid 1065131] execve("/sbin/ldconfig", ["/sbin/ldconfig", "-p"], 0x7f2af49fc030
/* 2 vars */) = 0
[pid 1065131] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065131, si_uid=1000,
si_status=0, si_utime=0, si_stime=0} ---
strace: Process 1065132 attached
[pid 1065132] execve("/sbin/ldconfig", ["/sbin/ldconfig", "-p"], 0x7f2af51dcb90
/* 2 vars */) = 0
[pid 1065132] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065132, si_uid=1000,
si_status=0, si_utime=0, si_stime=0} ---
strace: Process 1065133 attached
[pid 1065133] execve("/usr/bin/gcc", ["/usr/bin/gcc", "-Wl,-t", "-o",
"/tmp/tmpavc6a5gg", "-lcairo-2"], 0x7f2af4a89290 /* 26 vars */) = 0
strace: Process 1065134 attached
[pid 1065134] execve("/usr/libexec/gcc/x86_64-linux-gnu/14/collect2",
["/usr/libexec/gcc/x86_64-linux-gn"..., "-plugin",
"/usr/libexec/gcc/x86_64-linux-gn"..., "-plugin-opt=/usr/libexec/gcc/x86"...,
"-plugin-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc",
"-plugin-opt=-pass-through=-lgcc_"..., "-plugin-opt=-pass-through=-lc",
"-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"...,
"--build-id", "--eh-frame-hdr", "-m", "elf_x86_64", "--hash-style=gnu",
"--as-needed", "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", "-pie", "-o",
"/tmp/tmpavc6a5gg", "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"/usr/lib/gcc/x86_64-linux-gnu/14"..., "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/usr/lib/gcc/x86_64-linux-gnu/"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/lib/x86_64-linux-gnu",
"-L/lib/../lib", "-L/usr/lib/x86_64-linux-gnu", "-L/usr/lib/../lib",
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., ...], 0x16332170 /* 33 vars */) = 0
strace: Process 1065135 attached
[pid 1065135] execve("/usr/bin/ld", ["/usr/bin/ld", "-plugin",
"/usr/libexec/gcc/x86_64-linux-gn"..., "-plugin-opt=/usr/libexec/gcc/x86"...,
"-plugin-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc",
"-plugin-opt=-pass-through=-lgcc_"..., "-plugin-opt=-pass-through=-lc",
"-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"...,
"--build-id", "--eh-frame-hdr", "-m", "elf_x86_64", "--hash-style=gnu",
"--as-needed", "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", "-pie", "-o",
"/tmp/tmpavc6a5gg", "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"/usr/lib/gcc/x86_64-linux-gnu/14"..., "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/usr/lib/gcc/x86_64-linux-gnu/"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/lib/x86_64-linux-gnu",
"-L/lib/../lib", "-L/usr/lib/x86_64-linux-gnu", "-L/usr/lib/../lib",
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., ...], 0x7ffc46540b48 /* 33 vars */) = 0
[pid 1065135] +++ exited with 1 +++
[pid 1065134] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED,
si_pid=1065135, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
[pid 1065134] +++ exited with 1 +++
[pid 1065133] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED,
si_pid=1065134, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
[pid 1065133] +++ exited with 1 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065133, si_uid=1000,
si_status=1, si_utime=0, si_stime=0} ---
strace: Process 1065136 attached
[pid 1065136] execve("/usr/local/bin/ld", ["ld", "-t", "-o", "/dev/null",
"-lcairo-2"], 0x7fffcb9dc428 /* 25 vars */) = -1 ENOENT (No such file or
directory)
[pid 1065136] execve("/usr/bin/ld", ["ld", "-t", "-o", "/dev/null",
"-lcairo-2"], 0x7fffcb9dc428 /* 25 vars */) = 0
[pid 1065136] +++ exited with 1 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065136, si_uid=1000,
si_status=1, si_utime=0, si_stime=0} ---
strace: Process 1065137 attached
[pid 1065137] execve("/sbin/ldconfig", ["/sbin/ldconfig", "-p"], 0x7f2af49fcf90
/* 2 vars */) = 0
[pid 1065137] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065137, si_uid=1000,
si_status=0, si_utime=0, si_stime=0} ---
strace: Process 1065138 attached
[pid 1065138] execve("/sbin/ldconfig", ["/sbin/ldconfig", "-p"], 0x7f2af49fcd70
/* 2 vars */) = 0
[pid 1065138] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065138, si_uid=1000,
si_status=0, si_utime=0, si_stime=0} ---
strace: Process 1065139 attached
[pid 1065139] execve("/usr/bin/gcc", ["/usr/bin/gcc", "-Wl,-t", "-o",
"/tmp/tmppxr2d0mr", "-llibcairo-2"], 0x7f2af4a881f0 /* 26 vars */) = 0
strace: Process 1065140 attached
[pid 1065140] execve("/usr/libexec/gcc/x86_64-linux-gnu/14/collect2",
["/usr/libexec/gcc/x86_64-linux-gn"..., "-plugin",
"/usr/libexec/gcc/x86_64-linux-gn"..., "-plugin-opt=/usr/libexec/gcc/x86"...,
"-plugin-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc",
"-plugin-opt=-pass-through=-lgcc_"..., "-plugin-opt=-pass-through=-lc",
"-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"...,
"--build-id", "--eh-frame-hdr", "-m", "elf_x86_64", "--hash-style=gnu",
"--as-needed", "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", "-pie", "-o",
"/tmp/tmppxr2d0mr", "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"/usr/lib/gcc/x86_64-linux-gnu/14"..., "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/usr/lib/gcc/x86_64-linux-gnu/"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/lib/x86_64-linux-gnu",
"-L/lib/../lib", "-L/usr/lib/x86_64-linux-gnu", "-L/usr/lib/../lib",
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., ...], 0x3a049170 /* 33 vars */) = 0
strace: Process 1065141 attached
[pid 1065141] execve("/usr/bin/ld", ["/usr/bin/ld", "-plugin",
"/usr/libexec/gcc/x86_64-linux-gn"..., "-plugin-opt=/usr/libexec/gcc/x86"...,
"-plugin-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc",
"-plugin-opt=-pass-through=-lgcc_"..., "-plugin-opt=-pass-through=-lc",
"-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"...,
"--build-id", "--eh-frame-hdr", "-m", "elf_x86_64", "--hash-style=gnu",
"--as-needed", "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", "-pie", "-o",
"/tmp/tmppxr2d0mr", "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"/usr/lib/gcc/x86_64-linux-gnu/14"..., "/usr/lib/gcc/x86_64-linux-gnu/14"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/usr/lib/gcc/x86_64-linux-gnu/"...,
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/lib/x86_64-linux-gnu",
"-L/lib/../lib", "-L/usr/lib/x86_64-linux-gnu", "-L/usr/lib/../lib",
"-L/usr/lib/gcc/x86_64-linux-gnu/"..., ...], 0x7fff924e7028 /* 33 vars */) = 0
[pid 1065141] +++ exited with 1 +++
[pid 1065140] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED,
si_pid=1065141, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
[pid 1065140] +++ exited with 1 +++
[pid 1065139] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED,
si_pid=1065140, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
[pid 1065139] +++ exited with 1 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065139, si_uid=1000,
si_status=1, si_utime=0, si_stime=0} ---
strace: Process 1065142 attached
[pid 1065142] execve("/usr/local/bin/ld", ["ld", "-t", "-o", "/dev/null",
"-llibcairo-2"], 0x7fffcb9dc428 /* 25 vars */) = -1 ENOENT (No such file or
directory)
[pid 1065142] execve("/usr/bin/ld", ["ld", "-t", "-o", "/dev/null",
"-llibcairo-2"], 0x7fffcb9dc428 /* 25 vars */) = 0
[pid 1065142] +++ exited with 1 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1065142, si_uid=1000,
si_status=1, si_utime=0, si_stime=0} ---
+++ exited with 0 +++