</snip>

> > I think the changes in ip_insertoptions() can be dropped completely,
> > because the if-statement uses ip-ip_hl, which might not be initialized.
>
>     yes, you are right, I think we should rather go for this tweak:
>
> --------8<---------------8<---------------8<------------------8<--------
>
> diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
> index e19b744fdf3..5c1222c0c86 100644
> --- a/sys/netinet/ip_output.c
> +++ b/sys/netinet/ip_output.c
> @@ -767,7 +767,7 @@ ip_insertoptions(struct mbuf *m, struct mbuf *opt, int 
> *phlen)
>                 return (m);             /* XXX should fail */
>
>         /* check if options will fit to IP header */
> -       if ((optlen + (ip->ip_hl << 2)) > (0x0f << 2)) {
> +       if ((optlen + (sizeof (struct ip))) > (0x0f << 2)) {
>                 *phlen = sizeof (struct ip);
>                 return (m);
>         }
> --------8<---------------8<---------------8<------------------8<--------

Looks good for me. Just one more remark. In all other failure-cases in
ip_insertoptions() the old mbuf is returned without setting phlen.
Maybe, for the sake of consistence, always or never set phlen in a
failure-case?
ip_output() and icmp_send() do initialize (p)hlen before calling
ip_insertoptions(). So it is not strictly necessary to set it within
ip_insertoptions().

Regards
Dominik

Reply via email to