summaryrefslogtreecommitdiff
path: root/include/linux/font.h
diff options
context:
space:
mode:
authorWillem de Bruijn <willemb@google.com>2018-11-20 21:00:18 +0300
committerDavid S. Miller <davem@davemloft.net>2018-11-23 22:08:03 +0300
commit5cd8d46ea1562be80063f53c7c6a5f40224de623 (patch)
tree53ce4843c87bbbeed12992b26dc4e15cf8470eaf /include/linux/font.h
parent039e70a70c8417b5bf5878a60612ebd2c95f731e (diff)
downloadlinux-5cd8d46ea1562be80063f53c7c6a5f40224de623.tar.xz
packet: copy user buffers before orphan or clone
tpacket_snd sends packets with user pages linked into skb frags. It notifies that pages can be reused when the skb is released by setting skb->destructor to tpacket_destruct_skb. This can cause data corruption if the skb is orphaned (e.g., on transmit through veth) or cloned (e.g., on mirror to another psock). Create a kernel-private copy of data in these cases, same as tun/tap zerocopy transmission. Reuse that infrastructure: mark the skb as SKBTX_ZEROCOPY_FRAG, which will trigger copy in skb_orphan_frags(_rx). Unlike other zerocopy packets, do not set shinfo destructor_arg to struct ubuf_info. tpacket_destruct_skb already uses that ptr to notify when the original skb is released and a timestamp is recorded. Do not change this timestamp behavior. The ubuf_info->callback is not needed anyway, as no zerocopy notification is expected. Mark destructor_arg as not-a-uarg by setting the lower bit to 1. The resulting value is not a valid ubuf_info pointer, nor a valid tpacket_snd frame address. Add skb_zcopy_.._nouarg helpers for this. The fix relies on features introduced in commit 52267790ef52 ("sock: add MSG_ZEROCOPY"), so can be backported as is only to 4.14. Tested with from `./in_netns.sh ./txring_overwrite` from http://github.com/wdebruij/kerneltools/tests Fixes: 69e3c75f4d54 ("net: TX_RING and packet mmap") Reported-by: Anand H. Krishnan <anandhkrishnan@gmail.com> Signed-off-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/font.h')
0 files changed, 0 insertions, 0 deletions