Hi,
pfioctl() is inconsistent when to use break or goto fail. There
is a big switch and when looking at a break you need more context
to see where it jumps to.
I would like to use goto fail consistently to leave the big switch.
break is used for inner switches and loops.
No binary diff.
ok?
bluhm
Index: net/pf_ioctl.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/pf_ioctl.c,v
retrieving revision 1.374
diff -u -p -r1.374 pf_ioctl.c
--- net/pf_ioctl.c 23 Mar 2022 09:01:59 -0000 1.374
+++ net/pf_ioctl.c 23 Mar 2022 14:36:30 -0000
@@ -1217,7 +1217,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
/* save state to not run over them all each time? */
@@ -1228,7 +1228,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
memcpy(&pq->queue, qs, sizeof(pq->queue));
PF_UNLOCK();
@@ -1248,7 +1248,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
nbytes = pq->nbytes;
nr = 0;
@@ -1261,7 +1261,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
memcpy(&pq->queue, qs, sizeof(pq->queue));
/* It's a root flow queue but is not an HFSC root class */
@@ -1286,7 +1286,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
qs = pool_get(&pf_queue_pl, PR_WAITOK|PR_LIMITFAIL|PR_ZERO);
if (qs == NULL) {
error = ENOMEM;
- break;
+ goto fail;
}
NET_LOCK();
@@ -1296,7 +1296,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
pool_put(&pf_queue_pl, qs);
- break;
+ goto fail;
}
memcpy(qs, &q->queue, sizeof(*qs));
qs->qid = pf_qname2qid(qs->qname, 1);
@@ -1305,7 +1305,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
pool_put(&pf_queue_pl, qs);
- break;
+ goto fail;
}
if (qs->parent[0] && (qs->parent_qid =
pf_qname2qid(qs->parent, 0)) == 0) {
@@ -1313,7 +1313,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
pool_put(&pf_queue_pl, qs);
- break;
+ goto fail;
}
qs->kif = pfi_kif_get(qs->ifname, NULL);
if (qs->kif == NULL) {
@@ -1321,7 +1321,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
pool_put(&pf_queue_pl, qs);
- break;
+ goto fail;
}
/* XXX resolve bw percentage specs */
pfi_kif_ref(qs->kif, PFI_KIF_REF_RULE);
@@ -1341,20 +1341,20 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
rule = pool_get(&pf_rule_pl, PR_WAITOK|PR_LIMITFAIL|PR_ZERO);
if (rule == NULL) {
error = ENOMEM;
- break;
+ goto fail;
}
if ((error = pf_rule_copyin(&pr->rule, rule))) {
pf_rule_free(rule);
rule = NULL;
- break;
+ goto fail;
}
if (pr->rule.return_icmp >> 8 > ICMP_MAXTYPE) {
error = EINVAL;
pf_rule_free(rule);
rule = NULL;
- break;
+ goto fail;
}
if ((error = pf_rule_checkaf(rule))) {
pf_rule_free(rule);
@@ -1366,14 +1366,14 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EINVAL;
pf_rule_free(rule);
rule = NULL;
- break;
+ goto fail;
}
if (rule->rt && !rule->direction) {
error = EINVAL;
pf_rule_free(rule);
rule = NULL;
- break;
+ goto fail;
}
NET_LOCK();
@@ -1385,14 +1385,14 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
pf_rule_free(rule);
- break;
+ goto fail;
}
if (pr->ticket != ruleset->rules.inactive.ticket) {
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
pf_rule_free(rule);
- break;
+ goto fail;
}
rule->cuid = p->p_ucred->cr_ruid;
rule->cpid = p->p_p->ps_pid;
@@ -1435,7 +1435,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
pf_rm_rule(NULL, rule);
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
TAILQ_INSERT_TAIL(ruleset->rules.inactive.ptr,
rule, entries);
@@ -1459,7 +1459,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EINVAL;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
tail = TAILQ_LAST(ruleset->rules.active.ptr, pf_rulequeue);
if (tail)
@@ -1486,13 +1486,13 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EINVAL;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
if (pr->ticket != ruleset->rules.active.ticket) {
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
rule = TAILQ_FIRST(ruleset->rules.active.ptr);
while ((rule != NULL) && (rule->nr != pr->nr))
@@ -1501,7 +1501,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
memcpy(&pr->rule, rule, sizeof(struct pf_rule));
memset(&pr->rule.entries, 0, sizeof(pr->rule.entries));
@@ -1519,7 +1519,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EBUSY;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
pf_addr_copyout(&pr->rule.src.addr);
pf_addr_copyout(&pr->rule.dst.addr);
@@ -1553,7 +1553,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (pcr->action < PF_CHANGE_ADD_HEAD ||
pcr->action > PF_CHANGE_GET_TICKET) {
error = EINVAL;
- break;
+ goto fail;
}
if (pcr->action == PF_CHANGE_GET_TICKET) {
@@ -1568,7 +1568,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
if (pcr->action != PF_CHANGE_REMOVE) {
@@ -1576,19 +1576,19 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PR_WAITOK|PR_LIMITFAIL|PR_ZERO);
if (newrule == NULL) {
error = ENOMEM;
- break;
+ goto fail;
}
if (pcr->rule.return_icmp >> 8 > ICMP_MAXTYPE) {
error = EINVAL;
pool_put(&pf_rule_pl, newrule);
- break;
+ goto fail;
}
error = pf_rule_copyin(&pcr->rule, newrule);
if (error != 0) {
pf_rule_free(newrule);
newrule = NULL;
- break;
+ goto fail;
}
if ((error = pf_rule_checkaf(newrule))) {
pf_rule_free(newrule);
@@ -1599,7 +1599,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
pf_rule_free(newrule);
error = EINVAL;
newrule = NULL;
- break;
+ goto fail;
}
}
@@ -1611,7 +1611,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
pf_rule_free(newrule);
- break;
+ goto fail;
}
if (pcr->ticket != ruleset->rules.active.ticket) {
@@ -1619,7 +1619,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
pf_rule_free(newrule);
- break;
+ goto fail;
}
if (pcr->action != PF_CHANGE_REMOVE) {
@@ -1665,7 +1665,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
pf_rm_rule(NULL, newrule);
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
}
@@ -1684,7 +1684,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EINVAL;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
}
@@ -1749,7 +1749,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_STATE_EXIT_WRITE();
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
if (psk->psk_af && psk->psk_proto &&
@@ -1806,7 +1806,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_STATE_EXIT_WRITE();
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
NET_LOCK();
@@ -1870,7 +1870,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (sp->timeout >= PFTM_MAX) {
error = EINVAL;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -1898,7 +1898,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
NET_UNLOCK();
if (s == NULL) {
error = ENOENT;
- break;
+ goto fail;
}
pf_state_export(&ps->state, s);
@@ -1930,7 +1930,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
memset(pf_status.ifname, 0, IFNAMSIZ);
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
strlcpy(pf_trans_set.statusif, pi->pfiio_name, IFNAMSIZ);
pf_trans_set.mask |= PF_TSET_STATUSIF;
@@ -1949,7 +1949,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
pfi_update_status(pi->pfiio_name, NULL);
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
memset(pf_status.counters, 0, sizeof(pf_status.counters));
@@ -2135,7 +2135,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EINVAL;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
pr->nr = 0;
if (ruleset == &pf_main_ruleset) {
@@ -2166,7 +2166,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
error = EINVAL;
PF_UNLOCK();
NET_UNLOCK();
- break;
+ goto fail;
}
pr->name[0] = '\0';
if (ruleset == &pf_main_ruleset) {
@@ -2198,7 +2198,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != 0) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2214,7 +2214,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_table)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2230,7 +2230,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_table)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2246,7 +2246,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_table)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2262,7 +2262,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_tstats)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2278,7 +2278,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_table)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2294,7 +2294,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_table)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2311,7 +2311,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != 0) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2327,7 +2327,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
error = ENODEV;
- break;
+ goto fail;
}
error = pfr_add_addrs(&io->pfrio_table, io->pfrio_buffer,
io->pfrio_size, &io->pfrio_nadd, io->pfrio_flags |
@@ -2340,7 +2340,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2357,7 +2357,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2375,7 +2375,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2391,7 +2391,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_astats)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2407,7 +2407,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2424,7 +2424,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2441,7 +2441,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2806,7 +2806,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
PF_UNLOCK();
NET_UNLOCK();
free(pstore, M_TEMP, sizeof(*pstore));
- break;
+ goto fail;
}
p = psn->psn_src_nodes;
@@ -2937,7 +2937,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io->pfiio_esize != sizeof(struct pfi_kif)) {
error = ENODEV;
- break;
+ goto fail;
}
NET_LOCK();
PF_LOCK();
@@ -2953,7 +2953,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io == NULL) {
error = EINVAL;
- break;
+ goto fail;
}
NET_LOCK();
@@ -2969,7 +2969,7 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
if (io == NULL) {
error = EINVAL;
- break;
+ goto fail;
}
NET_LOCK();