From: Alexander Bluhm Subject: inpcb options To: tech@openbsd.org Date: Tue, 16 Apr 2024 20:29:00 +0200 Hi, A internet PCB has either IPv4 or IPv6 options. We can put them in a common anonymous union. ok? bluhm Index: netinet/in_pcb.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.c,v diff -u -p -r1.300 in_pcb.c --- netinet/in_pcb.c 12 Apr 2024 16:07:09 -0000 1.300 +++ netinet/in_pcb.c 16 Apr 2024 18:15:58 -0000 @@ -592,7 +592,6 @@ in_pcbdetach(struct inpcb *inp) * points. */ sofree(so, 1); - m_freem(inp->inp_options); if (inp->inp_route.ro_rt) { rtfree(inp->inp_route.ro_rt); inp->inp_route.ro_rt = NULL; @@ -603,8 +602,10 @@ in_pcbdetach(struct inpcb *inp) ip6_freemoptions(inp->inp_moptions6); } else #endif + { + m_freem(inp->inp_options); ip_freemoptions(inp->inp_moptions); - + } #if NPF > 0 pf_remove_divert_state(inp); pf_inp_unlink(inp); Index: netinet/in_pcb.h =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.h,v diff -u -p -r1.155 in_pcb.h --- netinet/in_pcb.h 15 Apr 2024 18:31:04 -0000 1.155 +++ netinet/in_pcb.h 16 Apr 2024 18:15:58 -0000 @@ -157,8 +157,10 @@ struct inpcb { } inp_hu; #define inp_ip inp_hu.hu_ip #define inp_ipv6 inp_hu.hu_ipv6 - struct mbuf *inp_options; /* IP options */ - struct ip6_pktopts *inp_outputopts6; /* IP6 options for outgoing packets */ + union { + struct mbuf *inp_options; /* IPv4 options */ + struct ip6_pktopts *inp_outputopts6; /* IPv6 options */ + }; int inp_hops; union { struct ip_moptions *mou_mo;