Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d92a7db710c32db826a00ba9bc7a22e741d5041e
Commit:     d92a7db710c32db826a00ba9bc7a22e741d5041e
Parent:     39dad26c37fdb1382e4173172a2704fa278f7fd6
Author:     Herbert Xu <[EMAIL PROTECTED]>
AuthorDate: Tue Aug 21 00:06:37 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Tue Aug 21 20:58:13 2007 -0700

    [SNAP]: Check packet length before reading
    
    The snap_rcv code reads 5 bytes so we should make sure that
    we have 5 bytes in the head before proceeding.
    
    Based on diagnosis and fix by Evgeniy Polyakov, reported by
    Alan J. Wylie.
    
    Patch also kills the skb->sk assignment before kfree_skb
    since it's redundant.
    
    Signed-off-by: Herbert Xu <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/802/psnap.c |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/net/802/psnap.c b/net/802/psnap.c
index 04ee43e..31128cb 100644
--- a/net/802/psnap.c
+++ b/net/802/psnap.c
@@ -55,6 +55,9 @@ static int snap_rcv(struct sk_buff *skb, struct net_device 
*dev,
                .type = __constant_htons(ETH_P_SNAP),
        };
 
+       if (unlikely(!pskb_may_pull(skb, 5)))
+               goto drop;
+
        rcu_read_lock();
        proto = find_snap_client(skb_transport_header(skb));
        if (proto) {
@@ -62,14 +65,18 @@ static int snap_rcv(struct sk_buff *skb, struct net_device 
*dev,
                skb->transport_header += 5;
                skb_pull_rcsum(skb, 5);
                rc = proto->rcvfunc(skb, dev, &snap_packet_type, orig_dev);
-       } else {
-               skb->sk = NULL;
-               kfree_skb(skb);
-               rc = 1;
        }
-
        rcu_read_unlock();
+
+       if (unlikely(!proto))
+               goto drop;
+
+out:
        return rc;
+
+drop:
+       kfree_skb(skb);
+       goto out;
 }
 
 /*
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to