Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
SQLippool redundancy - segmentation fault #1640
Comments
tapkuncoup
commented
Jul 7, 2016
•
|
I dug a bit more into this and managed to add debugging symbols to the gdb trace (should have done this from the start, sadly I'm pretty much a sucker in development and didn't put a finger on gdb since my university time, and that was 10 years ago..)
(...)
If i understand this correctly, the handle variable is set to NULL, and that's the reason I'm getting a SIGSEGV. Sadly, that's about as far I can get with my shitty programming skills. I tried to read the source code of the sqlippool_command function but I'm not able to understand it well enough to suggest a fix. Any insight on how I could make progress on this would be deeply appreciated. Regards. |
tapkuncoup
commented
Jul 7, 2016
•
|
Some more trace (step-by-step) : Breakpoint 2, sqlippool_command (fmt=0x555555a5ceb0 "START TRANSACTION", handle=handle@entry=0x555555af2750, data=data@entry=0x555555a5c760, request=request@entry=0x555555b8b0c0, param=param@entry=0x0,
param_len=param_len@entry=0) at src/modules/rlm_sqlippool/rlm_sqlippool.c:294
294 {
(gdb) n
303 if (!fmt || !*fmt) return 0;
(gdb) n
294 {
(gdb) n
303 if (!fmt || !*fmt) return 0;
(gdb) n
294 {
(gdb) n
296 char *expanded = NULL;
(gdb) n
303 if (!fmt || !*fmt) return 0;
(gdb) n
308 sqlippool_expand(query, sizeof(query), fmt, data, param, param_len);
(gdb) n
310 if (radius_axlat(&expanded, request, query, data->sql_inst->sql_escape_func, data->sql_inst) < 0) {
(gdb) n
(1) sqlippool: EXPAND START TRANSACTION
(1) sqlippool: --> START TRANSACTION
314 ret = data->sql_inst->sql_query(data->sql_inst, request, &handle, expanded);
(gdb) print &handle
$12 = (rlm_sql_handle_t **) 0x7fffffffb778
(gdb) print request
$13 = (REQUEST *) 0x555555b8b0c0
(gdb) n
(1) sqlippool: Executing query: START TRANSACTION
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reconnecting (0)
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Couldn't connect to MySQL server radius@192.168.1.130:radius
rlm_sql_mysql: MySQL error: Can't connect to MySQL server on '192.168.1.130' (111)
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reserved connection (1)
(1) sqlippool: Executing query: START TRANSACTION
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reconnecting (1)
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Couldn't connect to MySQL server radius@192.168.1.130:radius
rlm_sql_mysql: MySQL error: Can't connect to MySQL server on '192.168.1.130' (111)
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reserved connection (2)
(1) sqlippool: Executing query: START TRANSACTION
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reconnecting (2)
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Couldn't connect to MySQL server radius@192.168.1.130:radius
rlm_sql_mysql: MySQL error: Can't connect to MySQL server on '192.168.1.130' (111)
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reserved connection (3)
(1) sqlippool: Executing query: START TRANSACTION
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reconnecting (3)
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Couldn't connect to MySQL server radius@192.168.1.130:radius
rlm_sql_mysql: MySQL error: Can't connect to MySQL server on '192.168.1.130' (111)
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reserved connection (4)
(1) sqlippool: Executing query: START TRANSACTION
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Reconnecting (4)
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Couldn't connect to MySQL server radius@192.168.1.130:radius
rlm_sql_mysql: MySQL error: Can't connect to MySQL server on '192.168.1.130' (111)
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_standard): Failed to reconnect (4), no free connections are available
315 if (ret < 0){
(gdb) print ret
$14 = 1
(gdb) print handle
$15 = (rlm_sql_handle_t *) 0x0
(gdb) n
319 talloc_free(expanded);
(gdb) print expanded
$16 = 0x555555b8dbd0 "START TRANSACTION"
(gdb) n
321 (data->sql_inst->module->sql_finish_query)(handle, data->sql_inst->config);
(gdb) print handle
$17 = (rlm_sql_handle_t *) 0x0
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
sql_finish_query (handle=0x0, config=0x555555a4f350) at src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c:666
666 rlm_sql_mysql_conn_t *conn = handle->conn; |
arr2036
added a commit
that referenced
this issue
Jul 15, 2016
|
|
arr2036 |
55ad4fb
|
arr2036
added a commit
that referenced
this issue
Jul 15, 2016
|
|
arr2036 |
0d87eaf
|
tapkuncoup commentedJul 3, 2016
•
edited by arr2036
I'm currently setting up a redundant SQL setup for my radius server.
I'm encountering an error when using the redundant command on sqlippool instance.
It seem very similar to the #1359 issue
I upgraded to 3.0.11 after reading this issue. The SQL redundancy works fine for the sql module, but fail with seg fault with the sqlippool module.
I'm using the following testing procedure :
Launching freeradius with both SQL servers UP. Manually shutting down SQL1. Then sending a test accounting-start to my radius server.
Here is the radiusd -X output with gdb backtrace (we see the accounting insert works fine => SQL 1 fails but then SQL2 work OK. Then sqlippool is called, SQL1 fails, and the SEGFAULT is fired) :
I'm not really used to using gdb and such, so if you need me to do additionnal trace (because i probably didn't do it right), just tell me.
Thanks for your help.