Like really!

OK?

Sanity checked by blambert.

diff --git sys/net/pf.c sys/net/pf.c
index d4cb67c..2ba04d5 100644
--- sys/net/pf.c
+++ sys/net/pf.c
@@ -4488,21 +4488,16 @@ pf_test_state_icmp(struct pf_pdesc *pd, struct pf_state 
**state,
                 * Search for an ICMP state.
                 */
                ret = pf_icmp_state_lookup(pd, &key, state,
                    virtual_id, virtual_type, icmp_dir, &iidx,
                    0, 0);
-               if (ret >= 0) {
-                       if (ret == PF_DROP && pd->af == AF_INET6 &&
-                           icmp_dir == PF_OUT) {
-                               ret = pf_icmp_state_lookup(pd, &key, state,
-                                   virtual_id, virtual_type, icmp_dir, &iidx,
-                                   1, 0);
-                               if (ret >= 0)
-                                       return (ret);
-                       } else
-                               return (ret);
-               }
+               /* IPv6? try matching a multicast address */
+               if (ret == PF_DROP && pd->af == AF_INET6 && icmp_dir == PF_OUT)
+                       ret = pf_icmp_state_lookup(pd, &key, state, virtual_id,
+                           virtual_type, icmp_dir, &iidx, 1, 0);
+               if (ret >= 0)
+                       return (ret);
 
                (*state)->expire = time_uptime;
                (*state)->timeout = PFTM_ICMP_ERROR_REPLY;
 
                /* translate source/destination address, if necessary */
@@ -5101,21 +5096,18 @@ pf_test_state_icmp(struct pf_pdesc *pd, struct pf_state 
**state,
                        pd2.hdr.icmp6 = &iih;
                        pf_icmp_mapping(&pd2, iih.icmp6_type,
                            &icmp_dir, &virtual_id, &virtual_type);
                        ret = pf_icmp_state_lookup(&pd2, &key, state,
                            virtual_id, virtual_type, icmp_dir, &iidx, 0, 1);
-                       if (ret >= 0) {
-                               if (ret == PF_DROP && pd2.af == AF_INET6 &&
-                                   icmp_dir == PF_OUT) {
-                                       ret = pf_icmp_state_lookup(&pd2, &key,
-                                           state, virtual_id, virtual_type,
-                                           icmp_dir, &iidx, 1, 1);
-                                       if (ret >= 0)
-                                               return (ret);
-                               } else
-                                       return (ret);
-                       }
+                       /* IPv6? try matching a multicast address */
+                       if (ret == PF_DROP && pd2.af == AF_INET6 &&
+                           icmp_dir == PF_OUT)
+                               ret = pf_icmp_state_lookup(&pd2, &key, state,
+                                   virtual_id, virtual_type, icmp_dir, &iidx,
+                                   1, 1);
+                       if (ret >= 0)
+                               return (ret);
 
                        /* translate source/destination address, if necessary */
                        if ((*state)->key[PF_SK_WIRE] !=
                            (*state)->key[PF_SK_STACK]) {
                                struct pf_state_key     *nk;

Reply via email to