[Click] [PATCH]: Small glitch in ipprint.cc

Eddie Kohler kohler at cs.ucla.edu
Mon Sep 22 16:28:02 EDT 2008


Thanks, Harald!  A different, simpler, patch is checked in; let me know 
if it works for you.

Eddie


Harald Schiöberg wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> 
> IPPrint::simple_action
> 
> in the TCP case:
>  p->tcp_header()->th_off
> is used to calculate
>  data
> is used to calculate
>  amt
> is used as a parameter to sa.reserve()
> 
> - -> If packet's th_off is broken, then amt can become negative, which
> sa.reserve quits with a failed assertion. IMHO IPPrint shouldn't cause a
> program termination because of bad packet contents.
> 
> best,
> 	Harald
> 
> 
> 
> diff --git a/elements/ip/ipprint.cc b/elements/ip/ipprint.cc
> index 684a87b..ca61889 100644
> - --- a/elements/ip/ipprint.cc
> +++ b/elements/ip/ipprint.cc
> @@ -389,35 +389,39 @@ IPPrint::simple_action(Packet *p)
>             if (bytes < 0 || (int) (p->end_data() - data) < bytes)
>                 bytes = p->end_data() - data;
>             int amt = 3*bytes + (bytes/4+1) + 3*(bytes/24+1) + 1;
> - -
> - -           char *buf = sa.reserve(amt);
> - -           char *orig_buf = buf;
> - -
> - -           if (buf && _contents == 1) {
> - -               for (int i = 0; i < bytes; i++, data++) {
> - -                   if ((i % 24) == 0) {
> - -                       *buf++ = '\n'; *buf++ = ' '; *buf++ = ' ';
> - -                   } else if ((i % 4) == 0)
> - -                       *buf++ = ' ';
> - -                   sprintf(buf, "%02x", *data & 0xff);
> - -                   buf += 2;
> - -               }
> - -           } else if (buf && _contents == 2) {
> - -               for (int i = 0; i < bytes; i++, data++) {
> - -                   if ((i % 48) == 0) {
> - -                       *buf++ = '\n'; *buf++ = ' '; *buf++ = ' ';
> - -                   } else if ((i % 8) == 0)
> - -                       *buf++ = ' ';
> - -                   if (*data < 32 || *data > 126)
> - -                       *buf++ = '.';
> - -                   else
> - -                       *buf++ = *data;
> - -               }
> - -           }
> 
> - -           if (orig_buf) {
> - -               assert(buf <= orig_buf + amt);
> - -               sa.adjust_length(buf - orig_buf);
> +           if (amt >=0 ) {
> +
> +               char *buf = sa.reserve(amt);
> +               char *orig_buf = buf;
> +
> +               if (buf && _contents == 1) {
> +                   for (int i = 0; i < bytes; i++, data++) {
> +                       if ((i % 24) == 0) {
> +                           *buf++ = '\n'; *buf++ = ' '; *buf++ = ' ';
> +                       } else if ((i % 4) == 0)
> +                           *buf++ = ' ';
> +                       sprintf(buf, "%02x", *data & 0xff);
> +                       buf += 2;
> +                   }
> +               } else if (buf && _contents == 2) {
> +                   for (int i = 0; i < bytes; i++, data++) {
> +                       if ((i % 48) == 0) {
> +                           *buf++ = '\n'; *buf++ = ' '; *buf++ = ' ';
> +                       } else if ((i % 8) == 0)
> +                           *buf++ = ' ';
> +                       if (*data < 32 || *data > 126)
> +                           *buf++ = '.';
> +                       else
> +                           *buf++ = *data;
> +                   }
> +               }
> +               if (orig_buf) {
> +                   assert(buf <= orig_buf + amt);
> +                   sa.adjust_length(buf - orig_buf);
> +               }
> +           } else {
> +               sa << "Broken TCP Header";
>             }
>         }
>      }
> 
> 
> 
> - --
> Harald Schiöberg
> Technische Universität Berlin | T-Laboratories | FG INET
> www: http://www.net.t-labs.tu-berlin.de
> Phone: +49-(0)30-8353-58476 | Fax: +49-(0)391 534 783 47
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
> 
> iD8DBQFI18f5y8wrZ9OvkU0RArilAKCPVM9SacjXRyCGnpHf57vof4DKRwCfW5qp
> k8T6aug7SwKHvxn+09F36lc=
> =MYUM
> -----END PGP SIGNATURE-----
> 
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click



More information about the click mailing list