#!/bin/bash # # Another funny rename bug in libiptc: # If there is a chain index bucket with only a single chain in it and it is not # the last one and that chain is renamed, a chain index rebuild is triggered. # Since TC_RENAME_CHAIN missed to temporarily decrement num_chains value, an # extra index is allocated and remains NULL. The following insert of renamed # chain then segfaults. ( echo "*filter" # first bucket for ((i = 0; i < 40; i++)); do echo ":chain-a-$i - [0:0]" done # second bucket for ((i = 0; i < 40; i++)); do echo ":chain-b-$i - [0:0]" done # third bucket, just make sure it exists echo ":chain-c-0 - [0:0]" echo "COMMIT" ) | $XT_MULTI iptables-restore # rename all chains of the middle bucket ( echo "*filter" for ((i = 0; i < 40; i++)); do echo "-E chain-b-$i chain-d-$i" done echo "COMMIT" ) | $XT_MULTI iptables-restore --noflush