Nikolay Aleksandrov
18041e3174
vrf: vrf_master_ifindex_rcu is not always called with rcu read lock
While running net-next I hit this:
[ 634.073119] ===============================
[ 634.073150] [ INFO: suspicious RCU usage. ]
[ 634.073182] 4.2.0-rc6+ #45 Not tainted
[ 634.073213] -------------------------------
[ 634.073244] include/net/vrf.h:38 suspicious rcu_dereference_check()
usage!
[ 634.073274]
other info that might help us debug this:
[ 634.073307]
rcu_scheduler_active = 1, debug_locks = 1
[ 634.073338] 2 locks held by swapper/0/0:
[ 634.073369] #0: (((&n->timer))){+.-...}, at: [<ffffffff8112bc35>]
call_timer_fn+0x5/0x480
[ 634.073412] #1: (slock-AF_INET){+.-...}, at: [<ffffffff8174f0f5>]
icmp_send+0x155/0x5f0
[ 634.073450]
stack backtrace:
[ 634.073483] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.2.0-rc6+ #45
[ 634.073514] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS
VirtualBox 12/01/2006
[ 634.073545] 0000000000000000 0593ba8242d9ace4 ffff88002fc03b48
ffffffff81803f1b
[ 634.073612] 0000000000000000 ffffffff81e12500 ffff88002fc03b78
ffffffff811003c5
[ 634.073642] 0000000000000000 ffff88002ec4e600 ffffffff81f00f80
ffff88002fc03cf0
[ 634.073669] Call Trace:
[ 634.073694] <IRQ> [<ffffffff81803f1b>] dump_stack+0x4c/0x65
[ 634.073728] [<ffffffff811003c5>] lockdep_rcu_suspicious+0xc5/0x100
[ 634.073763] [<ffffffff8174eb56>] icmp_route_lookup+0x176/0x5c0
[ 634.073793] [<ffffffff8174f2fb>] ? icmp_send+0x35b/0x5f0
[ 634.073818] [<ffffffff8174f274>] ? icmp_send+0x2d4/0x5f0
[ 634.073844] [<ffffffff8174f3ce>] icmp_send+0x42e/0x5f0
[ 634.073873] [<ffffffff8170b662>] ipv4_link_failure+0x22/0xa0
[ 634.073899] [<ffffffff8174bdda>] arp_error_report+0x3a/0x80
[ 634.073926] [<ffffffff816d6100>] ? neigh_lookup+0x2c0/0x2c0
[ 634.073952] [<ffffffff816d396e>] neigh_invalidate+0x8e/0x110
[ 634.073984] [<ffffffff816d62ae>] neigh_timer_handler+0x1ae/0x290
[ 634.074013] [<ffffffff816d6100>] ? neigh_lookup+0x2c0/0x2c0
[ 634.074013] [<ffffffff8112bce3>] call_timer_fn+0xb3/0x480
[ 634.074013] [<ffffffff8112bc35>] ? call_timer_fn+0x5/0x480
[ 634.074013] [<ffffffff816d6100>] ? neigh_lookup+0x2c0/0x2c0
[ 634.074013] [<ffffffff8112c2bc>] run_timer_softirq+0x20c/0x430
[ 634.074013] [<ffffffff810af50e>] __do_softirq+0xde/0x630
[ 634.074013] [<ffffffff810afc97>] irq_exit+0x117/0x120
[ 634.074013] [<ffffffff81810976>] smp_apic_timer_interrupt+0x46/0x60
[ 634.074013] [<ffffffff8180e950>] apic_timer_interrupt+0x70/0x80
[ 634.074013] <EOI> [<ffffffff8106b9d6>] ? native_safe_halt+0x6/0x10
[ 634.074013] [<ffffffff81101d8d>] ? trace_hardirqs_on+0xd/0x10
[ 634.074013] [<ffffffff81027d43>] default_idle+0x23/0x200
[ 634.074013] [<ffffffff8102852f>] arch_cpu_idle+0xf/0x20
[ 634.074013] [<ffffffff810f89ba>] default_idle_call+0x2a/0x40
[ 634.074013] [<ffffffff810f8dcc>] cpu_startup_entry+0x39c/0x4c0
[ 634.074013] [<ffffffff817f9cad>] rest_init+0x13d/0x150
[ 634.074013] [<ffffffff81f69038>] start_kernel+0x4a8/0x4c9
[ 634.074013] [<ffffffff81f68120>] ?
early_idt_handler_array+0x120/0x120
[ 634.074013] [<ffffffff81f68339>] x86_64_start_reservations+0x2a/0x2c
[ 634.074013] [<ffffffff81f68485>] x86_64_start_kernel+0x14a/0x16d
It would seem vrf_master_ifindex_rcu() can be called without RCU held in
other contexts as well so introduce a new helper which acquires rcu and
returns the ifindex.
Also add curly braces around both the "if" and "else" parts as per the
style guide.
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
|
2015-08-19 22:13:20 -07:00 |
| .. |
|
9p
|
9p: switch p9_client_read() to passing struct iov_iter *
|
2015-04-11 22:28:27 -04:00 |
|
bluetooth
|
Bluetooth: add hci_connect_le_scan
|
2015-08-10 21:36:13 +02:00 |
|
caif
|
caif: fix a signedness bug in cfpkt_iterate()
|
2015-02-20 17:35:14 -05:00 |
|
irda
|
irda: Convert function pointer arrays and uses to const
|
2014-12-10 15:33:16 -05:00 |
|
iucv
|
|
|
|
netfilter
|
netfilter: fix netns dependencies with conntrack templates
|
2015-07-20 14:58:19 +02:00 |
|
netns
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
|
2015-08-04 23:57:45 -07:00 |
|
nfc
|
NFC: nci: add generic uart support
|
2015-06-11 23:37:37 +02:00 |
|
phonet
|
|
|
|
sctp
|
sctp: fix ASCONF list handling
|
2015-06-14 12:55:49 -07:00 |
|
tc_act
|
net_sched: act_mirred: remove spinlock in fast path
|
2015-07-08 13:50:42 -07:00 |
|
6lowpan.h
|
6lowpan: add generic 6lowpan netdev private data
|
2015-08-11 22:05:36 +02:00 |
|
act_api.h
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2015-07-31 23:52:20 -07:00 |
|
addrconf.h
|
ipv6: change ipv6_stub_impl.ipv6_dst_lookup to take net argument
|
2015-07-31 15:21:30 -07:00 |
|
af_ieee802154.h
|
ieee802154: mac802154: remove FSF address
|
2014-10-25 08:07:30 +02:00 |
|
af_rxrpc.h
|
|
|
|
af_unix.h
|
net/unix: support SCM_SECURITY for stream sockets
|
2015-06-10 22:49:20 -07:00 |
|
af_vsock.h
|
net: Pass kern from net_proto_family.create to sk_alloc
|
2015-05-11 10:50:17 -04:00 |
|
ah.h
|
ipsec: Remove obsolete MAX_AH_AUTH_LEN
|
2014-09-18 10:54:36 +02:00 |
|
arp.h
|
neigh: Factor out ___neigh_lookup_noref
|
2015-03-04 00:23:23 -05:00 |
|
atmclip.h
|
|
|
|
ax25.h
|
ax25: Stop using sock->sk_protinfo.
|
2015-06-28 16:55:44 -07:00 |
|
ax88796.h
|
|
|
|
bond_3ad.h
|
bonding: Implement port churn-machine (AD standard 43.4.17).
|
2015-02-24 16:05:48 -05:00 |
|
bond_alb.h
|
net: Move bonding headers under include/net
|
2014-11-10 13:27:49 -05:00 |
|
bond_options.h
|
bonding: convert num_grat_arp to the new bonding option API
|
2015-07-27 01:05:24 -07:00 |
|
bonding.h
|
bonding: Implement user key part of port_key in an AD system.
|
2015-05-11 10:59:32 -04:00 |
|
busy_poll.h
|
|
|
|
cfg80211-wext.h
|
|
|
|
cfg80211.h
|
Merge branch 'mac80211' into mac80211-next
|
2015-07-17 15:39:41 +02:00 |
|
cfg802154.h
|
ieee802154: add ack request default handling
|
2015-08-10 20:43:06 +02:00 |
|
checksum.h
|
net: Add inet_proto_csum_replace_by_diff utility function
|
2015-08-17 21:33:06 -07:00 |
|
cipso_ipv4.h
|
cipso: don't use IPCB() to locate the CIPSO IP option
|
2015-02-11 14:46:37 -05:00 |
|
cls_cgroup.h
|
cls_cgroup: factor out classid retrieval
|
2015-07-20 12:41:30 -07:00 |
|
codel.h
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2015-05-13 14:31:43 -04:00 |
|
compat.h
|
net: switch importing msghdr from userland to {compat_,}import_iovec()
|
2015-04-09 00:02:26 -04:00 |
|
datalink.h
|
net: Move prototype declaration to header file include/net/datalink.h from net/ipx/af_ipx.c
|
2014-02-09 17:32:50 -08:00 |
|
dcbevent.h
|
|
|
|
dcbnl.h
|
net/dcb: Add IEEE QCN attribute
|
2015-03-06 21:50:02 -05:00 |
|
dn.h
|
net: Move prototype declaration to header file include/net/dn.h from net/decnet/af_decnet.c
|
2014-02-09 17:32:49 -08:00 |
|
dn_dev.h
|
|
|
|
dn_fib.h
|
|
|
|
dn_neigh.h
|
netfilter: Pass socket pointer down through okfn().
|
2015-04-07 15:25:55 -04:00 |
|
dn_nsp.h
|
|
|
|
dn_route.h
|
net: Move prototype declaration to appropriate header file from decnet/af_decnet.c
|
2014-02-09 17:32:49 -08:00 |
|
dsa.h
|
net: dsa: Add dsa_is_dsa_port() helper
|
2015-08-18 14:17:21 -07:00 |
|
dsfield.h
|
|
|
|
dst.h
|
dst: Metadata destinations
|
2015-07-21 10:39:05 -07:00 |
|
dst_metadata.h
|
bpf: add helpers to access tunnel metadata
|
2015-07-31 15:20:22 -07:00 |
|
dst_ops.h
|
net: Remove protocol from struct dst_ops
|
2015-03-09 16:06:10 -04:00 |
|
esp.h
|
|
|
|
ethoc.h
|
net: ethoc: set up MII management bus clock
|
2014-02-04 20:19:51 -08:00 |
|
fib_rules.h
|
fib: Add fib rule match on tunnel id
|
2015-07-21 10:39:06 -07:00 |
|
firewire.h
|
|
|
|
flow.h
|
net: Use VRF device index for lookups on TX
|
2015-08-13 22:43:20 -07:00 |
|
flow_dissector.h
|
mpls: Add MPLS entropy label in flow_keys
|
2015-06-04 15:44:31 -07:00 |
|
flowcache.h
|
flowcache: Make flow cache name space aware
|
2014-02-12 07:02:11 +01:00 |
|
fou.h
|
ip_tunnel: Ops registration for secondary encap (fou, gue)
|
2014-11-12 15:01:35 -05:00 |
|
garp.h
|
|
|
|
gen_stats.h
|
net: sched: enable per cpu qstats
|
2014-09-30 01:02:26 -04:00 |
|
genetlink.h
|
net: Introduce possible_net_t
|
2015-03-12 14:39:40 -04:00 |
|
geneve.h
|
geneve: move definition of geneve_hdr() to geneve.h
|
2015-05-13 15:59:13 -04:00 |
|
gre.h
|
gre: Remove support for sharing GRE protocol hook.
|
2015-08-10 14:03:54 -07:00 |
|
gro_cells.h
|
ip_tunnel: Create percpu gro_cell
|
2015-01-18 01:56:32 -05:00 |
|
gue.h
|
gue: Protocol constants for remote checksum offload
|
2014-11-05 16:30:03 -05:00 |
|
icmp.h
|
|
|
|
ieee80211_radiotap.h
|
mac80211: propagate STBC / LDPC flags to radiotap
|
2014-02-06 09:34:58 +01:00 |
|
ieee802154_netdev.h
|
mac802154: cleanup llsec param flags
|
2015-06-12 11:42:29 +02:00 |
|
if_inet6.h
|
ipv6: do retries on stable privacy addresses
|
2015-03-23 22:12:09 -04:00 |
|
inet6_connection_sock.h
|
inet: get rid of central tcp/dccp listener timer
|
2015-03-20 12:40:25 -04:00 |
|
inet6_hashtables.h
|
ipv6: get rid of __inet6_hash()
|
2015-03-18 22:00:35 -04:00 |
|
inet_common.h
|
net: Modify sk_alloc to not reference count the netns of kernel sockets.
|
2015-05-11 10:50:18 -04:00 |
|
inet_connection_sock.h
|
tcp: fix child sockets to use system default congestion control if not set
|
2015-05-31 21:49:14 -07:00 |
|
inet_ecn.h
|
tunnel: fix RFC number in comment for INET_ECN_decapsulate()
|
2014-05-07 15:30:52 -04:00 |
|
inet_frag.h
|
inet: frags: remove INET_FRAG_EVICTED and use list_evictor for the test
|
2015-07-26 21:00:15 -07:00 |
|
inet_hashtables.h
|
inet: simplify timewait refcounting
|
2015-07-09 15:12:20 -07:00 |
|
inet_sock.h
|
inet: add IP_BIND_ADDRESS_NO_PORT to overcome bind(0) limitations
|
2015-06-06 23:57:12 -07:00 |
|
inet_timewait_sock.h
|
inet: inet_twsk_deschedule factorization
|
2015-07-09 15:12:20 -07:00 |
|
inetpeer.h
|
tcp: simplify inetpeer_addr_base use
|
2015-03-31 13:58:35 -04:00 |
|
ip.h
|
net: Set sk_txhash from a random number
|
2015-07-29 22:44:04 -07:00 |
|
ip6_checksum.h
|
net: add gro_compute_pseudo functions
|
2014-08-24 18:09:23 -07:00 |
|
ip6_fib.h
|
ipv6: support for fib route lwtunnel encap attributes
|
2015-07-21 10:39:04 -07:00 |
|
ip6_route.h
|
ipv6: Add rt6_get_cookie() function
|
2015-05-25 13:25:34 -04:00 |
|
ip6_tunnel.h
|
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
|
2015-04-07 15:29:08 -04:00 |
|
ip_fib.h
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2015-07-31 23:52:20 -07:00 |
|
ip_tunnels.h
|
ip_gre: Add support to collect tunnel metadata.
|
2015-08-10 14:03:54 -07:00 |
|
ip_vs.h
|
net: Introduce possible_net_t
|
2015-03-12 14:39:40 -04:00 |
|
ipcomp.h
|
|
|
|
ipconfig.h
|
|
|
|
ipv6.h
|
ipv6: Enable auto flow labels by default
|
2015-07-31 17:07:12 -07:00 |
|
ipx.h
|
switch ipxrtr_route_packet() from iovec to msghdr
|
2014-11-24 04:28:49 -05:00 |
|
iw_handler.h
|
wext: add checked wrappers for adding events/points to streams
|
2015-02-28 21:31:12 +01:00 |
|
lapb.h
|
|
|
|
lib80211.h
|
lib80211: remove unused print_ssid()
|
2014-10-14 02:18:27 +02:00 |
|
llc.h
|
|
|
|
llc_c_ac.h
|
|
|
|
llc_c_ev.h
|
|
|
|
llc_c_st.h
|
llc: Make llc_conn_ev_qfyr_t function pointer arrays const
|
2014-12-10 15:21:24 -05:00 |
|
llc_conn.h
|
net: Pass kern from net_proto_family.create to sk_alloc
|
2015-05-11 10:50:17 -04:00 |
|
llc_if.h
|
|
|
|
llc_pdu.h
|
|
|
|
llc_s_ac.h
|
|
|
|
llc_s_ev.h
|
|
|
|
llc_s_st.h
|
llc: Make llc_sap_action_t function pointer arrays const
|
2014-12-10 15:21:24 -05:00 |
|
llc_sap.h
|
|
|
|
lwtunnel.h
|
lwtunnel: Fix the sparse warnings in fib_encap_match
|
2015-08-19 17:37:51 -07:00 |
|
mac80211.h
|
mac80211: remove ieee80211_aes_cmac_calculate_k1_k2()
|
2015-08-13 11:31:45 +02:00 |
|
mac802154.h
|
mac802154: do not export ieee802154_rx()
|
2015-07-23 17:10:50 +02:00 |
|
mip6.h
|
|
|
|
mld.h
|
ipv6: mld: answer mldv2 queries with mldv1 reports in mldv1 fallback
|
2014-09-22 16:23:15 -04:00 |
|
mpls.h
|
openvswitch: Add basic MPLS support to kernel
|
2014-11-05 23:52:33 -08:00 |
|
mpls_iptunnel.h
|
mpls: ip tunnel support
|
2015-07-21 10:39:05 -07:00 |
|
mrp.h
|
|
|
|
ndisc.h
|
neigh: Factor out ___neigh_lookup_noref
|
2015-03-04 00:23:23 -05:00 |
|
neighbour.h
|
net: add explicit logging and stat for neighbour table overflow
|
2015-08-10 13:46:21 -07:00 |
|
net_namespace.h
|
net: include missing headers in net/net_namespace.h
|
2015-06-18 21:14:29 +02:00 |
|
net_ratelimit.h
|
|
|
|
netevent.h
|
|
|
|
netlabel.h
|
netlabel: fix the netlbl_catmap_setlong() dummy function
|
2014-08-07 20:55:21 -04:00 |
|
netlink.h
|
netlink: implement nla_get_in_addr and nla_get_in6_addr
|
2015-03-31 13:58:35 -04:00 |
|
netprio_cgroup.h
|
cgroup: clean up cgroup_subsys names and initialization
|
2014-02-08 10:36:58 -05:00 |
|
netrom.h
|
|
|
|
nexthop.h
|
|
|
|
nl802154.h
|
ieee802154: add ack request default handling
|
2015-08-10 20:43:06 +02:00 |
|
p8022.h
|
|
|
|
ping.h
|
net: Remove iocb argument from sendmsg and recvmsg
|
2015-03-02 13:06:31 -05:00 |
|
pkt_cls.h
|
net: sched: remove tcf_proto from ematch calls
|
2014-10-06 18:02:32 -04:00 |
|
pkt_sched.h
|
net: rename vlan_tx_* helpers since "tx" is misleading there
|
2015-01-13 17:51:08 -05:00 |
|
protocol.h
|
net: Eliminate no_check from protosw
|
2014-05-23 16:28:53 -04:00 |
|
psnap.h
|
|
|
|
raw.h
|
|
|
|
rawv6.h
|
|
|
|
red.h
|
reciprocal_divide: update/correction of the algorithm
|
2014-01-21 23:17:20 -08:00 |
|
regulatory.h
|
cfg80211: allow wiphy specific regdomain management
|
2014-12-17 11:49:55 +01:00 |
|
request_sock.h
|
tcp: provide SYN headers for passive connections
|
2015-05-05 16:02:34 -04:00 |
|
rose.h
|
|
|
|
route.h
|
net: Fix up inet_addr_type checks
|
2015-08-13 22:43:21 -07:00 |
|
rtnetlink.h
|
openvswitch: Use regular VXLAN net_device device
|
2015-07-21 10:39:07 -07:00 |
|
sch_generic.h
|
net: sched: extend percpu stats helpers
|
2015-07-08 13:50:41 -07:00 |
|
scm.h
|
|
|
|
secure_seq.h
|
inetpeer: get rid of ip_id_count
|
2014-06-02 11:00:41 -07:00 |
|
slhc_vj.h
|
|
|
|
snmp.h
|
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
|
2014-10-15 07:48:18 +02:00 |
|
sock.h
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
|
2015-07-31 23:52:20 -07:00 |
|
Space.h
|
|
|
|
stp.h
|
|
|
|
switchdev.h
|
net: switchdev: support static FDB addresses
|
2015-08-11 12:03:19 -07:00 |
|
tcp.h
|
tcp: do not slow start when cwnd equals ssthresh
|
2015-07-09 14:22:52 -07:00 |
|
tcp_memcontrol.h
|
|
|
|
tcp_states.h
|
inet: add TCP_NEW_SYN_RECV state
|
2015-03-12 22:58:12 -04:00 |
|
timewait_sock.h
|
inet: remove BUG_ON() in twsk_destructor()
|
2015-07-09 15:12:20 -07:00 |
|
transp_v6.h
|
ipv6: make IPV6_RECVPKTINFO work for ipv4 datagrams
|
2014-01-19 19:53:18 -08:00 |
|
tso.h
|
net: Add a software TSO helper API
|
2014-05-22 14:57:15 -04:00 |
|
udp.h
|
net: Remove iocb argument from sendmsg and recvmsg
|
2015-03-02 13:06:31 -05:00 |
|
udp_tunnel.h
|
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
|
2015-04-07 15:29:08 -04:00 |
|
udplite.h
|
net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter()
|
2015-02-04 01:34:15 -05:00 |
|
vrf.h
|
vrf: vrf_master_ifindex_rcu is not always called with rcu read lock
|
2015-08-19 22:13:20 -07:00 |
|
vsock_addr.h
|
|
|
|
vxlan.h
|
vxlan: combine VXLAN_FLOWBASED into VXLAN_COLLECT_METADATA
|
2015-08-07 11:46:34 -07:00 |
|
wext.h
|
|
|
|
wimax.h
|
net: treewide: Fix typo found in DocBook/networking.xml
|
2014-09-05 17:35:28 -07:00 |
|
x25.h
|
|
|
|
x25device.h
|
|
|
|
xfrm.h
|
xfrm: Add oif to dst lookups
|
2015-08-11 12:41:35 +02:00 |