You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "James E. King III (JIRA)" <ji...@apache.org> on 2019/02/10 13:13:00 UTC

[jira] [Commented] (THRIFT-4533) C Framed transport causes sigsev from time to time

    [ https://issues.apache.org/jira/browse/THRIFT-4533?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16764407#comment-16764407 ] 

James E. King III commented on THRIFT-4533:
-------------------------------------------

You said framed, but in your stack the multiplexed protocol is using binary protocol to read the size.  Did you align the protocols properly on both sides?

> C Framed transport causes sigsev from time to time
> --------------------------------------------------
>
>                 Key: THRIFT-4533
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4533
>             Project: Thrift
>          Issue Type: Bug
>          Components: C glib - Library
>    Affects Versions: 0.10.0
>            Reporter: Gonzalo Aguilar
>            Priority: Major
>
> It seems that from time to time Apache Thrift receives a package that doesn't complies with what's expected and it causes a sigsev.
> It happens reading the frame.
>  
> {{Thread #1 [sg64_hardware_m] 14184 [core: 22] (Suspended : Signal : SIGSEGV:Segmentation fault)    }}
> {{    thrift_framed_transport_read_frame() at /home/gaguilar/thrift/thrift/lib/c_glib/src/thrift/c_glib/transport/thrift_framed_transport.c:98 0x7ffff7bc9bbd    }}
> {{    thrift_framed_transport_read_slow() at /home/gaguilar/thrift/thrift/lib/c_glib/src/thrift/c_glib/transport/thrift_framed_transport.c:134 0x7ffff7bc9c3f    }}
> {{    thrift_transport_real_read_all() at /home/gaguilar/thrift/thrift/lib/c_glib/src/thrift/c_glib/transport/thrift_transport.c:122 0x7ffff7bc6004    }}
> {{    thrift_binary_protocol_read_i32() at /home/gaguilar/thrift/thrift/lib/c_glib/src/thrift/c_glib/protocol/thrift_binary_protocol.c:712 0x7ffff7bc27ee    }}
> {{    thrift_binary_protocol_read_message_begin() at /home/gaguilar/thrift/thrift/lib/c_glib/src/thrift/c_glib/protocol/thrift_binary_protocol.c:410 0x7ffff7bc20b0    }}
> {{    thrift_multiplexed_processor_process_impl() at /home/gaguilar/thrift/thrift/lib/c_glib/src/thrift/c_glib/processor/thrift_multiplexed_processor.c:83 0x7ffff7bbf38b    }}
> {{    thrift_simple_server_serve() at /home/gaguilar/thrift/thrift/lib/c_glib/src/thrift/c_glib/server/thrift_simple_server.c:58 0x7ffff7bcac25    }}
> {{    main() at /home/gaguilar/workspace-c/moverick-hardware-monitor/src/sg64_hardware_monitor_main.c:254 0x555555557dd3    }}
>  
>  
> {{}}{{transport    ThriftTransport *    0x555555825440    }}
> {{transport@entry    ThriftTransport *    0x555555825440    }}
> {{error    GError **    0x7fffffffca60    }}
> {{error@entry    GError **    0x7fffffffca60    }}
> {{tmpdata    guchar *    0x7fffe9fcc760 <error: No se puede acceder a la memoria en la dirección 0x7fffe9fcc760>    }}
> {{t    ThriftFramedTransport *    0x555555825440    }}
> {{sz    guint32    369295616    }}
> {{bytes    gint32    <optimized out>    }}
> {{result    gboolean    0    }}
>  
> As can be seen it's requesting about 370Mb. So I suppose it's a spurious message that arrived over wire. Maybe a port scanning. I have reports that it happens even when nothing is connected to the wire. Something it seems strange to me.
>  
> I cannot see how may bytes are read because compiler optimized it. But I can see that it looks like system allocated that memory into tmpdata. What seems weird is that compiler cannot access that memory direction. So I wonder if that address is wrong and causing the sigsev.
>  
> A possible patch is to know in advance how many bytes a package can have, and therefore set a limit to what we can allocate and read. The problem is that we must know about the upper layers something that breaks a little bit the layered design.
>  
> What do you think?
>  
>  
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)