OrangePi_CM5/include/uapi/linux
Toke Høiland-Jørgensen 8c0c2d97ad icmp: don't send out ICMP messages with a source address of 0.0.0.0
[ Upstream commit 321827477360934dc040e9d3c626bf1de6c3ab3c ]

When constructing ICMP response messages, the kernel will try to pick a
suitable source address for the outgoing packet. However, if no IPv4
addresses are configured on the system at all, this will fail and we end up
producing an ICMP message with a source address of 0.0.0.0. This can happen
on a box routing IPv4 traffic via v6 nexthops, for instance.

Since 0.0.0.0 is not generally routable on the internet, there's a good
chance that such ICMP messages will never make it back to the sender of the
original packet that the ICMP message was sent in response to. This, in
turn, can create connectivity and PMTUd problems for senders. Fortunately,
RFC7600 reserves a dummy address to be used as a source for ICMP
messages (192.0.0.8/32), so let's teach the kernel to substitute that
address as a last resort if the regular source address selection procedure
fails.

Below is a quick example reproducing this issue with network namespaces:

ip netns add ns0
ip l add type veth peer netns ns0
ip l set dev veth0 up
ip a add 10.0.0.1/24 dev veth0
ip a add fc00:dead:cafe:42::1/64 dev veth0
ip r add 10.1.0.0/24 via inet6 fc00:dead:cafe:42::2
ip -n ns0 l set dev veth0 up
ip -n ns0 a add fc00:dead:cafe:42::2/64 dev veth0
ip -n ns0 r add 10.0.0.0/24 via inet6 fc00:dead:cafe:42::1
ip netns exec ns0 sysctl -w net.ipv4.icmp_ratelimit=0
ip netns exec ns0 sysctl -w net.ipv4.ip_forward=1
tcpdump -tpni veth0 -c 2 icmp &
ping -w 1 10.1.0.1 > /dev/null
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on veth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
IP 10.0.0.1 > 10.1.0.1: ICMP echo request, id 29, seq 1, length 64
IP 0.0.0.0 > 10.0.0.1: ICMP net 10.1.0.1 unreachable, length 92
2 packets captured
2 packets received by filter
0 packets dropped by kernel

With this patch the above capture changes to:
IP 10.0.0.1 > 10.1.0.1: ICMP echo request, id 31127, seq 1, length 64
IP 192.0.0.8 > 10.0.0.1: ICMP net 10.1.0.1 unreachable, length 92

Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Reported-by: Juliusz Chroboczek <jch@irif.fr>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-06-23 14:42:47 +02:00
..
android binder: add flag to clear buffer on txn complete 2020-12-30 11:54:09 +01:00
byteorder
…
caif
…
can can: isotp: implement cleanups / improvements from review 2020-10-12 10:06:08 +02:00
cifs
…
dvb
…
genwqe
…
hdlc
…
hsi
…
iio
…
isdn
…
mmc
…
netfilter netfilter: xt_SECMARK: add new revision to fix structure layout 2021-05-19 10:13:06 +02:00
netfilter_arp
…
netfilter_bridge
…
netfilter_ipv4
…
netfilter_ipv6
…
nfsd
…
raid
…
sched
…
spi
…
sunrpc
…
tc_act net/sched: act_mpls: Add action to push MPLS LSE before Ethernet header 2020-10-03 17:28:45 -07:00
tc_ematch
…
usb usb: webcam: Invalid size of Processing Unit Descriptor 2021-05-11 14:47:17 +02:00
wimax
…
a.out.h
…
acct.h
…
adb.h
…
adfs_fs.h
…
affs_hardblocks.h
…
agpgart.h
…
aio_abi.h
…
am437x-vpfe.h
…
apm_bios.h
…
arcfb.h
…
arm_sdei.h
…
aspeed-lpc-ctrl.h
…
aspeed-p2a-ctrl.h
…
atalk.h
…
atm.h
…
atm_eni.h
…
atm_he.h
…
atm_idt77105.h
…
atm_nicstar.h
…
atm_tcp.h
…
atm_zatm.h
…
atmapi.h
…
atmarp.h
…
atmbr2684.h
…
atmclip.h
…
atmdev.h
…
atmioc.h
…
atmlec.h
…
atmmpc.h
…
atmppp.h
…
atmsap.h
…
atmsvc.h
…
audit.h
…
auto_dev-ioctl.h
…
auto_fs.h
…
auto_fs4.h
…
auxvec.h
…
ax25.h
…
batadv_packet.h
…
batman_adv.h
…
baycom.h
…
bcache.h bcache: introduce BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE for large bucket 2021-01-12 20:18:25 +01:00
bcm933xx_hcs.h
…
bfs_fs.h
…
binfmts.h
…
blkpg.h
…
blktrace_api.h
…
blkzoned.h block: fix uapi blkzoned.h comments 2020-10-09 12:47:02 -06:00
bpf.h bpf: Fix enum names for bpf_this_cpu_ptr() and bpf_per_cpu_ptr() helpers 2020-12-11 14:19:07 -08:00
bpf_common.h
…
bpf_perf_event.h
…
bpfilter.h
…
bpqether.h
…
bsg.h
…
bt-bmc.h
…
btf.h
…
btrfs.h
…
btrfs_tree.h btrfs: tree-checker: fix false alert caused by legacy btrfs root item 2020-10-07 12:13:23 +02:00
can.h
…
capability.h capabilities: require CAP_SETFCAP to map uid 0 2021-05-07 11:04:31 +02:00
capi.h
…
cciss_defs.h
…
cciss_ioctl.h
…
cdrom.h block: scsi_ioctl: Avoid the use of one-element arrays 2020-10-02 17:58:52 -06:00
cec-funcs.h
…
cec.h
…
cgroupstats.h
…
chio.h
…
close_range.h
…
cm4000_cs.h
…
cn_proc.h
…
coda.h
…
coff.h
…
connector.h
…
const.h uapi: move constants from <linux/kernel.h> to <linux/const.h> 2021-01-06 14:56:51 +01:00
coresight-stm.h coresight: stm: Support marked packet 2020-09-17 18:46:04 +02:00
cramfs_fs.h
…
cryptouser.h
…
cuda.h
…
cyclades.h
…
cycx_cfm.h
…
dcbnl.h
…
dccp.h
…
devlink.h devlink: use _BITUL() macro instead of BIT() in the UAPI header 2020-12-30 11:53:58 +01:00
dlm.h
…
dlm_device.h
…
dlm_netlink.h
…
dlm_plock.h
…
dlmconstants.h
…
dm-ioctl.h dm: export dm_copy_name_and_uuid 2020-10-01 15:03:40 -04:00
dm-log-userspace.h
…
dma-buf.h
…
dma-heap.h
…
dn.h
…
dns_resolver.h
…
dqblk_xfs.h quota: Expand comment describing d_itimer 2020-09-10 09:10:06 +02:00
edd.h
…
efs_fs_sb.h
…
elf-em.h
…
elf-fdpic.h
…
elf.h arm64: mte: ptrace: Add NT_ARM_TAGGED_ADDR_CTRL regset 2020-09-04 12:46:07 +01:00
errno.h
…
errqueue.h
…
erspan.h
…
ethtool.h uapi: move constants from <linux/kernel.h> to <linux/const.h> 2021-01-06 14:56:51 +01:00
ethtool_netlink.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-09-22 16:45:34 -07:00
eventpoll.h
…
f2fs.h f2fs: move ioctl interface definitions to separated file 2021-05-19 10:13:00 +02:00
fadvise.h
…
falloc.h
…
fanotify.h
…
fb.h
…
fcntl.h
…
fd.h
…
fdreg.h
…
fib_rules.h
…
fiemap.h
…
filter.h
…
firewire-cdev.h
…
firewire-constants.h
…
fou.h
…
fpga-dfl.h
…
fs.h
…
fscrypt.h fscrypt: remove kernel-internal constants from UAPI header 2020-12-26 16:02:43 +01:00
fsi.h
…
fsl_hypervisor.h
…
fsmap.h
…
fsverity.h
…
fuse.h fuse: add submount support to <uapi/linux/fuse.h> 2020-09-18 15:17:40 +02:00
futex.h
…
gameport.h
…
gen_stats.h
…
genetlink.h genetlink: allow dumping command-specific policy 2020-10-03 14:18:29 -07:00
gfs2_ondisk.h
…
gpio.h gpio: uapi: clarify the meaning of 'empty' char arrays 2020-10-28 15:46:47 +01:00
gsmmux.h
…
gtp.h gtp: add notification mechanism 2020-08-27 08:01:47 -07:00
hash_info.h
…
hdlc.h
…
hdlcdrv.h
…
hdreg.h
…
hid.h
…
hiddev.h
…
hidraw.h
…
hpet.h
…
hsr_netlink.h
…
hw_breakpoint.h
…
hyperv.h
…
i2c-dev.h
…
i2c.h
…
i2o-dev.h
…
i8k.h
…
icmp.h
…
icmpv6.h ICMPv6: Add ICMPv6 Parameter Problem, code 3 definition 2020-10-31 13:16:02 -07:00
idxd.h dmaengine: idxd: fix delta_rec and crc size field for completion record 2021-04-21 13:00:50 +02:00
if.h
…
if_addr.h
…
if_addrlabel.h
…
if_alg.h crypto: af_alg - avoid undefined behavior accessing salg_name 2020-12-26 16:02:45 +01:00
if_arcnet.h
…
if_arp.h
…
if_bonding.h
…
if_bridge.h net: bridge: mcast: add support for blocked port groups 2020-09-23 13:24:34 -07:00
if_cablemodem.h
…
if_eql.h
…
if_ether.h
…
if_fc.h
…
if_fddi.h
…
if_frad.h
…
if_hippi.h
…
if_infiniband.h
…
if_link.h net: remove comments on struct rtnl_link_stats 2020-09-17 17:58:13 -07:00
if_ltalk.h
…
if_macsec.h
…
if_packet.h net/packet: make packet_fanout.arr size configurable up to 64K 2021-05-14 09:50:38 +02:00
if_phonet.h
…
if_plip.h
…
if_ppp.h
…
if_pppol2tp.h l2tp: remove tunnel and session debug flags field 2020-08-22 12:44:37 -07:00
if_pppox.h
…
if_slip.h
…
if_team.h
…
if_tun.h
…
if_tunnel.h
…
if_vlan.h
…
if_x25.h
…
if_xdp.h
…
ife.h
…
igmp.h
…
ila.h
…
in.h icmp: don't send out ICMP messages with a source address of 0.0.0.0 2021-06-23 14:42:47 +02:00
in6.h
…
in_route.h
…
inet_diag.h ip: expose inet sockopts through inet_diag 2020-09-03 15:17:28 -07:00
inotify.h
…
input-event-codes.h HID: hid-input: add mapping for emoji picker key 2021-06-18 10:00:03 +02:00
input.h
…
io_uring.h io_uring: provide IORING_ENTER_SQ_WAIT for SQPOLL SQ ring waits 2020-09-30 20:32:33 -06:00
ioctl.h
…
iommu.h iommu/vt-d: Check UAPI data processed by IOMMU core 2020-10-01 14:52:46 +02:00
ip.h
…
ip6_tunnel.h
…
ip_vs.h
…
ipc.h
…
ipmi.h
…
ipmi_bmc.h
…
ipmi_msgdefs.h ipmi:msghandler: retry to get device id on an error 2020-09-15 09:57:45 -05:00
ipsec.h
…
ipv6.h
…
ipv6_route.h
…
ipx.h
…
irqnr.h
…
iso_fs.h
…
isst_if.h
…
ivtv.h
…
ivtvfb.h
…
jffs2.h
…
joystick.h
…
kcm.h
…
kcmp.h
…
kcov.h
…
kd.h
…
kdev_t.h
…
kernel-page-flags.h
…
kernel.h uapi: move constants from <linux/kernel.h> to <linux/const.h> 2021-01-06 14:56:51 +01:00
kernelcapi.h
…
kexec.h
…
keyboard.h
…
keyctl.h
…
kfd_ioctl.h include/uapi/linux: Fix indentation in kfd_smi_event enum 2020-08-31 14:40:29 -04:00
kvm.h kvm: x86: only provide PV features if enabled in guest's CPUID 2020-10-21 17:36:32 -04:00
kvm_para.h
…
l2tp.h net: l2tp: reduce log level of messages in receive path, add counter instead 2021-03-17 17:06:11 +01:00
libc-compat.h
…
lightnvm.h uapi: move constants from <linux/kernel.h> to <linux/const.h> 2021-01-06 14:56:51 +01:00
limits.h
…
lirc.h
…
llc.h
…
loop.h
…
lp.h
…
lwtunnel.h
…
magic.h
…
major.h
…
map_to_7segment.h
…
matroxfb.h
…
max2175.h
…
mdio.h
…
media-bus-format.h
…
media.h
…
mei.h
…
membarrier.h rseq/membarrier: Add MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ 2020-09-25 14:23:27 +02:00
memfd.h
…
mempolicy.h
…
meye.h
…
mii.h
…
minix_fs.h
…
mman.h powerpc/8xx: Support 16k hugepages with 4k pages 2020-09-15 22:13:31 +10:00
mmtimer.h
…
module.h
…
mount.h Add a "nosymfollow" mount option. 2020-08-27 16:06:47 -04:00
mpls.h
…
mpls_iptunnel.h
…
mptcp.h
…
mqueue.h
…
mroute.h ipmr: Add high byte of VIF ID to igmpmsg 2020-09-10 12:25:51 -07:00
mroute6.h uapi: move constants from <linux/kernel.h> to <linux/const.h> 2021-01-06 14:56:51 +01:00
mrp_bridge.h
…
msdos_fs.h
…
msg.h
…
mtio.h
…
n_r3964.h
…
nbd-netlink.h
…
nbd.h
…
ncsi.h
…
ndctl.h
…
neighbour.h
…
net.h
…
net_dropmon.h
…
net_namespace.h
…
net_tstamp.h
…
netconf.h
…
netdevice.h
…
netfilter.h netfilter: restore NF_INET_NUMHOOKS 2020-10-14 20:28:05 -07:00
netfilter_arp.h
…
netfilter_bridge.h
…
netfilter_decnet.h
…
netfilter_ipv4.h
…
netfilter_ipv6.h
…
netlink.h uapi: move constants from <linux/kernel.h> to <linux/const.h> 2021-01-06 14:56:51 +01:00
netlink_diag.h
…
netrom.h
…
nexthop.h
…
nfc.h
…
nfs.h
…
nfs2.h
…
nfs3.h
…
nfs4.h NFSv4.2: support EXCHGID4_FLAG_SUPP_FENCE_OPS 4.2 EXCHANGE_ID flag 2020-10-16 09:28:43 -04:00
nfs4_mount.h
…
nfs_fs.h
…
nfs_idmap.h
…
nfs_mount.h
…
nfsacl.h NFSACL: Replace PROC() macro with open code 2020-10-02 09:37:41 -04:00
nilfs2_api.h
…
nilfs2_ondisk.h
…
nitro_enclaves.h nitro_enclaves: Add ioctl interface definition 2020-09-22 13:58:40 +02:00
nl80211.h nl80211: extend support to config spatial reuse parameter set 2020-09-28 15:07:41 +02:00
nsfs.h
…
nubus.h
…
nvme_ioctl.h
…
nvram.h
…
omap3isp.h
…
omapfb.h
…
oom.h
…
openat2.h
…
openvswitch.h net: openvswitch: fix TTL decrement action netlink message format 2020-11-27 11:03:06 -08:00
packet_diag.h
…
param.h
…
parport.h
…
patchkey.h
…
pci.h
…
pci_regs.h Merge branch 'remotes/lorenzo/pci/dwc' 2020-10-21 09:58:39 -05:00
pcitest.h
…
perf_event.h perf: correct SNOOPX field offset 2020-10-19 19:39:22 +02:00
personality.h
…
pfkeyv2.h
…
pg.h
…
phantom.h
…
phonet.h
…
pidfd.h pidfd: support PIDFD_NONBLOCK in pidfd_open() 2020-09-04 12:34:50 +02:00
pkt_cls.h net/sched: cls_flower: Reject invalid ct_state flags rules 2021-03-07 12:34:07 +01:00
pkt_sched.h
…
pktcdvd.h
…
pmu.h
…
poll.h
…
posix_acl.h
…
posix_acl_xattr.h
…
posix_types.h
…
ppdev.h
…
ppp-comp.h
…
ppp-ioctl.h
…
ppp_defs.h
…
pps.h
…
pr.h
…
prctl.h arm64: mte: Allow user control of the generated random tags via prctl() 2020-09-04 12:46:07 +01:00
psample.h psample: Fix user API breakage 2021-03-30 14:31:53 +02:00
psci.h
…
psp-sev.h
…
ptp_clock.h
…
ptrace.h ptrace: Prevent kernel-infoleak in ptrace_get_syscall_info() 2020-12-21 13:30:06 +01:00
qemu_fw_cfg.h
…
qnx4_fs.h
…
qnxtypes.h
…
qrtr.h
…
quota.h
…
radeonfb.h
…
random.h
…
raw.h
…
rds.h
…
reboot.h
…
reiserfs_fs.h
…
reiserfs_xattr.h
…
remoteproc_cdev.h
…
resource.h
…
rfkill.h
…
rio_cm_cdev.h
…
rio_mport_cdev.h
…
romfs_fs.h
…
rose.h
…
route.h
…
rpl.h uapi: fix big endian definition of ipv6_rpl_sr_hdr 2021-02-03 23:28:43 +01:00
rpl_iptunnel.h
…
rpmsg.h
…
rseq.h
…
rtc.h
…
rtnetlink.h
…
rxrpc.h rxrpc: Fix accept on a connection that need securing 2020-10-05 16:35:57 +01:00
scc.h
…
sched.h
…
scif_ioctl.h
…
screen_info.h
…
sctp.h
…
sdla.h
…
seccomp.h
…
securebits.h
…
sed-opal.h
…
seg6.h
…
seg6_genl.h
…
seg6_hmac.h
…
seg6_iptunnel.h
…
seg6_local.h
…
selinux_netlink.h
…
sem.h
…
serial.h
…
serial_core.h
…
serial_reg.h
…
serio.h
…
shm.h
…
signal.h
…
signalfd.h
…
smc.h
…
smc_diag.h
…
smiapp.h
…
snmp.h tcp: skip DSACKs with dubious sequence ranges 2020-09-24 20:15:45 -07:00
sock_diag.h
…
socket.h
…
sockios.h
…
sonet.h
…
sonypi.h
…
sound.h
…
soundcard.h
…
stat.h uapi: fix statx attribute value overlap for DAX & MOUNT_ROOT 2020-12-03 10:03:14 -08:00
stddef.h
…
stm.h
…
string.h
…
suspend_ioctls.h
…
swab.h
…
switchtec_ioctl.h
…
sync_file.h
…
synclink.h
…
sysctl.h uapi: move constants from <linux/kernel.h> to <linux/const.h> 2021-01-06 14:56:51 +01:00
sysinfo.h
…
target_core_user.h
…
taskstats.h
…
tcp.h
…
tcp_metrics.h
…
tee.h
…
termios.h
…
thermal.h
…
time.h
…
time_types.h
…
timerfd.h
…
times.h
…
timex.h
…
tiocl.h
…
tipc.h tipc: add automatic rekeying for encryption key 2020-09-18 13:58:37 -07:00
tipc_config.h
…
tipc_netlink.h tipc: add automatic rekeying for encryption key 2020-09-18 13:58:37 -07:00
tipc_sockets_diag.h
…
tls.h
…
toshiba.h
…
tty.h
…
tty_flags.h tty: actually undefine superseded ASYNC flags 2021-05-14 09:50:18 +02:00
types.h
…
udf_fs_i.h
…
udmabuf.h
…
udp.h
…
uhid.h
…
uinput.h
…
uio.h
…
uleds.h
…
ultrasound.h
…
um_timetravel.h
…
un.h
…
unistd.h
…
unix_diag.h
…
usbdevice_fs.h
…
usbip.h
…
userfaultfd.h
…
userio.h
…
utime.h
…
utsname.h
…
uuid.h
…
uvcvideo.h
…
v4l2-common.h
…
v4l2-controls.h media: v4l2-ctrl: Add VP9 codec levels 2020-09-14 15:39:42 +02:00
v4l2-dv-timings.h
…
v4l2-mediabus.h media: v4l2: extend the CSC API to subdevice. 2020-09-26 10:22:29 +02:00
v4l2-subdev.h media: v4l2-subdev.h: BIT() is not available in userspace 2021-01-30 13:55:18 +01:00
vbox_err.h
…
vbox_vmmdev_types.h
…
vboxguest.h
…
veth.h
…
vfio.h Merge branches 'v5.10/vfio/fsl-mc-v6' and 'v5.10/vfio/zpci-info-v3' into v5.10/vfio/next 2020-10-12 11:41:02 -06:00
vfio_ccw.h
…
vfio_zdev.h vfio: Introduce capability definitions for VFIO_DEVICE_GET_INFO 2020-10-07 14:23:44 -06:00
vhost.h vhost: vdpa: report iova range 2020-10-23 11:55:28 -04:00
vhost_types.h vhost: vdpa: report iova range 2020-10-23 11:55:28 -04:00
videodev2.h Linux 5.9-rc7 2020-10-04 12:19:12 +02:00
virtio_9p.h
…
virtio_balloon.h
…
virtio_blk.h
…
virtio_config.h
…
virtio_console.h
…
virtio_crypto.h
…
virtio_fs.h virtiofs: set up virtio_fs dax_device 2020-09-10 11:39:22 +02:00
virtio_gpu.h
…
virtio_ids.h
…
virtio_input.h
…
virtio_iommu.h
…
virtio_mem.h
…
virtio_mmio.h virtio: Implement get_shm_region for MMIO transport 2020-09-10 10:05:58 +02:00
virtio_net.h
…
virtio_pci.h virtio: Implement get_shm_region for PCI transport 2020-09-10 10:05:58 +02:00
virtio_pmem.h
…
virtio_ring.h
…
virtio_rng.h
…
virtio_scsi.h
…
virtio_types.h
…
virtio_vsock.h
…
vm_sockets.h
…
vm_sockets_diag.h
…
vmcore.h
…
vsockmon.h
…
vt.h
…
vtpm_proxy.h
…
wait.h
…
watch_queue.h
…
watchdog.h
…
wimax.h
…
wireguard.h
…
wireless.h
…
wmi.h
…
x25.h
…
xattr.h
…
xdp_diag.h
…
xfrm.h
…
xilinx-v4l2-controls.h
…
zorro.h
…
zorro_ids.h
…