• Jan Engelhardt's avatar
    netfilter: xtables: make ip_tables reentrant · f3c5c1bf
    Jan Engelhardt authored
    Currently, the table traverser stores return addresses in the ruleset
    itself (struct ip6t_entry->comefrom). This has a well-known drawback:
    the jumpstack is overwritten on reentry, making it necessary for
    targets to return absolute verdicts. Also, the ruleset (which might
    be heavy memory-wise) needs to be replicated for each CPU that can
    possibly invoke ip6t_do_table.
    
    This patch decouples the jumpstack from struct ip6t_entry and instead
    puts it into xt_table_info. Not being restricted by 'comefrom'
    anymore, we can set up a stack as needed. By default, there is room
    allocated for two entries into the traverser.
    
    arp_tables is not touched though, because there is just one/two
    modules and further patches seek to collapse the table traverser
    anyhow.
    Signed-off-by: default avatarJan Engelhardt <jengelh@medozas.de>
    Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
    f3c5c1bf
ip_tables.c 55.8 KB