[BACK]Return to npf_inet.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / net / npf

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/net/npf/npf_inet.c between version 1.38 and 1.39

version 1.38, 2018/03/08 07:06:13 version 1.39, 2018/03/08 07:54:14
Line 229  npf_fetch_tcpopts(npf_cache_t *npc, uint
Line 229  npf_fetch_tcpopts(npf_cache_t *npc, uint
         nbuf_t *nbuf = npc->npc_nbuf;          nbuf_t *nbuf = npc->npc_nbuf;
         const struct tcphdr *th = npc->npc_l4.tcp;          const struct tcphdr *th = npc->npc_l4.tcp;
         int topts_len, step;          int topts_len, step;
         void *nptr;          uint8_t *nptr;
         uint8_t val;          uint8_t val;
         bool ok;          bool ok;
   
Line 252  next:
Line 252  next:
                 ok = false;                  ok = false;
                 goto done;                  goto done;
         }          }
         val = *(uint8_t *)nptr;          val = *nptr;
   
         switch (val) {          switch (val) {
         case TCPOPT_EOL:          case TCPOPT_EOL:
Line 264  next:
Line 264  next:
                 step = 1;                  step = 1;
                 break;                  break;
         case TCPOPT_MAXSEG:          case TCPOPT_MAXSEG:
                 if ((nptr = nbuf_advance(nbuf, 2, 2)) == NULL) {                  if ((nptr = nbuf_ensure_contig(nbuf, TCPOLEN_MAXSEG)) == NULL) {
                         ok = false;                          ok = false;
                         goto done;                          goto done;
                 }                  }
                 if (mss) {                  if (mss) {
                         if (*mss) {                          if (*mss) {
                                 memcpy(nptr, mss, sizeof(uint16_t));                                  memcpy(nptr + 2, mss, sizeof(uint16_t));
                         } else {                          } else {
                                 memcpy(mss, nptr, sizeof(uint16_t));                                  memcpy(mss, nptr + 2, sizeof(uint16_t));
                         }                          }
                 }                  }
                 topts_len -= TCPOLEN_MAXSEG;                  topts_len -= TCPOLEN_MAXSEG;
                 step = 2;                  step = TCPOLEN_MAXSEG;
                 break;                  break;
         case TCPOPT_WINDOW:          case TCPOPT_WINDOW:
                 /* TCP Window Scaling (RFC 1323). */                  /* TCP Window Scaling (RFC 1323). */
                 if ((nptr = nbuf_advance(nbuf, 2, 1)) == NULL) {                  if ((nptr = nbuf_ensure_contig(nbuf, TCPOLEN_WINDOW)) == NULL) {
                         ok = false;                          ok = false;
                         goto done;                          goto done;
                 }                  }
                 val = *(uint8_t *)nptr;                  val = *(nptr + 2);
                 *wscale = (val > TCP_MAX_WINSHIFT) ? TCP_MAX_WINSHIFT : val;                  *wscale = (val > TCP_MAX_WINSHIFT) ? TCP_MAX_WINSHIFT : val;
                 topts_len -= TCPOLEN_WINDOW;                  topts_len -= TCPOLEN_WINDOW;
                 step = 1;                  step = TCPOLEN_WINDOW;
                 break;                  break;
         default:          default:
                 if ((nptr = nbuf_advance(nbuf, 1, 1)) == NULL) {                  if ((nptr = nbuf_ensure_contig(nbuf, 2)) == NULL) {
                         ok = false;                          ok = false;
                         goto done;                          goto done;
                 }                  }
                 val = *(uint8_t *)nptr;                  val = *(nptr + 1);
                 if (val < 2 || val > topts_len) {                  if (val < 2 || val > topts_len) {
                         ok = false;                          ok = false;
                         goto done;                          goto done;
                 }                  }
                 topts_len -= val;                  topts_len -= val;
                 step = val - 1;                  step = val;
         }          }
   
         /* Any options left? */          /* Any options left? */

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.39

CVSweb <webmaster@jp.NetBSD.org>