diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:49:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:49:40 -0500 |
commit | 0191b625ca5a46206d2fb862bb08f36f2fcb3b31 (patch) | |
tree | 454d1842b1833d976da62abcbd5c47521ebe9bd7 /net/can/raw.c | |
parent | 54a696bd07c14d3b1192d03ce7269bc59b45209a (diff) | |
parent | eb56092fc168bf5af199d47af50c0d84a96db898 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1429 commits)
net: Allow dependancies of FDDI & Tokenring to be modular.
igb: Fix build warning when DCA is disabled.
net: Fix warning fallout from recent NAPI interface changes.
gro: Fix potential use after free
sfc: If AN is enabled, always read speed/duplex from the AN advertising bits
sfc: When disabling the NIC, close the device rather than unregistering it
sfc: SFT9001: Add cable diagnostics
sfc: Add support for multiple PHY self-tests
sfc: Merge top-level functions for self-tests
sfc: Clean up PHY mode management in loopback self-test
sfc: Fix unreliable link detection in some loopback modes
sfc: Generate unique names for per-NIC workqueues
802.3ad: use standard ethhdr instead of ad_header
802.3ad: generalize out mac address initializer
802.3ad: initialize ports LACPDU from const initializer
802.3ad: remove typedef around ad_system
802.3ad: turn ports is_individual into a bool
802.3ad: turn ports is_enabled into a bool
802.3ad: make ntt bool
ixgbe: Fix set_ringparam in ixgbe to use the same memory pools.
...
Fixed trivial IPv4/6 address printing conflicts in fs/cifs/connect.c due
to the conversion to %pI (in this networking merge) and the addition of
doing IPv6 addresses (from the earlier merge of CIFS).
Diffstat (limited to 'net/can/raw.c')
-rw-r--r-- | net/can/raw.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/net/can/raw.c b/net/can/raw.c index 6e0663faaf9f..27aab63df467 100644 --- a/net/can/raw.c +++ b/net/can/raw.c | |||
@@ -641,17 +641,12 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
641 | 641 | ||
642 | skb = sock_alloc_send_skb(sk, size, msg->msg_flags & MSG_DONTWAIT, | 642 | skb = sock_alloc_send_skb(sk, size, msg->msg_flags & MSG_DONTWAIT, |
643 | &err); | 643 | &err); |
644 | if (!skb) { | 644 | if (!skb) |
645 | dev_put(dev); | 645 | goto put_dev; |
646 | return err; | ||
647 | } | ||
648 | 646 | ||
649 | err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size); | 647 | err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size); |
650 | if (err < 0) { | 648 | if (err < 0) |
651 | kfree_skb(skb); | 649 | goto free_skb; |
652 | dev_put(dev); | ||
653 | return err; | ||
654 | } | ||
655 | skb->dev = dev; | 650 | skb->dev = dev; |
656 | skb->sk = sk; | 651 | skb->sk = sk; |
657 | 652 | ||
@@ -660,9 +655,16 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
660 | dev_put(dev); | 655 | dev_put(dev); |
661 | 656 | ||
662 | if (err) | 657 | if (err) |
663 | return err; | 658 | goto send_failed; |
664 | 659 | ||
665 | return size; | 660 | return size; |
661 | |||
662 | free_skb: | ||
663 | kfree_skb(skb); | ||
664 | put_dev: | ||
665 | dev_put(dev); | ||
666 | send_failed: | ||
667 | return err; | ||
666 | } | 668 | } |
667 | 669 | ||
668 | static int raw_recvmsg(struct kiocb *iocb, struct socket *sock, | 670 | static int raw_recvmsg(struct kiocb *iocb, struct socket *sock, |