Index: sys/netinet6/ip6_output.c =================================================================== --- sys/netinet6/ip6_output.c +++ sys/netinet6/ip6_output.c @@ -2303,8 +2303,9 @@ #define GET_PKTOPT_VAR(field, lenexpr) do { \ if (pktopt && pktopt->field) { \ + optdatalen = ulmin(lenexpr, sopt->sopt_valsize); \ INP_RUNLOCK(in6p); \ - optdata = malloc(sopt->sopt_valsize, M_TEMP, M_WAITOK); \ + optdata = malloc(lenexpr, M_TEMP, M_WAITOK); \ malloc_optdata = true; \ INP_RLOCK(in6p); \ if (in6p->inp_flags & (INP_TIMEWAIT | INP_DROPPED)) { \ @@ -2314,7 +2315,6 @@ } \ pktopt = in6p->in6p_outputopts; \ if (pktopt && pktopt->field) { \ - optdatalen = min(lenexpr, sopt->sopt_valsize); \ bcopy(&pktopt->field, optdata, optdatalen); \ } else { \ free(optdata, M_TEMP); \