I tried posting this a few days ago via gmane but it didn't come through,
now retrying directly. Apologies if you get two copies.

I'm running 7.4.5 on OpenBSD, which doesn't have ACLs. I'm seeing a segfault
in the FD:

Thread 4 received signal SIGSEGV, Segmentation fault.
[Switching to thread 556104]
blast_data_to_storage_daemon (jcr=0x15d9b875a028, addr=<optimized out>) at 
backup.c:166
166        if (jcr->xacl->get_acl_nr_errors() > 0) {
(gdb) bt
#0  blast_data_to_storage_daemon (jcr=0x15d9b875a028, addr=<optimized out>) at 
backup.c:166
#1  0x000015d78a212d9b in backup_cmd (jcr=0x15d9b875a028) at job.c:2049
#2  0x000015d78a214547 in handle_director_request (dir=<optimized out>) at 
job.c:312
#3  handle_connection_request (caller=0x15da514a2628) at job.c:457
#4  0x000015da3c3fed79 in workq_server (arg=0x15d78a43aa00 <dir_workq>) at 
workq.c:326
#5  0x000015d9da9c23de in _rthread_start (v=0x0) at 
/usr/src/lib/librthread/rthread.c:114
#6  0x000015da447b24db in __tfork_thread () at 
/usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75
#7  0x0000000000000000 in ?? ()

It looks like it's just missing a null check before trying to dereference
the function pointer (backup.c:166, 170) like is done in 184?

  (gdb) list
  161      if (!find_files(jcr, (FF_PKT *)jcr->ff, save_file, plugin_save)) {
  162         ok = false;                     /* error */
  163         jcr->setJobStatus(JS_ErrorTerminated);
  164      }
  165
> 166      if (jcr->xacl->get_acl_nr_errors() > 0) {
  167         Jmsg(jcr, M_WARNING, 0, _("Had %ld acl errors while doing 
backup\n"), jcr->xacl->get_acl_nr_errors());
  168      }
  169
> 170      if (jcr->xacl->get_xattr_nr_errors() > 0) {
  (gdb) list
  171         Jmsg(jcr, M_WARNING, 0, _("Had %ld xattr errors while doing 
backup\n"), jcr->xacl->get_xattr_nr_errors());
  172      }
  173
  174      /* Delete or keep snapshots */
  175      close_snapshot_backup_session(jcr);
  176      close_vss_backup_session(jcr);
  177
  178      accurate_finish(jcr);              /* send deleted or base file list 
to SD */
  179
  180      stop_heartbeat_monitor(jcr);
  (gdb) list
  181
  182      sd->signal(BNET_EOD);            /* end of sending data */
  183
> 184      if (jcr->xacl) {
  185         delete(jcr->xacl);
  186         jcr->xacl = NULL;
  187      }
  188      if (jcr->big_buf) {
  189         bfree_and_null(jcr->big_buf);
  190      }

Thanks,
Stuart


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Bacula-devel mailing list
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to