]> err.no Git - linux-2.6/blobdiff - net/ipv4/udp.c
[IPV4] TUNNEL4: Fix incoming packet length check for inter-protocol tunnel.
[linux-2.6] / net / ipv4 / udp.c
index 7b7fcacec4a024fed80b20e5c9f4bbba81d89b34..db1cb7c96d63dcdb32356789eec17448aff6f97d 100644 (file)
@@ -1221,7 +1221,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
        return 0;
 
 short_packet:
-       LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: short packet: From %u.%u.%u.%u:%u %d/%d to %u.%u.%u.%u:%u\n",
+       LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: short packet: From " NIPQUAD_FMT ":%u %d/%d to " NIPQUAD_FMT ":%u\n",
                       proto == IPPROTO_UDPLITE ? "-Lite" : "",
                       NIPQUAD(saddr),
                       ntohs(uh->source),
@@ -1236,7 +1236,7 @@ csum_error:
         * RFC1122: OK.  Discards the bad packet silently (as far as
         * the network is concerned, anyway) as per 4.1.3.4 (MUST).
         */
-       LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: bad checksum. From %d.%d.%d.%d:%d to %d.%d.%d.%d:%d ulen %d\n",
+       LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: bad checksum. From " NIPQUAD_FMT ":%u to " NIPQUAD_FMT ":%u ulen %d\n",
                       proto == IPPROTO_UDPLITE ? "-Lite" : "",
                       NIPQUAD(saddr),
                       ntohs(uh->source),
@@ -1605,10 +1605,9 @@ int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo)
        afinfo->seq_ops.next            = udp_seq_next;
        afinfo->seq_ops.stop            = udp_seq_stop;
 
-       p = proc_net_fops_create(net, afinfo->name, S_IRUGO, &afinfo->seq_fops);
-       if (p)
-               p->data = afinfo;
-       else
+       p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net,
+                            &afinfo->seq_fops, afinfo);
+       if (!p)
                rc = -ENOMEM;
        return rc;
 }
@@ -1619,7 +1618,8 @@ void udp_proc_unregister(struct net *net, struct udp_seq_afinfo *afinfo)
 }
 
 /* ------------------------------------------------------------------------ */
-static void udp4_format_sock(struct sock *sp, char *tmpbuf, int bucket)
+static void udp4_format_sock(struct sock *sp, struct seq_file *f,
+               int bucket, int *len)
 {
        struct inet_sock *inet = inet_sk(sp);
        __be32 dest = inet->daddr;
@@ -1627,13 +1627,13 @@ static void udp4_format_sock(struct sock *sp, char *tmpbuf, int bucket)
        __u16 destp       = ntohs(inet->dport);
        __u16 srcp        = ntohs(inet->sport);
 
-       sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X"
-               " %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p",
+       seq_printf(f, "%4d: %08X:%04X %08X:%04X"
+               " %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p%n",
                bucket, src, srcp, dest, destp, sp->sk_state,
                atomic_read(&sp->sk_wmem_alloc),
                atomic_read(&sp->sk_rmem_alloc),
                0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
-               atomic_read(&sp->sk_refcnt), sp);
+               atomic_read(&sp->sk_refcnt), sp, len);
 }
 
 int udp4_seq_show(struct seq_file *seq, void *v)
@@ -1644,11 +1644,11 @@ int udp4_seq_show(struct seq_file *seq, void *v)
                           "rx_queue tr tm->when retrnsmt   uid  timeout "
                           "inode");
        else {
-               char tmpbuf[129];
                struct udp_iter_state *state = seq->private;
+               int len;
 
-               udp4_format_sock(v, tmpbuf, state->bucket);
-               seq_printf(seq, "%-127s\n", tmpbuf);
+               udp4_format_sock(v, seq, state->bucket, &len);
+               seq_printf(seq, "%*s\n", 127 - len ,"");
        }
        return 0;
 }