Alexander Bluhm <alexander.bl...@gmx.net> writes:

> Hi,
>
> Initially all inpcb, including the IPv6 ones, are hooked into the
> IPv4 hash.  They cannot be used before bind(2) and then they are
> rehashed and rehooked, so this is not noticed.  Nevertheless I think
> this is a bug and they should go into the IPv6 hash from the
> beginning.
>
> ok?

ok jca@

> bluhm
>
> Index: netinet/in_pcb.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.c,v
> retrieving revision 1.218
> diff -u -p -r1.218 in_pcb.c
> --- netinet/in_pcb.c  6 Mar 2017 08:59:07 -0000       1.218
> +++ netinet/in_pcb.c  6 Mar 2017 23:08:43 -0000
> @@ -276,8 +276,16 @@ in_pcballoc(struct socket *so, struct in
>       TAILQ_INSERT_HEAD(&table->inpt_queue, inp, inp_queue);
>       head = INPCBLHASH(table, inp->inp_lport, inp->inp_rtableid);
>       LIST_INSERT_HEAD(head, inp, inp_lhash);
> -     head = INPCBHASH(table, &inp->inp_faddr, inp->inp_fport,
> -         &inp->inp_laddr, inp->inp_lport, rtable_l2(inp->inp_rtableid));
> +#ifdef INET6
> +     if (sotopf(so) == PF_INET6)
> +             head = IN6PCBHASH(table, &inp->inp_faddr6, inp->inp_fport,
> +                 &inp->inp_laddr6, inp->inp_lport,
> +                 rtable_l2(inp->inp_rtableid));
> +     else
> +#endif /* INET6 */
> +             head = INPCBHASH(table, &inp->inp_faddr, inp->inp_fport,
> +                 &inp->inp_laddr, inp->inp_lport,
> +                 rtable_l2(inp->inp_rtableid));
>       LIST_INSERT_HEAD(head, inp, inp_hash);
>       splx(s);
>       so->so_pcb = inp;
>

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to