linux_dsm_epyc7002/net/ipv4
Nicolai Stange 20b50d7997 net: ipv4: emulate READ_ONCE() on ->hdrincl bit-field in raw_sendmsg()
Commit 8f659a03a0 ("net: ipv4: fix for a race condition in
raw_sendmsg") fixed the issue of possibly inconsistent ->hdrincl handling
due to concurrent updates by reading this bit-field member into a local
variable and using the thus stabilized value in subsequent tests.

However, aforementioned commit also adds the (correct) comment that

  /* hdrincl should be READ_ONCE(inet->hdrincl)
   * but READ_ONCE() doesn't work with bit fields
   */

because as it stands, the compiler is free to shortcut or even eliminate
the local variable at its will.

Note that I have not seen anything like this happening in reality and thus,
the concern is a theoretical one.

However, in order to be on the safe side, emulate a READ_ONCE() on the
bit-field by doing it on the local 'hdrincl' variable itself:

	int hdrincl = inet->hdrincl;
	hdrincl = READ_ONCE(hdrincl);

This breaks the chain in the sense that the compiler is not allowed
to replace subsequent reads from hdrincl with reloads from inet->hdrincl.

Fixes: 8f659a03a0 ("net: ipv4: fix for a race condition in raw_sendmsg")
Signed-off-by: Nicolai Stange <nstange@suse.de>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-01-09 11:59:16 -05:00
..
netfilter netfilter: ipt_CLUSTERIP: fix clusterip_net_exit build regression 2017-12-07 23:19:58 +01:00
af_inet.c net: accept UFO datagrams from tuntap and packet 2017-11-24 01:37:35 +09:00
ah4.c net: use -ENOSPC for transient busy indication 2017-11-03 22:11:17 +08:00
arp.c
cipso_ipv4.c
datagram.c
devinet.c ipv4: igmp: guard against silly MTU values 2017-12-13 13:13:58 -05:00
esp4_offload.c
esp4.c net: use -ENOSPC for transient busy indication 2017-11-03 22:11:17 +08:00
fib_frontend.c ipv4: Fix use-after-free when flushing FIB tables 2017-12-20 15:12:39 -05:00
fib_lookup.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fib_notifier.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fib_rules.c
fib_semantics.c ipv4: fib: Fix metrics match when deleting a route 2017-12-19 14:21:58 -05:00
fib_trie.c net: Add extack to fib_notifier_info 2017-11-01 11:50:43 +09:00
fou.c
gre_demux.c
gre_offload.c
icmp.c
igmp.c net: igmp: Use correct source address on IGMPv3 reports 2017-12-13 13:51:27 -05:00
inet_connection_sock.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-10-30 21:09:24 +09:00
inet_diag.c
inet_fragment.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2017-11-15 11:56:19 -08:00
inet_hashtables.c
inet_timewait_sock.c Revert "tcp: must block bh in __inet_twsk_hashdance()" 2017-12-05 11:23:58 -05:00
inetpeer.c
ip_forward.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ip_fragment.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-11-04 09:26:51 +09:00
ip_gre.c ip_gre: remove the incorrect mtu limit for ipgre tap 2017-12-19 13:45:32 -05:00
ip_input.c
ip_options.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ip_output.c
ip_sockglue.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ip_tunnel_core.c
ip_tunnel.c ipv4: igmp: guard against silly MTU values 2017-12-13 13:13:58 -05:00
ip_vti.c ip_vti: remove the useless err_count check in vti_xmit 2017-11-01 11:57:32 +09:00
ipcomp.c
ipconfig.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ipip.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-10-30 21:09:24 +09:00
ipmr.c treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
Kconfig
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
netfilter.c
ping.c
proc.c tcp: retire FACK loss detection 2017-11-11 18:53:16 +09:00
protocol.c
raw_diag.c
raw.c net: ipv4: emulate READ_ONCE() on ->hdrincl bit-field in raw_sendmsg() 2018-01-09 11:59:16 -05:00
route.c route: also update fnhe_genid when updating a route cache 2017-11-18 10:32:41 +09:00
syncookies.c
sysctl_net_ipv4.c tcp: Namespace-ify sysctl_tcp_default_congestion_control 2017-11-15 14:09:52 +09:00
tcp_bbr.c tcp_bbr: reset long-term bandwidth sampling on loss recovery undo 2017-12-08 13:27:43 -05:00
tcp_bic.c
tcp_cdg.c
tcp_cong.c tcp: Namespace-ify sysctl_tcp_default_congestion_control 2017-11-15 14:09:52 +09:00
tcp_cubic.c
tcp_dctcp.c
tcp_diag.c
tcp_fastopen.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-11-04 09:26:51 +09:00
tcp_highspeed.c
tcp_htcp.c
tcp_hybla.c
tcp_illinois.c
tcp_input.c tcp: fix potential underestimation on rcv_rtt 2017-12-13 16:01:17 -05:00
tcp_ipv4.c tcp md5sig: Use skb's saddr when replying to an incoming segment 2017-12-12 11:15:42 -05:00
tcp_lp.c
tcp_metrics.c tcp: retire FACK loss detection 2017-11-11 18:53:16 +09:00
tcp_minisocks.c tcp/dccp: block bh before arming time_wait timer 2017-12-01 15:07:43 -05:00
tcp_nv.c tcp_nv: use do_div() instead of expensive div64_u64() 2017-11-04 22:34:52 +09:00
tcp_offload.c tcp: gso: avoid refcount_t warning from tcp_gso_segment() 2017-11-10 18:07:15 +09:00
tcp_output.c tcp: when scheduling TLP, time of RTO should account for current ACK 2017-11-19 12:25:26 +09:00
tcp_probe.c
tcp_rate.c tcp: invalidate rate samples during SACK reneging 2017-12-08 10:07:02 -05:00
tcp_recovery.c tcp: evaluate packet losses upon RTT change 2017-12-08 14:14:11 -05:00
tcp_scalable.c
tcp_timer.c tcp: refresh tcp_mstamp from timers callbacks 2017-12-13 16:04:04 -05:00
tcp_ulp.c
tcp_vegas.c
tcp_vegas.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
tcp_veno.c
tcp_westwood.c
tcp_yeah.c
tcp.c tcp: invalidate rate samples during SACK reneging 2017-12-08 10:07:02 -05:00
tunnel4.c
udp_diag.c
udp_impl.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
udp_offload.c net: accept UFO datagrams from tuntap and packet 2017-11-24 01:37:35 +09:00
udp_tunnel.c
udp.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2017-11-15 11:56:19 -08:00
udplite.c
xfrm4_input.c xfrm: Reinject transport-mode packets through tasklet 2017-12-19 08:23:21 +01:00
xfrm4_mode_beet.c
xfrm4_mode_transport.c
xfrm4_mode_tunnel.c
xfrm4_output.c
xfrm4_policy.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfrm4_protocol.c
xfrm4_state.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfrm4_tunnel.c