Gerlando Falauto
488fc9af82
tipc: pskb_copy() buffers when sending on more than one bearer
...
When sending packets, TIPC bearers use skb_clone() before writing their
hardware header. This will however NOT copy the data buffer.
So when the same packet is sent over multiple bearers (to reach multiple
nodes), the same socket buffer data will be treated by multiple
tipc_media drivers which will write their own hardware header through
dev_hard_header().
Most of the time this is not a problem, because by the time the
packet is processed by the second media, it has already been sent over
the first one. However, when the first transmission is delayed (e.g.
because of insufficient bandwidth or through a shaper), the next bearer
will overwrite the hardware header, resulting in the packet being sent:
a) with the wrong source address, when bearers of the same type,
e.g. ethernet, are involved
b) with a completely corrupt header, or even dropped, when bearers of
different types are involved.
So when the same socket buffer is to be sent multiple times, send a
pskb_copy() instead (from the second instance on), and release it
afterwards (the bearer will skb_clone() it anyway).
Signed-off-by: Gerlando Falauto <gerlando.falauto@keymile.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2013-05-03 16:08:58 -04:00
..
9p
Revert parts of "hlist: drop the node parameter from iterators"
2013-03-08 15:05:34 -08:00
802
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-22 20:32:51 -04:00
8021q
net: vlan,ethtool: netdev_features_t is more than 32 bit
2013-05-02 13:58:12 -04:00
appletalk
appletalk: info leak in ->getname()
2013-04-25 01:47:58 -04:00
atm
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
ax25
ax25: fix info leak via msg_name in ax25_recvmsg()
2013-04-07 16:28:00 -04:00
batman-adv
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-30 03:55:20 -04:00
bluetooth
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
bridge
bridge: avoid OOPS if root port not found
2013-04-30 15:51:08 -04:00
caif
caif: Remove bouncing address for Daniel Martensson
2013-04-23 13:25:51 -04:00
can
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
ceph
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
2013-03-12 09:22:42 -07:00
core
net: vlan,ethtool: netdev_features_t is more than 32 bit
2013-05-02 13:58:12 -04:00
dcb
rtnetlink: Remove passing of attributes into rtnl_doit functions
2013-03-22 10:31:16 -04:00
dccp
tcp: Remove TCPCT
2013-03-17 14:35:13 -04:00
decnet
decnet: remove duplicated include from dn_table.c
2013-04-07 17:12:01 -04:00
dns_resolver
dsa
dsa: fix freeing of sparse port allocation
2013-03-25 12:23:41 -04:00
ethernet
net: add ETH_P_802_3_MIN
2013-03-28 01:20:42 -04:00
ieee802154
ieee802154/nl-mac.c: make some MLME operations optional
2013-04-08 12:00:16 -04:00
ipv4
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
ipv6
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
ipx
hlist: drop the node parameter from iterators
2013-02-27 19:10:24 -08:00
irda
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2013-05-01 14:08:52 -07:00
iucv
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-22 20:32:51 -04:00
key
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
2013-03-27 14:07:04 -04:00
l2tp
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-07 18:37:01 -04:00
lapb
llc
llc: Fix missing msg_namelen update in llc_ui_recvmsg()
2013-04-07 16:28:01 -04:00
mac80211
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
2013-04-24 10:54:20 -04:00
mac802154
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-30 03:55:20 -04:00
netfilter
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
netlabel
netlabel: fix build problems when CONFIG_IPV6=n
2013-03-08 11:33:51 -05:00
netlink
netlink: kconfig: move mmap i/o into netlink kconfig
2013-05-01 15:02:42 -04:00
netrom
netrom: info leak in ->getname()
2013-04-25 01:47:58 -04:00
nfc
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-30 03:55:20 -04:00
openvswitch
openvswitch: Remove unneeded ovs_netdev_get_ifindex()
2013-04-30 00:19:11 -04:00
packet
sock_diag: allow to dump bpf filters
2013-04-29 13:21:30 -04:00
phonet
rtnetlink: Remove passing of attributes into rtnl_doit functions
2013-03-22 10:31:16 -04:00
rds
net/rds: zero last byte for strncpy
2013-03-08 00:35:44 -05:00
rfkill
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
2013-04-22 14:58:14 -04:00
rose
rose: fix info leak via msg_name in rose_recvmsg()
2013-04-07 16:28:02 -04:00
rxrpc
Driver core patches for 3.9-rc1
2013-02-21 12:05:51 -08:00
sched
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2013-05-01 14:08:52 -07:00
sctp
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2013-05-01 14:08:52 -07:00
sunrpc
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
tipc
tipc: pskb_copy() buffers when sending on more than one bearer
2013-05-03 16:08:58 -04:00
unix
af_unix: fix a fatal race with bit fields
2013-05-01 15:13:49 -04:00
vmw_vsock
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-30 03:55:20 -04:00
wimax
wireless
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
x25
x25: use proc_remove_subtree()
2013-04-09 14:13:35 -04:00
xfrm
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next
2013-04-11 16:14:37 -04:00
compat.c
Kconfig
netlink: kconfig: move mmap i/o into netlink kconfig
2013-05-01 15:02:42 -04:00
Makefile
VSOCK: Introduce VM Sockets
2013-02-10 19:41:08 -05:00
nonet.c
socket.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-05-01 17:51:54 -07:00
sysctl_net.c