diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2019-05-20 18:39:31 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2019-05-20 21:05:37 +0200 |
commit | 9014217972c0a81c17524a7d2fdec6381aa42c69 (patch) | |
tree | 3fd62678928db6c6fd7b983d64acec746a9f5010 /iptables | |
parent | 7e042a86353f89d0bb8f8292c0a3fbb5cf13cb0a (diff) |
nft: do not retry on EINTR
Patch ab1cd3b510fa ("nft: ensure cache consistency") already handles
consistency via generation ID.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'iptables')
-rw-r--r-- | iptables/nft.c | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/iptables/nft.c b/iptables/nft.c index f6d40702..9a3e9fdf 100644 --- a/iptables/nft.c +++ b/iptables/nft.c @@ -1383,7 +1383,6 @@ static int fetch_table_cache(struct nft_handle *h) struct nftnl_table_list *list; int ret; -retry: list = nftnl_table_list_alloc(); if (list == NULL) return 0; @@ -1392,11 +1391,9 @@ retry: NLM_F_DUMP, h->seq); ret = mnl_talk(h, nlh, nftnl_table_list_cb, list); - if (ret < 0 && errno == EINTR) { + if (ret < 0 && errno == EINTR) assert(nft_restart(h) >= 0); - nftnl_table_list_free(list); - goto retry; - } + h->cache->tables = list; return 1; @@ -1408,7 +1405,6 @@ static int fetch_chain_cache(struct nft_handle *h) struct nlmsghdr *nlh; int i, ret; -retry: fetch_table_cache(h); for (i = 0; i < NFT_TABLE_MAX; i++) { @@ -1426,11 +1422,8 @@ retry: NLM_F_DUMP, h->seq); ret = mnl_talk(h, nlh, nftnl_chain_list_cb, h); - if (ret < 0 && errno == EINTR) { + if (ret < 0 && errno == EINTR) assert(nft_restart(h) >= 0); - flush_chain_cache(h, NULL); - goto retry; - } return ret; } @@ -1551,22 +1544,13 @@ static int nft_rule_list_update(struct nftnl_chain *c, void *data) nftnl_rule_set_str(rule, NFTNL_RULE_CHAIN, nftnl_chain_get_str(c, NFTNL_CHAIN_NAME)); -retry: nlh = nftnl_rule_nlmsg_build_hdr(buf, NFT_MSG_GETRULE, h->family, NLM_F_DUMP, h->seq); nftnl_rule_nlmsg_build_payload(nlh, rule); ret = mnl_talk(h, nlh, nftnl_rule_list_cb, c); - if (ret < 0) { - flush_rule_cache(c); - - if (errno == EINTR) { - assert(nft_restart(h) >= 0); - goto retry; - } - nftnl_rule_free(rule); - return -1; - } + if (ret < 0 && errno == EINTR) + assert(nft_restart(h) >= 0); nftnl_rule_free(rule); |