Uploaded image for project: 'AMQ Interconnect'
  1. AMQ Interconnect
  2. ENTMQIC-46

dispatch-router coredumps when connector address is unresolvable

    XMLWordPrintable

Details

    • User Experience
    • Hide

      Reproducer: start qdrouterd with:

      connector {
      name: broker
      addr: some.invalid.hostname
      port: 5671
      sasl-mechanisms: ANONYMOUS
      role: on-demand
      ssl-profile: client
      }

      Show
      Reproducer: start qdrouterd with: connector { name: broker addr: some.invalid.hostname port: 5671 sasl-mechanisms: ANONYMOUS role: on-demand ssl-profile: client }
    • Interconnect - June Sprint

    Description

      If host in connector cant be resolved (either invalid hostname or simply `getaddrinfo` fails), qdrouterd coredumps when trying to connect there.

      Backtrace then shows:

      (gdb) bt
      #0 pn_transport_set_max_frame (transport=transport@entry=0x0, size=65536) at /usr/src/debug/qpid-proton-0.9/proton-c/src/transport/transport.c:2541
      #1 0x00007f4df142297a in cxtr_try_open (context=0x7f4ddc0091a0) at /usr/src/debug/qpid-dispatch-0.4/src/server.c:766
      #2 0x00007f4df1422dc7 in thread_run (arg=<optimized out>) at /usr/src/debug/qpid-dispatch-0.4/src/server.c:486
      #3 0x00007f4df0f95df5 in start_thread () from /lib64/libpthread.so.0
      #4 0x00007f4df04f11ad in clone () from /lib64/libc.so.6
      (gdb) frame 1
      #1 0x00007f4df142297a in cxtr_try_open (context=0x7f4ddc0091a0) at /usr/src/debug/qpid-dispatch-0.4/src/server.c:766
      766 pn_transport_set_max_frame(tport, config->max_frame_size);
      (gdb) p ctx->pn_cxtr
      $18 = (qdpn_connector_t *) 0x0
      (gdb)

      pn_cxtr is set by:

      ctx->pn_cxtr = qdpn_connector(ct->server->driver, ct->config->host, ct->config->port, (void*) ctx);

      that returns 0 due to:

      struct addrinfo *addr;
      int code = getaddrinfo(host, port, NULL, &addr);
      if (code)

      { qd_log(driver->log, QD_LOG_ERROR, "getaddrinfo(%s, %s): %s", host, port, gai_strerror(code)); return 0; }

      That triggers the segfault.

      Better return value check missing.

      Attachments

        Issue Links

          Activity

            People

              tross1@redhat.com Ted Ross
              rhn-support-pmoravec Pavel Moravec
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: