g_malloc never returns



Hi,

I'm currently stuck in development of a threaded glib/gobject based app on
Redhat Linux 9 with glib 2.2.1.

The app receives XML messages over tcp. When G_IO_IN is signaled on the
underlying g_io_channel I call a function to split and push the received
message to a GQueue.

For some reason a call to g_strsplit, more exactly the g_malloc call, never
returns.

Please accept my apologies for the long post.

Here are some code excerpts:

/* this func is used for handling incoming data of a channel */
gboolean conn_input_event_func (GIOChannel *iochannel, GIOCondition
condition, gpointer data)
{
TMDPTCPConnection *tcpconn;
gsize bytes_read;
GIOStatus status;
GError *error = NULL;
TMDPConfig *tmdpconfig;

g_return_val_if_fail (condition == G_IO_IN, FALSE);
g_return_val_if_fail (data != NULL, FALSE); /* we need our connection here
*/

  tcpconn = (TMDPTCPConnection*)data;
  g_static_mutex_lock (&tcpconn->access_mutex);
  tmdpconfig = tmdp_tcp_connection_get_config (tcpconn);


if (tcpconn->connsock == NULL)
{
g_fprintf (stderr, "tmdp-tcp-connection::conn_input_event_func:
tcpconn->connsock == NULL!\n");
g_static_mutex_unlock (&tcpconn->access_mutex);
return TRUE;
}

g_static_mutex_lock (&tmdpconfig->access_mutex);
status = g_io_channel_read_chars (iochannel, tmdpconfig->inbuffer,
TMDP_BUFFER_SIZE-1,
&bytes_read, &error);
tmdpconfig->inbuffer[bytes_read] = '\0'; /* add a nul char to the end of the
buffer */
g_static_mutex_unlock (&tmdpconfig->access_mutex);
g_static_mutex_unlock (&tcpconn->access_mutex);

  if (status == G_IO_STATUS_EOF)
   {
    /* TODO LOG */
    g_object_unref (G_OBJECT (tcpconn));


    return TRUE;
   }


if (status != G_IO_STATUS_NORMAL)
{
if (error)
{
g_fprintf (stderr, "tmdp-tcp-connection::conn_input_event_func:
g_io_channel_read_chars () returned error: %s\n",
error->message); /* TODO LOG */
g_clear_error (&error);
}
else
{
g_fprintf (stderr, "tmdp-tcp-connection::conn_input_event_func:
g_io_channel_read_chars () failed\n");
}
/* TODO LOG */
g_object_unref (G_OBJECT (tcpconn));

    return TRUE;
   }


g_static_mutex_lock (&tmdpconfig->access_mutex);

/* split push the received data into the out queue */
if (!split_and_push_messages (tcpconn->listener, tmdpconfig->inbuffer,
&error))
{
/* TODO LOG */
g_fprintf (stderr, "tmdp-tcp-connection::conn_input_event_func:
split_and_push_messages "
"returned %s\n", error->message);
}

g_static_mutex_unlock (&tmdpconfig->access_mutex);

  return TRUE;
 }




gboolean split_and_push_messages (TMDPTCPListener *listener, gchar *msg,
GError **error)
{
gchar **docs = NULL,
**docs2 = NULL,
*str = NULL;
gint i, j;
TMDPIdmef *idmef;

static gchar incompletebuf[TMDP_BUFFER_SIZE] = ""; /* this one is used for
incomplete messages */
static gboolean incomplete = FALSE; /* this one also */

#ifdef LIBTMDP_DEBUG
  g_fprintf (stderr, "split_and_push_messages called\n");
#endif


g_return_val_if_fail (listener != NULL || msg != NULL, FALSE);

  /* split data if more than one idmef xml doc is received at once */
  docs = g_strsplit (msg, IDMEF_MSG_SUFFIX, 0); <== this one never returns
...
}


Here is a gdb backtrace:

(gdb) info thread
* 4 Thread 32771 (LWP 28020) 0x4025b985 in __pthread_sigsuspend () from
/lib/i686/libpthread.so.0
3 Thread 16386 (LWP 28015) 0x403399b4 in malloc_consolidate () from
/lib/i686/libc.so.6
2 Thread 32769 (LWP 28014) 0x4039e357 in poll () from /lib/i686/libc.so.6
1 Thread 16384 (LWP 28013) 0x4025b985 in __pthread_sigsuspend () from
/lib/i686/libpthread.so.0
(gdb) thread 3
[Switching to thread 3 (Thread 16386 (LWP 28015))]#0 0x403399b4 in
malloc_consolidate () from /lib/i686/libc.so.6
(gdb) bt full
#0 0x403399b4 in malloc_consolidate () from /lib/i686/libc.so.6
No symbol table info available.
#1 0x40339007 in _int_malloc () from /lib/i686/libc.so.6
No symbol table info available.
#2 0x40338201 in malloc () from /lib/i686/libc.so.6
No symbol table info available.
#3 0x400f6589 in g_malloc (n_bytes=1077916672) at gmem.c:136
mem = 0x403fb400
#4 0x401058e3 in g_strsplit (string=0x80859e0 "<?xml
version=\"1.0\"?>\n<!DOCTYPE IDMEF-Message PUBLIC \"-//IETF//DTD RFC XXXX
IDMEF v1.0//EN\" \"idmef-message.dtd\">\n<IDMEF-Message
version=\"1.0\"><Alert ident=\"448\"><Analyzer analyzerid=\"1\"
model=\"snort\" version=\"2.1.2\" ostype=\"Linux\"
osversion=\"2.4.21\"><Node><name>pluto</name></Node></Analyzer><CreateTime
ntpstamp=\"0xc45b3eb6.0x2b7e6f71\">2004-05-23T15:16:06Z</CreateTime><Source><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node><Service><name>icmp</name><protocol>icmp:type=8:code=0</protocol></Service></Source><Target><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node></Target><Classification
origin=\"vendor-specific\"><name>msg=ICMP PING
BSDtype</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>sid=368</name><url>http://www.snort.org/snort-db/sid.html?sid=368</url></Classification><Classification
origin=\"vendor-specific\"><name>class=misc-activity</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>priority=3</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>arachNIDS=152</name><url>http://www.whitehats.com/info/IDS152</url></Classification><Assessment><Impact
severity=\"high\"/></Assessment><AdditionalData meaning=\"sig_rev\"
type=\"string\">4</AdditionalData></Alert></IDMEF-Message>\n<?xml
version=\"1.0\"?>\n<!DOCTYPE IDMEF-Message PUBLIC \"-//IETF//DTD RFC XXXX
IDMEF v1.0//EN\" \"idmef-message.dtd\">\n<IDMEF-Message
version=\"1.0\"><Alert ident=\"449\"><Analyzer analyzerid=\"1\"
model=\"snort\" version=\"2.1.2\" ostype=\"Linux\"
osversion=\"2.4.21\"><Node><name>pluto</name></Node></Analyzer><CreateTime
ntpstamp=\"0xc45b3eb6.0x2bc3a42f\">2004-05-23T15:16:06Z</CreateTime><Source><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node><Service><name>icmp</name><protocol>icmp:type=0:code=0</protocol></Service></Source><Target><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node></Target><Classification
origin=\"vendor-specific\"><name>msg=ICMP Echo
Reply</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>sid=408</name><url>http://www.snort.org/snort-db/sid.html?sid=408</url></Classification><Classification
origin=\"vendor-specific\"><name>class=misc-activity</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>priority=3</name><url>none</url></Classification><Assessment><Impact
severity=\"high\"/></Assessment><AdditionalData meaning=\"sig_rev\"
type=\"string\">4</AdditionalData></Alert></IDMEF-Message>\n",
delimiter=0x4003e3f8 "</IDMEF-Message>", max_tokens=2147483646) at
gstrfuncs.c:2160
string_list = (GSList *) 0x0
slist = (GSList *) 0x48
str_array = (gchar **) 0x403fb400
s = (gchar *) 0x8085f1b "</IDMEF-Message>\n<?xml
version=\"1.0\"?>\n<!DOCTYPE IDMEF-Message PUBLIC \"-//IETF//DTD RFC XXXX
IDMEF v1.0//EN\" \"idmef-message.dtd\">\n<IDMEF-Message
version=\"1.0\"><Alert ident=\"449\"><Analyzer analyzerid=\"1\"
model=\"snort\" version=\"2.1.2\" ostype=\"Linux\"
osversion=\"2.4.21\"><Node><name>pluto</name></Node></Analyzer><CreateTime
ntpstamp=\"0xc45b3eb6.0x2bc3a42f\">2004-05-23T15:16:06Z</CreateTime><Source><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node><Service><name>icmp</name><protocol>icmp:type=0:code=0</protocol></Service></Source><Target><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node></Target><Classification
origin=\"vendor-specific\"><name>msg=ICMP Echo
Reply</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>sid=408</name><url>http://www.snort.org/snort-db/sid.html?sid=408</url></Classification><Classification
origin=\"vendor-specific\"><name>class=misc-activity</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>priority=3</name><url>none</url></Classification><Assessment><Impact
severity=\"high\"/></Assessment><AdditionalData meaning=\"sig_rev\"
type=\"string\">4</AdditionalData></Alert></IDMEF-Message>\n"
n = 0
remainder = (const gchar *) 0x80859e0 "<?xml version=\"1.0\"?>\n<!DOCTYPE
IDMEF-Message PUBLIC \"-//IETF//DTD RFC XXXX IDMEF v1.0//EN\"
\"idmef-message.dtd\">\n<IDMEF-Message version=\"1.0\"><Alert
ident=\"448\"><Analyzer analyzerid=\"1\" model=\"snort\" version=\"2.1.2\"
ostype=\"Linux\"
osversion=\"2.4.21\"><Node><name>pluto</name></Node></Analyzer><CreateTime
ntpstamp=\"0xc45b3eb6.0x2b7e6f71\">2004-05-23T15:16:06Z</CreateTime><Source><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node><Service><name>icmp</name><protocol>icmp:type=8:code=0</protocol></Service></Source><Target><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node></Target><Classification
origin=\"vendor-specific\"><name>msg=ICMP PING
BSDtype</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>sid=368</name><url>http://www.snort.org/snort-db/sid.html?sid=368</url></Classification><Classification
origin=\"vendor-specific\"><name>class=misc-activity</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>priority=3</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>arachNIDS=152</name><url>http://www.whitehats.com/info/IDS152</url></Classification><Assessment><Impact
severity=\"high\"/></Assessment><AdditionalData meaning=\"sig_rev\"
type=\"string\">4</AdditionalData></Alert></IDMEF-Message>\n<?xml
version=\"1.0\"?>\n<!DOCTYPE IDMEF-Message PUBLIC \"-//IETF//DTD RFC XXXX
IDMEF v1.0//EN\" \"idmef-message.dtd\">\n<IDMEF-Message
version=\"1.0\"><Alert ident=\"449\"><Analyzer analyzerid=\"1\"
model=\"snort\" version=\"2.1.2\" ostype=\"Linux\"
osversion=\"2.4.21\"><Node><name>pluto</name></Node></Analyzer><CreateTime
ntpstamp=\"0xc45b3eb6.0x2bc3a42f\">2004-05-23T15:16:06Z</CreateTime><Source><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node><Service><name>icmp</name><protocol>icmp:type=0:code=0</protocol></Service></Source><Target><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node></Target><Classification
origin=\"vendor-specific\"><name>msg=ICMP Echo
Reply</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>sid=408</name><url>http://www.snort.org/snort-db/sid.html?sid=408</url></Classification><Classification
origin=\"vendor-specific\"><name>class=misc-activity</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>priority=3</name><url>none</url></Classification><Assessment><Impact
severity=\"high\"/></Assessment><AdditionalData meaning=\"sig_rev\"
type=\"string\">4</AdditionalData></Alert></IDMEF-Message>\n"
#5 0x4003704c in split_and_push_messages (listener=0x8079e20, msg=0x80859e0
"<?xml version=\"1.0\"?>\n<!DOCTYPE IDMEF-Message PUBLIC \"-//IETF//DTD RFC
XXXX IDMEF v1.0//EN\" \"idmef-message.dtd\">\n<IDMEF-Message
version=\"1.0\"><Alert ident=\"448\"><Analyzer analyzerid=\"1\"
model=\"snort\" version=\"2.1.2\" ostype=\"Linux\"
osversion=\"2.4.21\"><Node><name>pluto</name></Node></Analyzer><CreateTime
ntpstamp=\"0xc45b3eb6.0x2b7e6f71\">2004-05-23T15:16:06Z</CreateTime><Source><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node><Service><name>icmp</name><protocol>icmp:type=8:code=0</protocol></Service></Source><Target><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node></Target><Classification
origin=\"vendor-specific\"><name>msg=ICMP PING
BSDtype</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>sid=368</name><url>http://www.snort.org/snort-db/sid.html?sid=368</url></Classification><Classification
origin=\"vendor-specific\"><name>class=misc-activity</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>priority=3</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>arachNIDS=152</name><url>http://www.whitehats.com/info/IDS152</url></Classification><Assessment><Impact
severity=\"high\"/></Assessment><AdditionalData meaning=\"sig_rev\"
type=\"string\">4</AdditionalData></Alert></IDMEF-Message>\n<?xml
version=\"1.0\"?>\n<!DOCTYPE IDMEF-Message PUBLIC \"-//IETF//DTD RFC XXXX
IDMEF v1.0//EN\" \"idmef-message.dtd\">\n<IDMEF-Message
version=\"1.0\"><Alert ident=\"449\"><Analyzer analyzerid=\"1\"
model=\"snort\" version=\"2.1.2\" ostype=\"Linux\"
osversion=\"2.4.21\"><Node><name>pluto</name></Node></Analyzer><CreateTime
ntpstamp=\"0xc45b3eb6.0x2bc3a42f\">2004-05-23T15:16:06Z</CreateTime><Source><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node><Service><name>icmp</name><protocol>icmp:type=0:code=0</protocol></Service></Source><Target><Node><Address
category=\"ipv4-addr\"><address>127.0.0.1</address></Address></Node></Target><Classification
origin=\"vendor-specific\"><name>msg=ICMP Echo
Reply</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>sid=408</name><url>http://www.snort.org/snort-db/sid.html?sid=408</url></Classification><Classification
origin=\"vendor-specific\"><name>class=misc-activity</name><url>none</url></Classification><Classification
origin=\"vendor-specific\"><name>priority=3</name><url>none</url></Classification><Assessment><Impact
severity=\"high\"/></Assessment><AdditionalData meaning=\"sig_rev\"
type=\"string\">4</AdditionalData></Alert></IDMEF-Message>\n",
error=0x405fed30) at tmdp-tcp-connection.c:896
docs = (gchar **) 0x0
docs2 = (gchar **) 0x0
str = (gchar *) 0x0
i = 0
j = 134692952
idmef = (TMDPIdmef *) 0x40259da7
incompletebuf = '\0' <repeats 32767 times>
incomplete = 0
#6 0x40035de5 in conn_input_event_func (iochannel=0x8078b90,
condition=G_IO_IN, data=0x808da00) at tmdp-tcp-connection.c:422
tcpconn = (TMDPTCPConnection *) 0x808da00
bytes_read = 2579
status = G_IO_STATUS_NORMAL
error = (GError *) 0x0
tmdpconfig = (TMDPConfig *) 0x8073fc0
#7 0x40111f1f in g_io_unix_dispatch (source=0x8075d10, callback=0x40035944
<conn_input_event_func>, user_data=0x403fb400) at giounix.c:159
buffer_condition = 72
#8 0x400f0bb5 in g_main_dispatch (context=0x804fab8) at gmain.c:1653
i = 0
#9 0x400f1bf8 in g_main_context_dispatch (context=0x8075d10) at gmain.c:2197
No locals.
#10 0x400f1f0d in g_main_context_iterate (context=0x804fab8, block=1,
dispatch=1, self=0x80501e8) at gmain.c:2278
max_priority = 2147483647
timeout = -1
some_ready = 0
nfds = 134700304
allocated_nfds = 1073961284
fds = (GPollFD *) 0x8072ad8
#11 0x400f260f in g_main_loop_run (loop=0x80501d8) at gmain.c:2498
self = (GThread *) 0x80501e8
#12 0x4002ed7c in bg_thread (data=0x0) at tmdp.c:376
No locals.
#13 0x40108ac7 in g_thread_create_proxy (data=0x80501e8) at gthread.c:551
No locals.
#14 0x40259a21 in pthread_start_thread () from /lib/i686/libpthread.so.0
No symbol table info available.
#15 0x40259b25 in pthread_start_thread_event () from
/lib/i686/libpthread.so.0
No symbol table info available.

As you can see in #3 g_malloc is called with n_bytes=1077916672 (which is
0x403fb400) which I couldn't figure out where this comes from.

Any hint is greatly apreciated!

TIA,
Sandro

-- 
NEU : GMX Internet.FreeDSL
Ab sofort DSL-Tarif ohne Grundgebühr: http://www.gmx.net/dsl




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]