diff options
author | Phil Sutter <phil@nwl.cc> | 2020-02-21 14:55:52 +0100 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2020-02-24 12:04:30 +0100 |
commit | d0446ab11182f6ca2adc486a124895f09a220c6e (patch) | |
tree | 4ef308fcb3c979fb672db1182c39ac838223dae8 /iptables/xtables-restore.c | |
parent | 0f40a8bc49d3f7b815336199931a82f919f37c4e (diff) |
xtables: Review nft_init()
Move common code into nft_init(), such as:
* initial zeroing nft_handle fields
* family ops lookup and assignment to 'ops' field
* setting of 'family' field
This requires minor adjustments in xtables_restore_main() so extra field
initialization doesn't happen before nft_init() call.
As a side-effect, this fixes segfaulting xtables-monitor binary when
printing rules for trace event as in that code-path 'ops' field wasn't
initialized.
Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'iptables/xtables-restore.c')
-rw-r--r-- | iptables/xtables-restore.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/iptables/xtables-restore.c b/iptables/xtables-restore.c index 61a3c920..c472ac9b 100644 --- a/iptables/xtables-restore.c +++ b/iptables/xtables-restore.c @@ -360,15 +360,13 @@ static int xtables_restore_main(int family, const char *progname, int argc, char *argv[]) { const struct builtin_table *tables; - struct nft_handle h = { - .family = family, - .restore = true, - }; - int c; struct nft_xt_restore_parse p = { .commit = true, .cb = &restore_cb, }; + bool noflush = false; + struct nft_handle h; + int c; line = 0; @@ -402,7 +400,7 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) print_usage(prog_name, PACKAGE_VERSION); exit(0); case 'n': - h.noflush = 1; + noflush = true; break; case 'M': xtables_modprobe_program = optarg; @@ -457,13 +455,15 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) return 1; } - if (nft_init(&h, tables) < 0) { + if (nft_init(&h, family, tables) < 0) { fprintf(stderr, "%s/%s Failed to initialize nft: %s\n", xtables_globals.program_name, xtables_globals.program_version, strerror(errno)); exit(EXIT_FAILURE); } + h.noflush = noflush; + h.restore = true; xtables_restore_parse(&h, &p); |