/etc/init.d/bird4 fork bombs after 6.0 upgrade

After the 6.0 upgrade, I’m having issue with bird4. The startup script appears to fork bomb when starting:

root@turris:~# ps aux | grep bird
root     15594  3.0  0.0   1356  1172 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15607  0.0  0.0   1356   172 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15608  0.0  0.0   1356   176 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15609  0.0  0.0   1356   176 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15610  0.0  0.0   1356   180 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15611  0.0  0.0   1356   180 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15612  0.0  0.0   1356   184 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15613  0.0  0.0   1356   184 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15614  0.0  0.0   1356   184 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start
root     15615  0.0  0.0   1356   188 pts/0    S+   23:42   0:00 /bin/sh /etc/rc.common /etc/init.d/bird4 start

When I run INIT_TRACE=1 /etc/init.d/bird4 start it appears to get into a loop here, calling the same thing over and over:

+ prepare_kernel kernel1
+ local 'section=kernel1'
+ local disabled
+ local table
+ local kernel_table
+ local import
+ local export
+ local scan_time
+ local persist
+ local learn
+ get_bool disabled kernel1
+ config_get_bool disabled kernel1 disabled
+ local _tmp
+ config_get _tmp kernel1 disabled
+ eval export -n -- '_tmp=${CONFIG_kernel1_disabled:-${4}}'
+ export -n -- '_tmp=0'
+ get_bool 0
+ config_get_bool 0 0
+ local _tmp
+ config_get _tmp 0
+ eval echo '"${CONFIG__tmp_0:-${4}}"'
+ echo
+ get_bool
+ config_get_bool
+ local _tmp
+ config_get _tmp
+ eval echo '"${CONFIG__tmp_:-${4}}"'
+ echo
+ get_bool
+ config_get_bool
+ local _tmp
+ config_get _tmp
+ eval echo '"${CONFIG__tmp_:-${4}}"'
+ echo
+ get_bool
+ config_get_bool
+ local _tmp
+ config_get _tmp
+ eval echo '"${CONFIG__tmp_:-${4}}"'
+ echo

This happens even with the default contents of /etc/config/bird4 from bird1-ipv4-uci (no custom configuration)

System info:

Kernel Version:5.15.74

Model:Turris Omnia

Architecture:ARMv7 Processor rev 1 (v7l)

Firmware Version:TurrisOS 6.0 060aa0021f688d455767b553cfe95e29b6559b7a

As best I can figure, it’s something broken about parsing this block:

config kernel kernel2
    option table 'aux'
    option import 'all'
    option export 'all'
    option kernel_table '100'
    option scan_time '10'
    option learn '1'
    option persist '0'
    option disabled '0'

I think it has to do with the get_bool() function in /etc/bird4/init.d/bird4-lib.sh working differently from the same get_bool() function in /lib/functions.sh