https://github.com/torvalds/linux
Revision 88a8121dc1d3d0dbddd411b79ed236b6b6ea415c authored by Nicolas Dichtel on 17 January 2019, 10:27:22 UTC, committed by David S. Miller on 17 January 2019, 23:54:45 UTC
Since commit cb9f1b783850, scapy (which uses an AF_PACKET socket in
SOCK_RAW mode) is unable to send a basic icmp packet over a sit tunnel:

Here is a example of the setup:
$ ip link set ntfp2 up
$ ip addr add 10.125.0.1/24 dev ntfp2
$ ip tunnel add tun1 mode sit ttl 64 local 10.125.0.1 remote 10.125.0.2 dev ntfp2
$ ip addr add fd00:cafe:cafe::1/128 dev tun1
$ ip link set dev tun1 up
$ ip route add fd00:200::/64 dev tun1
$ scapy
>>> p = []
>>> p += IPv6(src='fd00:100::1', dst='fd00:200::1')/ICMPv6EchoRequest()
>>> send(p, count=1, inter=0.1)
>>> quit()
$ ip -s link ls dev tun1 | grep -A1 "TX.*errors"
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        1       0       0       0

The problem is that the network offset is set to the hard_header_len of the
output device (tun1, ie 14 + 20) and in our case, because the packet is
small (48 bytes) the pskb_inet_may_pull() fails (it tries to pull 40 bytes
(ipv6 header) starting from the network offset).

This problem is more generally related to device with variable hard header
length. To avoid a too intrusive patch in the current release, a (ugly)
workaround is proposed in this patch. It has to be cleaned up in net-next.

Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=993675a3100b1
Link: http://patchwork.ozlabs.org/patch/1024489/
Fixes: cb9f1b783850 ("ip: validate header length on virtual device xmit")
CC: Willem de Bruijn <willemb@google.com>
CC: Maxim Mikityanskiy <maximmi@mellanox.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent f7c4615
History
Tip revision: 88a8121dc1d3d0dbddd411b79ed236b6b6ea415c authored by Nicolas Dichtel on 17 January 2019, 10:27:22 UTC
af_packet: fix raw sockets over 6in4 tunnel
Tip revision: 88a8121
File Mode Size
9p
adfs
affs
afs
autofs
befs
bfs
btrfs
cachefiles
ceph
cifs
coda
configfs
cramfs
crypto
debugfs
devpts
dlm
ecryptfs
efivarfs
efs
exofs
exportfs
ext2
ext4
f2fs
fat
freevxfs
fscache
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hugetlbfs
isofs
jbd2
jffs2
jfs
kernfs
lockd
minix
nfs
nfs_common
nfsd
nilfs2
nls
notify
ntfs
ocfs2
omfs
openpromfs
orangefs
overlayfs
proc
pstore
qnx4
qnx6
quota
ramfs
reiserfs
romfs
squashfs
sysfs
sysv
tracefs
ubifs
udf
ufs
xfs
Kconfig -rw-r--r-- 7.4 KB
Kconfig.binfmt -rw-r--r-- 7.2 KB
Makefile -rw-r--r-- 4.2 KB
aio.c -rw-r--r-- 56.6 KB
anon_inodes.c -rw-r--r-- 4.5 KB
attr.c -rw-r--r-- 9.7 KB
bad_inode.c -rw-r--r-- 5.3 KB
binfmt_aout.c -rw-r--r-- 10.8 KB
binfmt_elf.c -rw-r--r-- 63.8 KB
binfmt_elf_fdpic.c -rw-r--r-- 47.3 KB
binfmt_em86.c -rw-r--r-- 2.8 KB
binfmt_flat.c -rw-r--r-- 27.7 KB
binfmt_misc.c -rw-r--r-- 18.3 KB
binfmt_script.c -rw-r--r-- 3.0 KB
block_dev.c -rw-r--r-- 54.3 KB
buffer.c -rw-r--r-- 89.9 KB
char_dev.c -rw-r--r-- 16.6 KB
compat.c -rw-r--r-- 3.4 KB
compat_binfmt_elf.c -rw-r--r-- 3.4 KB
compat_ioctl.c -rw-r--r-- 31.0 KB
coredump.c -rw-r--r-- 21.2 KB
d_path.c -rw-r--r-- 11.2 KB
dax.c -rw-r--r-- 45.7 KB
dcache.c -rw-r--r-- 81.2 KB
dcookies.c -rw-r--r-- 7.0 KB
direct-io.c -rw-r--r-- 40.9 KB
drop_caches.c -rw-r--r-- 1.6 KB
eventfd.c -rw-r--r-- 10.8 KB
eventpoll.c -rw-r--r-- 61.8 KB
exec.c -rw-r--r-- 47.0 KB
fcntl.c -rw-r--r-- 23.3 KB
fhandle.c -rw-r--r-- 6.8 KB
file.c -rw-r--r-- 24.0 KB
file_table.c -rw-r--r-- 10.0 KB
filesystems.c -rw-r--r-- 6.2 KB
fs-writeback.c -rw-r--r-- 70.4 KB
fs_pin.c -rw-r--r-- 2.0 KB
fs_struct.c -rw-r--r-- 3.3 KB
inode.c -rw-r--r-- 56.6 KB
internal.h -rw-r--r-- 5.0 KB
ioctl.c -rw-r--r-- 17.7 KB
iomap.c -rw-r--r-- 53.4 KB
libfs.c -rw-r--r-- 31.8 KB
locks.c -rw-r--r-- 77.3 KB
mbcache.c -rw-r--r-- 12.0 KB
mount.h -rw-r--r-- 3.9 KB
mpage.c -rw-r--r-- 21.1 KB
namei.c -rw-r--r-- 122.9 KB
namespace.c -rw-r--r-- 85.8 KB
no-block.c -rw-r--r-- 688 bytes
nsfs.c -rw-r--r-- 6.2 KB
open.c -rw-r--r-- 28.4 KB
pipe.c -rw-r--r-- 26.9 KB
pnode.c -rw-r--r-- 15.3 KB
pnode.h -rw-r--r-- 1.9 KB
posix_acl.c -rw-r--r-- 21.4 KB
proc_namespace.c -rw-r--r-- 7.8 KB
read_write.c -rw-r--r-- 49.4 KB
readdir.c -rw-r--r-- 11.3 KB
select.c -rw-r--r-- 35.3 KB
seq_file.c -rw-r--r-- 24.4 KB
signalfd.c -rw-r--r-- 9.0 KB
splice.c -rw-r--r-- 39.7 KB
stack.c -rw-r--r-- 2.5 KB
stat.c -rw-r--r-- 19.4 KB
statfs.c -rw-r--r-- 9.7 KB
super.c -rw-r--r-- 40.5 KB
sync.c -rw-r--r-- 9.9 KB
timerfd.c -rw-r--r-- 13.4 KB
userfaultfd.c -rw-r--r-- 50.5 KB
utimes.c -rw-r--r-- 7.4 KB
xattr.c -rw-r--r-- 23.4 KB

back to top