commit 82349a5eb0e1122d5532a03367d91d5ee838722d Author: Serhei Makarov Date: Fri Mar 1 11:16:32 2019 -0500 Don't print to /dev/kmsg if it's unavailable * stapbpf/stapbpf.cxx (kmsg): initialize to NULL. (prog_load): only print to kmsg if it's available. (main): warn if kmsg is unavailable. diff --git a/stapbpf/stapbpf.cxx b/stapbpf/stapbpf.cxx index 188724b..ae97d4b 100644 --- a/stapbpf/stapbpf.cxx +++ b/stapbpf/stapbpf.cxx @@ -73,7 +73,7 @@ static int warnings = 1; static int exit_phase = 0; static int interrupt_message = 0; static FILE *output_f = stdout; -static FILE *kmsg; +static FILE *kmsg = NULL; static const char *module_name; static const char *module_basename; @@ -341,9 +341,12 @@ prog_load(Elf_Data *data, const char *name) if (data->d_size % sizeof(bpf_insn)) fatal("program size not a multiple of %zu\n", sizeof(bpf_insn)); - fprintf (kmsg, "%s (%s): stapbpf: %s, name: %s, d_size: %lu\n", - module_basename, script_name, VERSION, name, (unsigned long)data->d_size); - fflush (kmsg); // Otherwise, flush will only happen after the prog runs. + if (kmsg != NULL) + { + fprintf (kmsg, "%s (%s): stapbpf: %s, name: %s, d_size: %lu\n", + module_basename, script_name, VERSION, name, (unsigned long)data->d_size); + fflush (kmsg); // Otherwise, flush will only happen after the prog runs. + } int fd = bpf_prog_load(prog_type, static_cast(data->d_buf), data->d_size, module_license, kernel_version); if (fd < 0) @@ -1575,5 +1578,7 @@ main(int argc, char **argv) - kmsg = fopen("/dev/kmsg", "a"); + kmsg = fopen("/dev/kmsg", "w"); + if (kmsg == NULL) + fprintf(stderr, "WARNING: could not open /dev/kmsg for diagnostics: %s\n", strerror(errno)); load_bpf_file(argv[optind]); init_internal_globals();