Bug #90722 ndb_config --diff-default crashes with SIGBUS
Submitted: 2 May 2018 20:08 Modified: 25 Oct 2018 11:41
Reporter: Daniël van Eeden (OCA) Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Cluster: Cluster (NDB) storage engine Severity:S3 (Non-critical)
Version:7.6.4 OS:Any
Assigned to: CPU Architecture:Any

[2 May 2018 20:08] Daniël van Eeden
Description:
ndb_config --diff-default crashes with SIGBUS

How to repeat:
Starting program: /bin/ndb_config --diff-default
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGBUS, Bus error.
0x0000000000404715 in print_diff (iter=...)
    at /export/home2/pb2/build/sb_1-28202170-1523555460.9/rpm/BUILD/mysql-cluster-gpl-7.6.4/mysql-cluster-gpl-7.6.4/storage/ndb/tools/ndb_config.cpp:423
423	/export/home2/pb2/build/sb_1-28202170-1523555460.9/rpm/BUILD/mysql-cluster-gpl-7.6.4/mysql-cluster-gpl-7.6.4/storage/ndb/tools/ndb_config.cpp: No such file or directory.
Missing separate debuginfos, use: debuginfo-install mysql-cluster-community-client-7.6.4-2.el7.x86_64
(gdb) info locals
parse_str = '\000' <repeats 299 times>
convert_bytes = false
def_value = 0
len = <optimized out>
memory_convert = <optimized out>
p = 189
val64 = 0
config_value = 0xa29c40 "myhost.example.com"
node_type = 0x479c16 "MGM"
str = "myhost.example.com", '\000' <repeats 262 times>
val32 = 0
(gdb) print iter
$1 = (const Iter &) @0x7fffffffdee0: {m_sectionNo = 0, m_typeOfSection = 2000, m_config = {m_cfg = @0xaf3030, 
    m_currentSection = 32768}}
[5 May 2018 1:24] MySQL Verification Team
verified as shown with 7.6.5

[root@localhost mysql]# bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @127.0.0.1  (mysql-5.7.20 ndb-7.6.5, starting, Nodegroup: 0, *)
id=3    @127.0.0.1  (mysql-5.7.20 ndb-7.6.5, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @127.0.0.1  (mysql-5.7.20 ndb-7.6.5)

[mysqld(API)]   5 node(s)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
id=8 (not connected, accepting connect from any host)

[root@localhost mysql]# bin/ndb_config

[root@localhost mysql]# bin/ndb_config --diff-default
Segmentation fault (core dumped)
[root@localhost mysql]#

kind regards
Bogdan
[5 May 2018 1:39] MySQL Verification Team
[root@localhost mysql]# gdb -directory=/home/arhimed/mysql/mysql-cluster-gpl-7.6.5/storage/ndb/tools/ --args bin/ndb_config --diff-default
GNU gdb (GDB) Fedora 7.10.1-31.fc23
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from bin/ndb_config...done.
(gdb) run
Starting program: /usr/local/mysql-cluster-gpl-7.6.5-linux-glibc2.12-x86_64/bin/ndb_config --diff-default
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGBUS, Bus error.
0x000000000040b95e in print_diff (iter=...) at /export/home/pb2/build/sb_0-28225317-1523655308.43/mysql-cluster-gpl-7.6.5/storage/ndb/tools/ndb_config.cpp:423
423             if (parse_str[len] == 'M' || parse_str[len] == 'm')
(gdb) print len
$1 = 4294967295
(gdb)  info locals
parse_str = '\000' <repeats 299 times>
convert_bytes = false
def_value = 0
len = 4294967295
memory_convert = <optimized out>
p = <optimized out>
val64 = 0
config_value = 0xa4f820 "localhost"
node_type = 0x475f36 "MGM"
str = "localhost", '\000' <repeats 290 times>
val32 = 0
(gdb) print iter
$2 = (const Iter &) @0x7fffffffe360: {m_sectionNo = 0, m_typeOfSection = 2000, m_config = {m_cfg = @0xa5d3a0, m_currentSection = 32768}}
(gdb) print ConfigInfo::m_ParamInfo[p]._default
value has been optimized out
...
[25 Oct 2018 11:41] Jon Stephens
Documented fix as follows in the NDB 8.0.15 changelog:

        ndb_config --diff-default failed when trying to read a parameter
        whose default value was an empty string.

Closed.