Uploaded image for project: 'Traffic Server'
  1. Traffic Server
  2. TS-4222

Seg faults while processing ssl_multicert.config

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 6.2.0
    • 6.1.2, 6.2.0
    • SSL
    • None

    Description

      ATS version 6.2.0 segment fault error while checking config using traffic_server -Cverify_config
      It occurs after "INFO: Successfully loaded plugin.config"

      only entry in ssl_multicert.config is as below,
      dest_ip=* ssl_cert_name=fullchain1.pem ssl_key_name=privkey1.pem

      gdb --args traffic_server -Cverify_config
      (gdb) run
      yields
      INFO: Successfully loaded plugin.config
      Thread 1 "traffic_server" received signal SIGSEGV, Segmentation fault.
      0x0000000000000000 in ?? ()

      (gdb) print SSLConfigParams::load_ssl_file_cb
      $1 = (load_ssl_file_func) 0x0

      Thanks jpeach

      Details:
      http://pastebin.com/K0876r2T
      http://pastebin.com/iP5MAYLu

      Thanks

      Pulling the info from the above pastebin's to jira for posterity.

      git clone https://github.com/tatsuhiro-t/spdylay.git
      cd spdylay/
      autoreconf -if
      automake
      autoconf
      ./configure --prefix=/usr
      make
      make install
      cd ../trafficserver/
      autoreconf -if
      export PKG_CONFIG_PATH=/usr/lib/pkgconfig
      ./configure --enable-spdy --enable-experimental-plugins --enable-linux-native-aio --with-zlib=/root/c/ats/zlib-1.2.8 --with-pcre=/root/c/ats/pcre-8.38 --with-openssl=/root/c/ats/openssl-1.0.1f[WITH CLOUDFLARE PATCH]
      **************
      gdb --args traffic_server -Cverify_config
      ...standard info..
      (gdb) run
      Starting program: /usr/local/bin/traffic_server -Cverify_config
      [Thread debugging using libthread_db enabled]
      Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
      traffic_server: using root directory '/usr/local'
      [New Thread 0x7ffff1f55700 (LWP 19595)]
      NOTE: VERIFY
      
      [New Thread 0x7ffff0c16700 (LWP 19596)]
      [New Thread 0x7ffff0a14700 (LWP 19597)]
      INFO:Successfully loaded remap.config
      
      INFO: Successfully loaded records.config
      
      INFO: Successfully loaded plugin.config
      
      
      Thread 1 "traffic_server" received signal SIGSEGV, Segmentation fault.
      0x0000000000000000 in ?? ()
      
      (gdb) bt full
      #0  0x0000000000000000 in ?? ()
      No symbol table info available.
      #1  0x0000000000789374 in SSLInitServerContext (params=params@entry=0x117a140, sslMultCertSettings=..., certList=...)
          at SSLUtils.cc:1384
              bio = {_r = 0x1181f50}
              cert = 0x1182100
              ca = <optimized out>
              certname = <optimized out>
              cert_tok = {_data = <optimized out>, _delimiter = 44 ',', _mode = 0, _escape = 92 '\\', _start = <optimized out>,
                _length = <optimized out>}
              key_tok = {_data = <optimized out>, _delimiter = 44 ',', _mode = 0, _escape = 92 '\\', _start = 0,
                _length = <optimized out>}
              ca_tok = {_data = <optimized out>, _delimiter = 44 ',', _mode = 0, _escape = 92 '\\', _start = 0,
                _length = <optimized out>}
              server_verify_client = <optimized out>
              completeServerCertPath = <optimized out>
              ctx = <optimized out>
              digest = {digest = 0x0, engine = 0x7ffff7ffe4e0, flags = 140737488346576, md_data = 0x1f7ff7600, pctx = 0x7ffff7ffe188,
                update = 0x7fffffffddc0}
              ca_list = 0x0
              hash_buf = "\277\037D\000\000\000\000\000~KgY\000\000\000\000\377\377\377\377\000\000\000\000@\241\027\001\000\000\000\000\b\206\271\367\377\177\000\000\000v\377\367\377\177\000\000)\371\203\000\000\000\000\000\000l\231\365\377\177\000"
              hash_len = 0
              __FUNCTION__ = "SSLInitServerContext"
              additional_cache_flags = <optimized out>
              ud = {_configParams = 0x117a140, _serverDialog = 0x0, _serverCert = 0x117cef0 "fullchain1.pem",
                _serverKey = 0x117ceb0 "privkey1.pem"}
      #2  0x000000000078a370 in ssl_store_ssl_context (params=params@entry=0x117a140, lookup=lookup@entry=0x117c550,
          sslMultCertSettings=...) at SSLUtils.cc:1666
              cert_list = {n = 1, i = 0, v = 0x7fffffffded8, e = {0x1182100, 0x0, 0x0, 0x0}}
              ctx = <optimized out>
              keyblock = <optimized out>
              inserted = <optimized out>
      #3  0x000000000078b5e5 in SSLParseCertificateConfiguration (params=params@entry=0x117a140, lookup=lookup@entry=0x117c550)
          at SSLUtils.cc:1902
              sslMultiCertSettings = {session_ticket_enabled = 1, addr = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {
                    _r = 0x0}, <No data fields>}, cert = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {
                    _r = 0x117ce90 "fullchain1.pem"}, <No data fields>},
                first_cert = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {
                    _r = 0x117cef0 "fullchain1.pem"}, <No data fields>},
                ca = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {_r = 0x0}, <No data fields>},
                key = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {_r = 0x117ceb0 "privkey1.pem"}, <No data fields>},
                ticket_key_filename = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {_r = 0x0}, <No data fields>},
      ---Type <return> to continue, or q <return> to quit---
                dialog = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {_r = 0x0}, <No data fields>},
                opt = SSLCertContext::OPT_NONE}
              errPtr = <optimized out>
              tok_state = 0x1180cfe ""
              line = <optimized out>
              file_buf = <optimized out>
              line_num = 73
              line_info = {type = MATCH_NONE, dest_entry = 0, num_el = 2, line = {{0x1180cc8 "ssl_cert_name", 0x1180ce5 "ssl_key_name",
                    0x0 <repeats 38 times>}, {0x1180cd6 "fullchain1.pem", 0x1180cf2 "privkey1.pem", 0x0 <repeats 38 times>}},
                line_num = 0, next = 0x0}
              sslCertTags = {match_host = 0x0, match_domain = 0x0, match_ip = 0x0, match_regex = 0x0, match_url = 0x0,
                match_host_regex = 0x0, dest_error_msg = false}
              __FUNCTION__ = "SSLParseCertificateConfiguration"
              __func__ = "SSLParseCertificateConfiguration"
              elevate_setting = <optimized out>
              elevate_access = {elevated = false, saved_uid = 65534, level = 0, cap_state = 0x0}
      #4  0x000000000077709c in SSLCertificateConfig::reconfigure () at SSLConfig.cc:393
              retStatus = true
              params = {ptr = 0x117a140}
              lookup = 0x117c550
              __FUNCTION__ = "reconfigure"
      #5  0x000000000077730c in SSLCertificateConfig::startup () at SSLConfig.cc:371
              params = {ptr = 0x117a140}
              __FUNCTION__ = "startup"
      #6  0x00000000004e6d2b in cmd_verify () at Main.cc:772
              exitStatus = <optimized out>
              params = <optimized out>
      #7  0x0000000000494049 in cmd_mode () at Main.cc:926
      No locals.
      #8  main (argv=<optimized out>) at Main.cc:1751
              admin_user_p = <optimized out>
              enabled = <optimized out>
              __FUNCTION__ = "main"
              user = {<ats_scoped_resource<detail::SCOPED_MALLOC_TRAITS<char> >> = {_r = 0x110ced0 "nobody"}, <No data fields>}
              main_thread = <optimized out>
              mlock_flags = <optimized out>
              machine_addr = {sa = {sa_family = 2, sa_data = "\000\000>qˎ\000\000\000\000\000\000\000"}, sin = {sin_family = 2,
                  sin_port = 0, sin_addr = {s_addr = 2395697470}, sin_zero = "\000\000\000\000\000\000\000"}, sin6 = {sin6_family = 2,
                  sin6_port = 0, sin6_flowinfo = 2395697470, sin6_addr = {__in6_u = {__u6_addr8 = '\000' <repeats 15 times>,
                      __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id = 0}}
              cluster_type = 3
              stacksize = 1048576
      num_remap_threads = <optimized out>
      
      Continued after http://pastebin.com/K0876r2T
      
      (gdb) l
      1458        } else {
      1459          Debug("log", "duping stderr");
      1460          dup2(log_fd, STDERR_FILENO);
      1461          close(log_fd);
      1462        }
      1463      }
      1464    }
      1465
      1466    //
      1467    // Main
      (gdb) l
      1468    //
      1469
      1470    int
      1471    main(int /* argc ATS_UNUSED */, const char **argv)
      1472    {
      1473    #if TS_HAS_PROFILER
      1474      HeapProfilerStart("/tmp/ts.hprof");
      1475      ProfilerStart("/tmp/ts.prof");
      1476    #endif
      1477      bool admin_user_p = false;
      (gdb) l -
      ...same as first , as usual ....
      (gdb) l -
      1448          Debug("log", "duping stdout");
      1449          dup2(log_fd, STDOUT_FILENO);
      1450          close(log_fd);
      1451        }
      1452      }
      1453      if (*bind_stderr != 0) {
      1454        Debug("log", "binding stderr to %s", bind_stderr);
      1455        log_fd = elevating_open(bind_stderr, O_WRONLY | O_APPEND | O_CREAT | O_SYNC, 0644);
      1456        if (log_fd < 0) {
      1457          fprintf(stdout, "[Warning]: TS unable to open log file \"%s\" [%d '%s']\n", bind_stderr, errno, strerror(errno));
      (gdb) l -
      1438    {
      1439      int log_fd;
      1440      unsigned int flags = O_WRONLY | O_APPEND | O_CREAT | O_SYNC;
      1441
      1442      if (*bind_stdout != 0) {
      1443        Debug("log", "binding stdout to %s", bind_stdout);
      1444        log_fd = elevating_open(bind_stdout, flags, 0644);
      1445        if (log_fd < 0) {
      1446          fprintf(stdout, "[Warning]: TS unable to open log file \"%s\" [%d '%s']\n", bind_stdout, errno, strerror(errno));
      1447        } else {
      (gdb) l
      ...same as..
      (gdb) l
      1458        } else {
      1459          Debug("log", "duping stderr");
      1460          dup2(log_fd, STDERR_FILENO);
      1461          close(log_fd);
      1462        }
      1463      }
      1464    }
      1465
      1466    //
      1467    // Main
      (gdb) l
      1468    //
      1469
      1470    int
      1471    main(int /* argc ATS_UNUSED */, const char **argv)
      1472    {
      1473    #if TS_HAS_PROFILER
      1474      HeapProfilerStart("/tmp/ts.hprof");
      1475      ProfilerStart("/tmp/ts.prof");
      1476    #endif
      1477      bool admin_user_p = false;
      (gdb) l
      1478
      1479    #if defined(DEBUG) && defined(HAVE_MCHECK_PEDANTIC)
      1480      mcheck_pedantic(NULL);
      1481    #endif
      1482
      1483      pcre_malloc = ats_malloc;
      1484      pcre_free = ats_free;
      1485
      1486      // Verify system dependent 'constants'
      1487      check_system_constants();
      (gdb) c
      Continuing.
      traffic_server: Segmentation fault (Address not mapped to object [(nil)])
      traffic_server - STACK TRACE:
      /lib/x86_64-linux-gnu/libpthread.so.0(+0x10cd0)[0x7ffff6450cd0]
      
      Thread 1 "traffic_server" received signal SIGSEGV, Segmentation fault.
      0x0000000000000000 in ?? ()
      (gdb) l
      1488
      1489      // Define the version info
      1490      appVersionInfo.setup(PACKAGE_NAME, "traffic_server", PACKAGE_VERSION, __DATE__, __TIME__, BUI;
      1491
      1492      // Before accessing file system initialize Layout engine
      1493      Layout::create();
      1494      chdir_root(); // change directory to the install root of traffic server.
      1495
      1496      process_args(&appVersionInfo, argument_descriptions, countof(argument_descriptions), argv);
      1497      command_flag = command_flag || *command_string;
      (gdb) c
      Continuing.
      Couldn't get registers: No such process.
      Couldn't get registers: No such process.
      Couldn't get registers: No such process.
      (gdb) [Thread 0x7ffff0a14700 (LWP 19601) exited]
      [Thread 0x7ffff0c16700 (LWP 19600) exited]
      [Thread 0x7ffff7fe0780 (LWP 19598) exited]
      

      Attachments

        Activity

          People

            sudheerv Sudheer Vinukonda
            rudra Prakhar Rudra
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: