]> err.no Git - linux-2.6/blobdiff - net/llc/llc_sap.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/x86
[linux-2.6] / net / llc / llc_sap.c
index 9f064b3a4335c364cbc3cfe99a99dce9d17eb05f..4029ceee9b9168d2f7b09e1eb1d64316f8544234 100644 (file)
@@ -31,7 +31,7 @@
  *     Allocates an sk_buff for frame and initializes sk_buff fields.
  *     Returns allocated skb or %NULL when out of memory.
  */
-struct sk_buff *llc_alloc_frame(struct net_device *dev)
+struct sk_buff *llc_alloc_frame(struct sock *sk, struct net_device *dev)
 {
        struct sk_buff *skb = alloc_skb(128, GFP_ATOMIC);
 
@@ -41,15 +41,20 @@ struct sk_buff *llc_alloc_frame(struct net_device *dev)
                skb->protocol = htons(ETH_P_802_2);
                skb->dev      = dev;
                skb->mac.raw  = skb->head;
+               if (sk != NULL)
+                       skb_set_owner_w(skb, sk);
        }
        return skb;
 }
 
 void llc_save_primitive(struct sock *sk, struct sk_buff* skb, u8 prim)
 {
-       struct sockaddr_llc *addr = llc_ui_skb_cb(skb);
+       struct sockaddr_llc *addr;
 
+       if (skb->sk->sk_type == SOCK_STREAM) /* See UNIX98 */
+               return;
        /* save primitive for use by the user. */
+       addr              = llc_ui_skb_cb(skb);
        addr->sllc_family = sk->sk_family;
        addr->sllc_arphrd = skb->dev->type;
        addr->sllc_test   = prim == LLC_TEST_PRIM;