Index: sys/netpfil/ipfw/nat64/nat64lsn.c =================================================================== --- sys/netpfil/ipfw/nat64/nat64lsn.c +++ sys/netpfil/ipfw/nat64/nat64lsn.c @@ -1143,26 +1143,27 @@ if (link == NULL) return (PG_ERROR(1)); - /* - * TODO: check that we did not already allocated PG in - * previous call. - */ - ret = 0; alias = link->alias; /* Find place in pgchunk where PG can be added */ switch (ji->proto) { case IPPROTO_TCP: + if (!ck_pr_load_ptr(&alias->tcp_pg)) + break; ret = nat64lsn_alloc_proto_pg(cfg, alias, &alias->tcp_chunkmask, alias->tcp_pgmask, alias->tcp, &alias->tcp_pg, ji->proto); break; case IPPROTO_UDP: + if (!ck_pr_load_ptr(&alias->udp_pg)) + break; ret = nat64lsn_alloc_proto_pg(cfg, alias, &alias->udp_chunkmask, alias->udp_pgmask, alias->udp, &alias->udp_pg, ji->proto); break; case IPPROTO_ICMP: + if (!ck_pr_load_ptr(&alias->icmp_pg)) + break; ret = nat64lsn_alloc_proto_pg(cfg, alias, &alias->icmp_chunkmask, alias->icmp_pgmask, alias->icmp, &alias->icmp_pg, ji->proto);