Wrt. the "symlink.crash" aspect, several hooks are affected by this. Only some (apportcheckresume and apport itself) already open the file with O_EXCL. Hooks usually use fileutils.make_report_path(), so I propose to change that to fileutils.make_report_file(), and let that open the file exclusively.
Wrt. the "symlink log" aspect, I checked the other hooks with grep -r '\[.*= (' and they seem okay. E. g. gcc_ice_hook is run as normal user, and apport itself already uses an fd. package_hook attaches log files that way, but they are specified by package-shipped hooks and are thus not user controllable.
Wrt. the "symlink.crash" aspect, several hooks are affected by this. Only some (apportcheckresume and apport itself) already open the file with O_EXCL. Hooks usually use fileutils. make_report_ path(), so I propose to change that to fileutils. make_report_ file(), and let that open the file exclusively.
Wrt. the "symlink log" aspect, I checked the other hooks with grep -r '\[.*= (' and they seem okay. E. g. gcc_ice_hook is run as normal user, and apport itself already uses an fd. package_hook attaches log files that way, but they are specified by package-shipped hooks and are thus not user controllable.