> 17 окт. 2017 г., в 1:14, Stuart Henderson <s...@spacehopper.org> написал(а):
> 
> On 2017/10/16 11:54, kasak wrote:
>> 
>>> 13 окт. 2017 г., в 18:39, Stuart Henderson <s...@spacehopper.org> 
>>> написал(а):
>>> 
>>> On 2017/10/13 13:49, Stuart Henderson wrote:
>>>> Thanks. So looking at this and the source code, it shows it is using 
>>>> strchr()
>>>> to look for the position of a space character in the payload data. But the 
>>>> str*
>>>> functions expect a NUL-terminated string, and the string here is not, so 
>>>> strchr
>>>> searches beyond the end of the payload, looking for either a NUL or a 
>>>> space.
>>>> 
>>>> This code hasn't changed in 3.0, so the problem will still exist there.
>>>> 
>>>> I have created an issue upstream: 
>>>> https://github.com/ntop/ntopng/issues/1518
>>>> 
>>> 
>>> Upstream have committed a fix to their repository, which I have
>>> applied to the ports tree.
>>> 
>>> If you don't have the ports tree on your system already, follow "Getting
>>> the ports and xenocara trees" on https://www.openbsd.org/anoncvs.html
>>> (I have committed it to the -current and 6.2-stable branches).
>>> 
>>> Before building, "pkg_add libtool autoconf%2.69 automake%1.15 gmake"
>>> to save time building dependencies, then "cd /usr/ports/net/ntopng &&
>>> make package && doas make update".
>>> 
>>> Alternatively if you use -current snapshots it will show up in the
>>> binary packages in a few days.
>>> 
>> 
>> Hello again! I just built port and start testing it again, 
>> This time it crashed with this:
>> 
>> Program received signal SIGSEGV, Segmentation fault.
>> [Switching to thread 118222]
>> 0x000006de1f6a6397 in ndpi_search_bgp () from /usr/local/bin/ntopng
>> Current language:  auto; currently minimal
>> 
>> Here is bt full:
>> 
>> #0  0x000006de1f6a6397 in ndpi_search_bgp () from /usr/local/bin/ntopng
>> No symbol table info available.
>> #1  0x000006de1f6a210b in check_ndpi_tcp_flow_func ()
>>   from /usr/local/bin/ntopng
>> No symbol table info available.
> 
> Are you able to rebuild the port with debug symbols?
> 
> make clean=all
> make DEBUG=-g repackage reinstall
> 
> Hopefully there will be some more information in the backtrace next time
> it crashes. With a bit of luck, line numbers and more information about
> variables.
> 
> If you get the same crash, do 'p packet' as well as the 'bt full'.
> 
> 
>> #2  0x000006de1f6a2f68 in ndpi_detection_process_packet ()
>>   from /usr/local/bin/ntopng
>> No symbol table info available.
>> #3  0x000006de1f64c50e in NetworkInterface::processPacket (
>>    this=0x6e0d1b8a1d0, when=0x6e1011b07e8, time=1508133385021, 
>>    eth=0x6e0b51f0fbe, vlan_id=0, iph=0x6e0b51f0fcc, ip6=0x0, ipsize=46, 
>>    rawsize=60, h=0x6e1011b07e8, packet=0x6e0b51f0fbe "", 
>>    shaped=0x6e04d0b714d, ndpiProtocol=0x6e04d0b714e)
>>    at src/NetworkInterface.cpp:897
>>        ndpi_flow = (ndpi_flow_struct *) 0x6e0bf67d800
>>        cli = (struct ndpi_id_struct *) 0x6e09236df00
>>        srv = (struct ndpi_id_struct *) 0x6e107270c00
>>        src2dst_direction = true
>>        l4_proto = 6 '\006'
>>        flow = (class Flow *) 0x6e09f185c00
>>        eth_src = (u_int8_t *) 0x6e0b51f0fc4 "T\004??\033?\b"
>>        eth_dst = (u_int8_t *) 0x6e0b51f0fbe ""
>>        src_ip = {addr = {ipVersion = 4 '\004', localHost = 0 '\0', 
>>    privateIP = 1 '\001', multicastIP = 0 '\0', broadcastIP = 0 '\0', 
>>    notUsed = 0 '\0', ipType = {ipv6 = {u6_addr = {
>>          u6_addr8 = 0x6e04d0b6d0c "??\003?", u6_addr16 = 0x6e04d0b6d0c, 
>>          u6_addr32 = 0x6e04d0b6d0c}}, ipv4 = 3523455168}}, 
>>  ip_key = 3232236498}
>>        dst_ip = {addr = {ipVersion = 4 '\004', localHost = 0 '\0', 
>>    privateIP = 0 '\0', multicastIP = 0 '\0', broadcastIP = 0 '\0', 
>>    notUsed = 0 '\0', ipType = {ipv6 = {u6_addr = {
>>          u6_addr8 = 0x6e04d0b6cf4 "??p\v", u6_addr16 = 0x6e04d0b6cf4, 
>>          u6_addr32 = 0x6e04d0b6cf4}}, ipv4 = 191949268}}, 
>>  ip_key = 3572068363}
>>        src_port = 24282
>>        dst_port = 36608
>>        payload_len = 6
>>        tcph = (ndpi_tcphdr *) 0x6e0b51f0fe0
>>        udph = (ndpi_udphdr *) 0x0
>>        l4_packet_len = 26
>>        l4 = (u_int8_t *) 0x6e0b51f0fe0 "?^"
>>        tcp_flags = 24 '\030'
>>        payload = (u_int8_t *) 0x6e0b51f0ff4 "DONE\r\n"
>>        ip = (u_int8_t *) 0x6e0b51f0fcc "E"
>>        is_fragment = false
>>        new_flow = true
>>        pass_verdict = true
>>        a_shaper_id = 0
>>        b_shaper_id = 0
>> #4  0x000006de1f64e81d in NetworkInterface::dissectPacket (
>>    this=0x6e0d1b8a1d0, h=0x6e1011b07e8, packet=0x6e0b51f0fbe "", 
>>    shaped=0x6e04d0b714d, ndpiProtocol=0x6e04d0b714e)
>>    at src/NetworkInterface.cpp:1403
>>        frag_off = 16384
>>        iph = (ndpi_iphdr *) 0x6e0b51f0fcc
>>        ip6 = (ndpi_ipv6hdr *) 0x0
>>        ba = (class std::bad_alloc &) @0x6e049dfaa20: {<std::exception> = {
>>    _vptr$exception = 0x6e085c1eec0}, <No data fields>}
>>        srcHost = (class Host *) 0x6e1094ca000
>>        dstHost = (class Host *) 0x6e078b60000
>>        lasttime = 1508133385021
>>        oom_warning_sent = false
>>        oom_warning_sent = false
>>        ethernet = (ndpi_ethhdr *) 0x6e0b51f0fbe
>>        dummy_ethernet = {h_dest = 0x6e04d0b7050 "\200p\vM?\006", 
>>  h_source = 0x6e04d0b7056 "", h_proto = 1760}
>> ---Type <return> to continue, or q <return> to quit---
>>        time = 1508133385021
>>        eth_type = 2048
>>        ip_offset = 14
>>        vlan_id = 0
>>        eth_offset = 0
>>        null_type = 2515945984
>>        pcap_datalink_type = 1
>>        pass_verdict = true
>> #5  0x000006de1f602e3b in _ZL14packetPollLoopPv (ptr=0x6e0d1b8a1d0)
>>    at src/PcapInterface.cpp:187
>>        p = 37
>>        shaped = false
>>        pkt = (const u_char *) 0x6e0b51f0fbe ""
>>        hdr = (pcap_pkthdr *) 0x6e1011b07e8
>>        rc = 1
>>        iface = (PcapInterface *) 0x6e0d1b8a1d0
>>        pd = (pcap_t *) 0x6e1011b0600
>>        pcap_list = (FILE *) 0x0
>> #6  0x000006e042a33cae in _rthread_start (v=Variable "v" is not available.
>> )
>>    at /usr/src/lib/librthread/rthread.c:96
>>        retval = (void *) 0x6e0b51f0ff4
>> #7  0x000006e07a1bce0b in __tfork_thread ()
>>    at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75
>> No locals.
>> #8  0x0000000000000000 in ?? ()
>> No symbol table info available.

Here it is:

Program received signal SIGSEGV, Segmentation fault.
[Switching to thread 246575]
ndpi_search_bgp (ndpi_struct=0xa1853e43000, flow=0xa18de6fa800) at 
protocols/bgp.c:43
43           && ((packet->tcp->dest == bgp_port) || (packet->tcp->source == 
bgp_port))
Current language:  auto; currently minimal

(gdb) bt full
#0  ndpi_search_bgp (ndpi_struct=0xa1853e43000, flow=0xa18de6fa800) at 
protocols/bgp.c:43
No locals.
#1  0x00000a1616ea210b in check_ndpi_tcp_flow_func (ndpi_struct=0xa1853e43000, 
flow=0xa18de6fa800, ndpi_selection_packet=0xa189424b5c0) at ndpi_main.c:3148
        proto_id = Variable "proto_id" is not available.

(gdb) p packet
No symbol "packet" in current context.

Does this look like this: https://github.com/ntop/nDPI/issues/181 
<https://github.com/ntop/nDPI/issues/181> ? Or it is something else?

Reply via email to