Merge branch 'android13-5.10' into branch 'android13-5.10-lts'
Catches the LTS branch up with changes in the normal one. Included in
here are the following commits:
* 687b86b1ed9b ANDROID: GKI: db845c: Update symbols list and ABI on devm_pm_runtime_enable
* 7859c5c9ebc6 FROMLIST: binder: check offset alignment in binder_get_object()
* 9f408f561c85 Merge tag 'android13-5.10.209_r00' into android13-5.10
* 6bc28fdfeec3 ANDROID: userfaultfd: abort uffdio ops if mmap_lock is contended
* 4a4450b4a720 ANDROID: userfaultfd: add MMAP_TRYLOCK mode for COPY/ZEROPAGE
* 582c6d188ec1 ANDROID: userfaultfd: allow SPF for UFFD_FEATURE_SIGBUS on private+anon
* 40cc63fca487 UPSTREAM: net: tls, update curr on splice as well
* f1026393e2eb UPSTREAM: netfilter: nft_set_rbtree: skip end interval element from gc
Change-Id: I17e2e6c1ffc563e417da78d3b4aa09acf5a0599c
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
index 4fa326c..cd10095b 100644
--- a/android/abi_gki_aarch64.xml
+++ b/android/abi_gki_aarch64.xml
@@ -10601,7 +10601,7 @@
<var-decl name='profile_periodicity' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='694' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='2592'>
- <var-decl name='he_oper' type-id='e7f4405c' visibility='default' filepath='include/net/mac80211.h' line='698' column='1'/>
+ <var-decl name='he_oper' type-id='e7f4405d' visibility='default' filepath='include/net/mac80211.h' line='698' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='2656'>
<var-decl name='he_obss_pd' type-id='198fcd88' visibility='default' filepath='include/net/mac80211.h' line='699' column='1'/>
@@ -22165,10 +22165,10 @@
<var-decl name='icsk_ext_hdr_len' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='113' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='10752'>
- <var-decl name='icsk_ack' type-id='e7f44059' visibility='default' filepath='include/net/inet_connection_sock.h' line='124' column='1'/>
+ <var-decl name='icsk_ack' type-id='e7f4405a' visibility='default' filepath='include/net/inet_connection_sock.h' line='124' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='10944'>
- <var-decl name='icsk_mtup' type-id='e7f4405a' visibility='default' filepath='include/net/inet_connection_sock.h' line='136' column='1'/>
+ <var-decl name='icsk_mtup' type-id='e7f4405b' visibility='default' filepath='include/net/inet_connection_sock.h' line='136' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='11104'>
<var-decl name='icsk_probes_tstamp' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='137' column='1'/>
@@ -29158,7 +29158,7 @@
<var-decl name='radiotap_vht_details' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2607' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='1184'>
- <var-decl name='radiotap_timestamp' type-id='e7f44060' visibility='default' filepath='include/net/mac80211.h' line='2611' column='1'/>
+ <var-decl name='radiotap_timestamp' type-id='e7f44061' visibility='default' filepath='include/net/mac80211.h' line='2611' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='1280'>
<var-decl name='netdev_features' type-id='f9f4b16f' visibility='default' filepath='include/net/mac80211.h' line='2612' column='1'/>
@@ -77471,15 +77471,15 @@
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1' id='ac5ab686'>
<data-member access='public'>
- <var-decl name='' type-id='e7f44052' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1'/>
+ <var-decl name='' type-id='e7f44053' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='addrs' type-id='e7f44052' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1'/>
+ <var-decl name='addrs' type-id='e7f44053' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1'/>
</data-member>
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/ipv6.h' line='246' column='1' id='ac5ab687'>
<data-member access='public'>
- <var-decl name='bits' type-id='e7f44053' visibility='default' filepath='include/linux/ipv6.h' line='264' column='1'/>
+ <var-decl name='bits' type-id='e7f44054' visibility='default' filepath='include/linux/ipv6.h' line='264' column='1'/>
</data-member>
<data-member access='public'>
<var-decl name='all' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='265' column='1'/>
@@ -77487,10 +77487,10 @@
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='468' column='1' id='ac5ab688'>
<data-member access='public'>
- <var-decl name='' type-id='e7f44054' visibility='default' filepath='include/linux/skbuff.h' line='469' column='1'/>
+ <var-decl name='' type-id='e7f44055' visibility='default' filepath='include/linux/skbuff.h' line='469' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='' type-id='e7f44055' visibility='default' filepath='include/linux/skbuff.h' line='473' column='1'/>
+ <var-decl name='' type-id='e7f44056' visibility='default' filepath='include/linux/skbuff.h' line='473' column='1'/>
</data-member>
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ipv6.h' line='321' column='1' id='ac5ab689'>
@@ -77514,36 +77514,36 @@
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1892' column='1' id='ac5ab68b'>
<data-member access='public'>
- <var-decl name='tkip' type-id='e7f4405d' visibility='default' filepath='include/net/mac80211.h' line='1896' column='1'/>
+ <var-decl name='tkip' type-id='e7f4405e' visibility='default' filepath='include/net/mac80211.h' line='1896' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='ccmp' type-id='e7f4405e' visibility='default' filepath='include/net/mac80211.h' line='1899' column='1'/>
+ <var-decl name='ccmp' type-id='e7f4405f' visibility='default' filepath='include/net/mac80211.h' line='1899' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='aes_cmac' type-id='e7f4405e' visibility='default' filepath='include/net/mac80211.h' line='1902' column='1'/>
+ <var-decl name='aes_cmac' type-id='e7f4405f' visibility='default' filepath='include/net/mac80211.h' line='1902' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='aes_gmac' type-id='e7f4405e' visibility='default' filepath='include/net/mac80211.h' line='1905' column='1'/>
+ <var-decl name='aes_gmac' type-id='e7f4405f' visibility='default' filepath='include/net/mac80211.h' line='1905' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='gcmp' type-id='e7f4405e' visibility='default' filepath='include/net/mac80211.h' line='1908' column='1'/>
+ <var-decl name='gcmp' type-id='e7f4405f' visibility='default' filepath='include/net/mac80211.h' line='1908' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='hw' type-id='e7f4405f' visibility='default' filepath='include/net/mac80211.h' line='1912' column='1'/>
+ <var-decl name='hw' type-id='e7f44060' visibility='default' filepath='include/net/mac80211.h' line='1912' column='1'/>
</data-member>
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1059' column='1' id='ac5ab68c'>
<data-member access='public'>
- <var-decl name='control' type-id='e7f44061' visibility='default' filepath='include/net/mac80211.h' line='1081' column='1'/>
+ <var-decl name='control' type-id='e7f44062' visibility='default' filepath='include/net/mac80211.h' line='1081' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='ack' type-id='e7f44062' visibility='default' filepath='include/net/mac80211.h' line='1084' column='1'/>
+ <var-decl name='ack' type-id='e7f44063' visibility='default' filepath='include/net/mac80211.h' line='1084' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='status' type-id='e7f44063' visibility='default' filepath='include/net/mac80211.h' line='1094' column='1'/>
+ <var-decl name='status' type-id='e7f44064' visibility='default' filepath='include/net/mac80211.h' line='1094' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='' type-id='e7f44064' visibility='default' filepath='include/net/mac80211.h' line='1095' column='1'/>
+ <var-decl name='' type-id='e7f44065' visibility='default' filepath='include/net/mac80211.h' line='1095' column='1'/>
</data-member>
<data-member access='public'>
<var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1104' column='1'/>
@@ -77554,7 +77554,7 @@
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1061' column='1' id='ac5ab68d'>
<data-member access='public'>
- <var-decl name='' type-id='e7f44065' visibility='default' filepath='include/net/mac80211.h' line='1063' column='1'/>
+ <var-decl name='' type-id='e7f44066' visibility='default' filepath='include/net/mac80211.h' line='1063' column='1'/>
</data-member>
<data-member access='public'>
<var-decl name='jiffies' type-id='7359adad' visibility='default' filepath='include/net/mac80211.h' line='1074' column='1'/>
@@ -77578,96 +77578,96 @@
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='208' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1098' column='1' id='ac5ab690'>
<data-member access='public'>
- <var-decl name='auth' type-id='e7f44067' visibility='default' filepath='include/linux/ieee80211.h' line='1105' column='1'/>
+ <var-decl name='auth' type-id='e7f44068' visibility='default' filepath='include/linux/ieee80211.h' line='1105' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='deauth' type-id='e7f44068' visibility='default' filepath='include/linux/ieee80211.h' line='1108' column='1'/>
+ <var-decl name='deauth' type-id='e7f44069' visibility='default' filepath='include/linux/ieee80211.h' line='1108' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='assoc_req' type-id='e7f44069' visibility='default' filepath='include/linux/ieee80211.h' line='1114' column='1'/>
+ <var-decl name='assoc_req' type-id='e7f4406a' visibility='default' filepath='include/linux/ieee80211.h' line='1114' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='assoc_resp' type-id='e7f4406a' visibility='default' filepath='include/linux/ieee80211.h' line='1121' column='1'/>
+ <var-decl name='assoc_resp' type-id='e7f4406b' visibility='default' filepath='include/linux/ieee80211.h' line='1121' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='reassoc_resp' type-id='e7f4406a' visibility='default' filepath='include/linux/ieee80211.h' line='1121' column='1'/>
+ <var-decl name='reassoc_resp' type-id='e7f4406b' visibility='default' filepath='include/linux/ieee80211.h' line='1121' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='s1g_assoc_resp' type-id='e7f4406b' visibility='default' filepath='include/linux/ieee80211.h' line='1126' column='1'/>
+ <var-decl name='s1g_assoc_resp' type-id='e7f4406c' visibility='default' filepath='include/linux/ieee80211.h' line='1126' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='s1g_reassoc_resp' type-id='e7f4406b' visibility='default' filepath='include/linux/ieee80211.h' line='1126' column='1'/>
+ <var-decl name='s1g_reassoc_resp' type-id='e7f4406c' visibility='default' filepath='include/linux/ieee80211.h' line='1126' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='reassoc_req' type-id='e7f4406c' visibility='default' filepath='include/linux/ieee80211.h' line='1133' column='1'/>
+ <var-decl name='reassoc_req' type-id='e7f4406d' visibility='default' filepath='include/linux/ieee80211.h' line='1133' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='disassoc' type-id='e7f44068' visibility='default' filepath='include/linux/ieee80211.h' line='1136' column='1'/>
+ <var-decl name='disassoc' type-id='e7f44069' visibility='default' filepath='include/linux/ieee80211.h' line='1136' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='beacon' type-id='e7f4406d' visibility='default' filepath='include/linux/ieee80211.h' line='1144' column='1'/>
+ <var-decl name='beacon' type-id='e7f4406e' visibility='default' filepath='include/linux/ieee80211.h' line='1144' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='probe_req' type-id='e7f4406e' visibility='default' filepath='include/linux/ieee80211.h' line='1148' column='1'/>
+ <var-decl name='probe_req' type-id='e7f4406f' visibility='default' filepath='include/linux/ieee80211.h' line='1148' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='probe_resp' type-id='e7f4406d' visibility='default' filepath='include/linux/ieee80211.h' line='1156' column='1'/>
+ <var-decl name='probe_resp' type-id='e7f4406e' visibility='default' filepath='include/linux/ieee80211.h' line='1156' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='action' type-id='e7f4406f' visibility='default' filepath='include/linux/ieee80211.h' line='1256' column='1'/>
+ <var-decl name='action' type-id='e7f44070' visibility='default' filepath='include/linux/ieee80211.h' line='1256' column='1'/>
</data-member>
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='200' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1159' column='1' id='ac5ab691'>
<data-member access='public'>
- <var-decl name='wme_action' type-id='e7f44070' visibility='default' filepath='include/linux/ieee80211.h' line='1165' column='1'/>
+ <var-decl name='wme_action' type-id='e7f44071' visibility='default' filepath='include/linux/ieee80211.h' line='1165' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='chan_switch' type-id='e7f44071' visibility='default' filepath='include/linux/ieee80211.h' line='1169' column='1'/>
+ <var-decl name='chan_switch' type-id='e7f44072' visibility='default' filepath='include/linux/ieee80211.h' line='1169' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='ext_chan_switch' type-id='e7f44072' visibility='default' filepath='include/linux/ieee80211.h' line='1174' column='1'/>
+ <var-decl name='ext_chan_switch' type-id='e7f44073' visibility='default' filepath='include/linux/ieee80211.h' line='1174' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='measurement' type-id='e7f44073' visibility='default' filepath='include/linux/ieee80211.h' line='1181' column='1'/>
+ <var-decl name='measurement' type-id='e7f44074' visibility='default' filepath='include/linux/ieee80211.h' line='1181' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='addba_req' type-id='e7f44074' visibility='default' filepath='include/linux/ieee80211.h' line='1190' column='1'/>
+ <var-decl name='addba_req' type-id='e7f44075' visibility='default' filepath='include/linux/ieee80211.h' line='1190' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='addba_resp' type-id='e7f44075' visibility='default' filepath='include/linux/ieee80211.h' line='1197' column='1'/>
+ <var-decl name='addba_resp' type-id='e7f44076' visibility='default' filepath='include/linux/ieee80211.h' line='1197' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='delba' type-id='e7f44076' visibility='default' filepath='include/linux/ieee80211.h' line='1202' column='1'/>
+ <var-decl name='delba' type-id='e7f44077' visibility='default' filepath='include/linux/ieee80211.h' line='1202' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='self_prot' type-id='e7f44071' visibility='default' filepath='include/linux/ieee80211.h' line='1206' column='1'/>
+ <var-decl name='self_prot' type-id='e7f44072' visibility='default' filepath='include/linux/ieee80211.h' line='1206' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='mesh_action' type-id='e7f44071' visibility='default' filepath='include/linux/ieee80211.h' line='1210' column='1'/>
+ <var-decl name='mesh_action' type-id='e7f44072' visibility='default' filepath='include/linux/ieee80211.h' line='1210' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='sa_query' type-id='e7f44077' visibility='default' filepath='include/linux/ieee80211.h' line='1214' column='1'/>
+ <var-decl name='sa_query' type-id='e7f44078' visibility='default' filepath='include/linux/ieee80211.h' line='1214' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='ht_smps' type-id='e7f44078' visibility='default' filepath='include/linux/ieee80211.h' line='1218' column='1'/>
+ <var-decl name='ht_smps' type-id='e7f44079' visibility='default' filepath='include/linux/ieee80211.h' line='1218' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='ht_notify_cw' type-id='e7f44079' visibility='default' filepath='include/linux/ieee80211.h' line='1222' column='1'/>
+ <var-decl name='ht_notify_cw' type-id='e7f4407a' visibility='default' filepath='include/linux/ieee80211.h' line='1222' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='tdls_discover_resp' type-id='e7f4407a' visibility='default' filepath='include/linux/ieee80211.h' line='1228' column='1'/>
+ <var-decl name='tdls_discover_resp' type-id='e7f4407b' visibility='default' filepath='include/linux/ieee80211.h' line='1228' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='vht_opmode_notif' type-id='e7f4407b' visibility='default' filepath='include/linux/ieee80211.h' line='1232' column='1'/>
+ <var-decl name='vht_opmode_notif' type-id='e7f4407c' visibility='default' filepath='include/linux/ieee80211.h' line='1232' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='vht_group_notif' type-id='e7f4407c' visibility='default' filepath='include/linux/ieee80211.h' line='1237' column='1'/>
+ <var-decl name='vht_group_notif' type-id='e7f4407d' visibility='default' filepath='include/linux/ieee80211.h' line='1237' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='tpc_report' type-id='e7f4407d' visibility='default' filepath='include/linux/ieee80211.h' line='1244' column='1'/>
+ <var-decl name='tpc_report' type-id='e7f4407e' visibility='default' filepath='include/linux/ieee80211.h' line='1244' column='1'/>
</data-member>
<data-member access='public'>
- <var-decl name='ftm' type-id='e7f4407e' visibility='default' filepath='include/linux/ieee80211.h' line='1254' column='1'/>
+ <var-decl name='ftm' type-id='e7f4407f' visibility='default' filepath='include/linux/ieee80211.h' line='1254' column='1'/>
</data-member>
</union-decl>
<union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1' id='ac5ab692'>
@@ -82455,7 +82455,7 @@
<subrange length='14' type-id='7ff19f0f' id='48882d96'/>
</array-type-def>
<typedef-decl name='kprojid_t' type-id='02ad2737' filepath='include/linux/projid.h' line='24' column='1' id='b7cdd2f8'/>
- <array-type-def dimensions='1' type-id='e7f4405b' size-in-bits='192' id='b7cdf388'>
+ <array-type-def dimensions='1' type-id='e7f4405c' size-in-bits='192' id='b7cdf388'>
<subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
</array-type-def>
<function-type size-in-bits='64' id='b7da17bb'>
@@ -103022,13 +103022,13 @@
<var-decl name='rcv_rtt_last_tsecr' type-id='19c2251e' visibility='default' filepath='include/linux/tcp.h' line='377' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='18112'>
- <var-decl name='rcv_rtt_est' type-id='e7f44056' visibility='default' filepath='include/linux/tcp.h' line='382' column='1'/>
+ <var-decl name='rcv_rtt_est' type-id='e7f44057' visibility='default' filepath='include/linux/tcp.h' line='382' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='18240'>
- <var-decl name='rcvq_space' type-id='e7f44057' visibility='default' filepath='include/linux/tcp.h' line='389' column='1'/>
+ <var-decl name='rcvq_space' type-id='e7f44058' visibility='default' filepath='include/linux/tcp.h' line='389' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='18368'>
- <var-decl name='mtu_probe' type-id='e7f44058' visibility='default' filepath='include/linux/tcp.h' line='395' column='1'/>
+ <var-decl name='mtu_probe' type-id='e7f44059' visibility='default' filepath='include/linux/tcp.h' line='395' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='18432'>
<var-decl name='mtu_info' type-id='19c2251e' visibility='default' filepath='include/linux/tcp.h' line='396' column='1'/>
@@ -107366,7 +107366,7 @@
<var-decl name='entries' type-id='5a472742' visibility='default' filepath='include/net/flow_offload.h' line='272' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1' id='e7f44052'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1' id='e7f44053'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1'/>
</data-member>
@@ -107374,7 +107374,7 @@
<var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='105' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ipv6.h' line='247' column='1' id='e7f44053'>
+ <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ipv6.h' line='247' column='1' id='e7f44054'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='srcrt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='248' column='1'/>
</data-member>
@@ -107421,7 +107421,7 @@
<var-decl name='recvfragsize' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='262' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='469' column='1' id='e7f44054'>
+ <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='469' column='1' id='e7f44055'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='desc' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='470' column='1'/>
</data-member>
@@ -107429,7 +107429,7 @@
<var-decl name='ctx' type-id='eaa32e2f' visibility='default' filepath='include/linux/skbuff.h' line='471' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='473' column='1' id='e7f44055'>
+ <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='473' column='1' id='e7f44056'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/skbuff.h' line='474' column='1'/>
</data-member>
@@ -107443,7 +107443,7 @@
<var-decl name='bytelen' type-id='19c2251e' visibility='default' filepath='include/linux/skbuff.h' line='477' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/tcp.h' line='378' column='1' id='e7f44056'>
+ <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/tcp.h' line='378' column='1' id='e7f44057'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='rtt_us' type-id='19c2251e' visibility='default' filepath='include/linux/tcp.h' line='379' column='1'/>
</data-member>
@@ -107454,7 +107454,7 @@
<var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/tcp.h' line='381' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/tcp.h' line='385' column='1' id='e7f44057'>
+ <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/tcp.h' line='385' column='1' id='e7f44058'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='space' type-id='19c2251e' visibility='default' filepath='include/linux/tcp.h' line='386' column='1'/>
</data-member>
@@ -107465,7 +107465,7 @@
<var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/tcp.h' line='388' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/tcp.h' line='392' column='1' id='e7f44058'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/tcp.h' line='392' column='1' id='e7f44059'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='probe_seq_start' type-id='19c2251e' visibility='default' filepath='include/linux/tcp.h' line='393' column='1'/>
</data-member>
@@ -107473,7 +107473,7 @@
<var-decl name='probe_seq_end' type-id='19c2251e' visibility='default' filepath='include/linux/tcp.h' line='394' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='114' column='1' id='e7f44059'>
+ <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='114' column='1' id='e7f4405a'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='pending' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='115' column='1'/>
</data-member>
@@ -107502,7 +107502,7 @@
<var-decl name='rcv_mss' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='123' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='125' column='1' id='e7f4405a'>
+ <class-decl name='__anonymous_struct__' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='125' column='1' id='e7f4405b'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='126' column='1'/>
</data-member>
@@ -107519,7 +107519,7 @@
<var-decl name='probe_timestamp' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='135' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='2005' column='1' id='e7f4405b'>
+ <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='2005' column='1' id='e7f4405c'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='2006' column='1'/>
</data-member>
@@ -107536,7 +107536,7 @@
<var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2010' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='695' column='1' id='e7f4405c'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='695' column='1' id='e7f4405d'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='params' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='696' column='1'/>
</data-member>
@@ -107544,7 +107544,7 @@
<var-decl name='nss_set' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='697' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1893' column='1' id='e7f4405d'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1893' column='1' id='e7f4405e'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='iv32' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1894' column='1'/>
</data-member>
@@ -107552,12 +107552,12 @@
<var-decl name='iv16' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1895' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1897' column='1' id='e7f4405e'>
+ <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1897' column='1' id='e7f4405f'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='pn' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1898' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='136' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1909' column='1' id='e7f4405f'>
+ <class-decl name='__anonymous_struct__' size-in-bits='136' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1909' column='1' id='e7f44060'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='seq' type-id='0d8415b5' visibility='default' filepath='include/net/mac80211.h' line='1910' column='1'/>
</data-member>
@@ -107565,7 +107565,7 @@
<var-decl name='seq_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1911' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='2608' column='1' id='e7f44060'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='2608' column='1' id='e7f44061'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='units_pos' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2609' column='1'/>
</data-member>
@@ -107573,7 +107573,7 @@
<var-decl name='accuracy' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='2610' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1060' column='1' id='e7f44061'>
+ <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1060' column='1' id='e7f44062'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='' type-id='ac5ab68d' visibility='default' filepath='include/net/mac80211.h' line='1061' column='1'/>
</data-member>
@@ -107590,12 +107590,12 @@
<var-decl name='enqueue_time' type-id='989b7c52' visibility='default' filepath='include/net/mac80211.h' line='1080' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1082' column='1' id='e7f44062'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1082' column='1' id='e7f44063'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1083' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1085' column='1' id='e7f44063'>
+ <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1085' column='1' id='e7f44064'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1086' column='1'/>
</data-member>
@@ -107621,7 +107621,7 @@
<var-decl name='status_driver_data' type-id='24ae0315' visibility='default' filepath='include/net/mac80211.h' line='1093' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1095' column='1' id='e7f44064'>
+ <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1095' column='1' id='e7f44065'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='driver_rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1096' column='1'/>
</data-member>
@@ -107632,7 +107632,7 @@
<var-decl name='rate_driver_data' type-id='20b03b60' visibility='default' filepath='include/net/mac80211.h' line='1100' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='112' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1063' column='1' id='e7f44065'>
+ <class-decl name='__anonymous_struct__' size-in-bits='112' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1063' column='1' id='e7f44066'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1064' column='1'/>
</data-member>
@@ -107652,7 +107652,7 @@
<var-decl name='skip_table' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1070' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='480' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='708' column='1' id='e7f44066'>
+ <class-decl name='__anonymous_struct__' size-in-bits='480' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='708' column='1' id='e7f44067'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='legacy' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='709' column='1'/>
</data-member>
@@ -107675,7 +107675,7 @@
<var-decl name='he_ltf' type-id='dc98a315' visibility='default' filepath='include/net/cfg80211.h' line='715' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1099' column='1' id='e7f44067'>
+ <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1099' column='1' id='e7f44068'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='auth_alg' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1100' column='1'/>
</data-member>
@@ -107689,12 +107689,12 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1104' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1106' column='1' id='e7f44068'>
+ <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1106' column='1' id='e7f44069'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='reason_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1107' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1109' column='1' id='e7f44069'>
+ <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1109' column='1' id='e7f4406a'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1110' column='1'/>
</data-member>
@@ -107705,7 +107705,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1113' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1115' column='1' id='e7f4406a'>
+ <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1115' column='1' id='e7f4406b'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1116' column='1'/>
</data-member>
@@ -107719,7 +107719,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1120' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1122' column='1' id='e7f4406b'>
+ <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1122' column='1' id='e7f4406c'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1123' column='1'/>
</data-member>
@@ -107730,7 +107730,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1125' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='80' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1127' column='1' id='e7f4406c'>
+ <class-decl name='__anonymous_struct__' size-in-bits='80' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1127' column='1' id='e7f4406d'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1128' column='1'/>
</data-member>
@@ -107744,7 +107744,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1132' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1137' column='1' id='e7f4406d'>
+ <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1137' column='1' id='e7f4406e'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='timestamp' type-id='a30e8d1f' visibility='default' filepath='include/linux/ieee80211.h' line='1138' column='1'/>
</data-member>
@@ -107758,12 +107758,12 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1143' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1145' column='1' id='e7f4406e'>
+ <class-decl name='__anonymous_struct__' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1145' column='1' id='e7f4406f'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1147' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='208' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1157' column='1' id='e7f4406f'>
+ <class-decl name='__anonymous_struct__' size-in-bits='208' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1157' column='1' id='e7f44070'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='category' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1158' column='1'/>
</data-member>
@@ -107771,7 +107771,7 @@
<var-decl name='u' type-id='ac5ab691' visibility='default' filepath='include/linux/ieee80211.h' line='1255' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1160' column='1' id='e7f44070'>
+ <class-decl name='__anonymous_struct__' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1160' column='1' id='e7f44071'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1161' column='1'/>
</data-member>
@@ -107785,7 +107785,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1164' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1166' column='1' id='e7f44071'>
+ <class-decl name='__anonymous_struct__' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1166' column='1' id='e7f44072'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1167' column='1'/>
</data-member>
@@ -107793,7 +107793,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1168' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1170' column='1' id='e7f44072'>
+ <class-decl name='__anonymous_struct__' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1170' column='1' id='e7f44073'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1171' column='1'/>
</data-member>
@@ -107804,7 +107804,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1173' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1175' column='1' id='e7f44073'>
+ <class-decl name='__anonymous_struct__' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1175' column='1' id='e7f44074'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1176' column='1'/>
</data-member>
@@ -107821,7 +107821,7 @@
<var-decl name='msr_elem' type-id='1981efe5' visibility='default' filepath='include/linux/ieee80211.h' line='1180' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1182' column='1' id='e7f44074'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1182' column='1' id='e7f44075'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1183' column='1'/>
</data-member>
@@ -107841,7 +107841,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1189' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1191' column='1' id='e7f44075'>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1191' column='1' id='e7f44076'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1192' column='1'/>
</data-member>
@@ -107858,7 +107858,7 @@
<var-decl name='timeout' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1196' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1198' column='1' id='e7f44076'>
+ <class-decl name='__anonymous_struct__' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1198' column='1' id='e7f44077'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1199' column='1'/>
</data-member>
@@ -107869,7 +107869,7 @@
<var-decl name='reason_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1201' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1211' column='1' id='e7f44077'>
+ <class-decl name='__anonymous_struct__' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1211' column='1' id='e7f44078'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1212' column='1'/>
</data-member>
@@ -107877,7 +107877,7 @@
<var-decl name='trans_id' type-id='cf114704' visibility='default' filepath='include/linux/ieee80211.h' line='1213' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1215' column='1' id='e7f44078'>
+ <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1215' column='1' id='e7f44079'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1216' column='1'/>
</data-member>
@@ -107885,7 +107885,7 @@
<var-decl name='smps_control' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1217' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1219' column='1' id='e7f44079'>
+ <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1219' column='1' id='e7f4407a'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1220' column='1'/>
</data-member>
@@ -107893,7 +107893,7 @@
<var-decl name='chanwidth' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1221' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1223' column='1' id='e7f4407a'>
+ <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1223' column='1' id='e7f4407b'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1224' column='1'/>
</data-member>
@@ -107907,7 +107907,7 @@
<var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1227' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1229' column='1' id='e7f4407b'>
+ <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1229' column='1' id='e7f4407c'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1230' column='1'/>
</data-member>
@@ -107915,7 +107915,7 @@
<var-decl name='operating_mode' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1231' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='200' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1233' column='1' id='e7f4407c'>
+ <class-decl name='__anonymous_struct__' size-in-bits='200' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1233' column='1' id='e7f4407d'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1234' column='1'/>
</data-member>
@@ -107926,7 +107926,7 @@
<var-decl name='position' type-id='0d8415b5' visibility='default' filepath='include/linux/ieee80211.h' line='1236' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1238' column='1' id='e7f4407d'>
+ <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1238' column='1' id='e7f4407e'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1239' column='1'/>
</data-member>
@@ -107943,7 +107943,7 @@
<var-decl name='tpc' type-id='8b43e65f' visibility='default' filepath='include/linux/ieee80211.h' line='1243' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='152' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1245' column='1' id='e7f4407e'>
+ <class-decl name='__anonymous_struct__' size-in-bits='152' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1245' column='1' id='e7f4407f'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1246' column='1'/>
</data-member>
@@ -116235,7 +116235,7 @@
<return type-id='95e97e5e'/>
</function-type>
<pointer-type-def type-id='5a449113' size-in-bits='64' id='fbc594d3'/>
- <array-type-def dimensions='1' type-id='e7f44066' size-in-bits='2400' id='fbca8cfd'>
+ <array-type-def dimensions='1' type-id='e7f44067' size-in-bits='2400' id='fbca8cfd'>
<subrange length='5' type-id='7ff19f0f' id='53010e10'/>
</array-type-def>
<class-decl name='genl_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='87' column='1' id='fbcd72c8'>
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index eec637d..abec538 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -1837,8 +1837,10 @@ static size_t binder_get_object(struct binder_proc *proc,
size_t object_size = 0;
read_size = min_t(size_t, sizeof(*object), buffer->data_size - offset);
- if (offset > buffer->data_size || read_size < sizeof(*hdr))
+ if (offset > buffer->data_size || read_size < sizeof(*hdr) ||
+ !IS_ALIGNED(offset, sizeof(u32)))
return 0;
+
if (u) {
if (copy_from_user(object, u + offset, read_size))
return 0;
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
index 2089266..b12f0fd 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -71,6 +71,7 @@ struct userfaultfd_ctx {
bool mmap_changing;
/* mm with one ore more vmas attached to this userfaultfd_ctx */
struct mm_struct *mm;
+ struct rcu_head rcu_head;
};
struct userfaultfd_fork_ctx {
@@ -156,6 +157,13 @@ static void userfaultfd_ctx_get(struct userfaultfd_ctx *ctx)
refcount_inc(&ctx->refcount);
}
+static void __free_userfaultfd_ctx(struct rcu_head *head)
+{
+ struct userfaultfd_ctx *ctx = container_of(head, struct userfaultfd_ctx,
+ rcu_head);
+ kmem_cache_free(userfaultfd_ctx_cachep, ctx);
+}
+
/**
* userfaultfd_ctx_put - Releases a reference to the internal userfaultfd
* context.
@@ -176,7 +184,7 @@ static void userfaultfd_ctx_put(struct userfaultfd_ctx *ctx)
VM_BUG_ON(spin_is_locked(&ctx->fd_wqh.lock));
VM_BUG_ON(waitqueue_active(&ctx->fd_wqh));
mmdrop(ctx->mm);
- kmem_cache_free(userfaultfd_ctx_cachep, ctx);
+ call_rcu(&ctx->rcu_head, __free_userfaultfd_ctx);
}
}
@@ -350,6 +358,24 @@ static inline long userfaultfd_get_blocking_state(unsigned int flags)
return TASK_UNINTERRUPTIBLE;
}
+#ifdef CONFIG_SPECULATIVE_PAGE_FAULT
+bool userfaultfd_using_sigbus(struct vm_area_struct *vma)
+{
+ struct userfaultfd_ctx *ctx;
+ bool ret;
+
+ /*
+ * Do it inside RCU section to ensure that the ctx doesn't
+ * disappear under us.
+ */
+ rcu_read_lock();
+ ctx = rcu_dereference(vma->vm_userfaultfd_ctx.ctx);
+ ret = ctx && (ctx->features & UFFD_FEATURE_SIGBUS);
+ rcu_read_unlock();
+ return ret;
+}
+#endif
+
/*
* The locking rules involved in returning VM_FAULT_RETRY depending on
* FAULT_FLAG_ALLOW_RETRY, FAULT_FLAG_RETRY_NOWAIT and
@@ -394,7 +420,8 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)
*/
mmap_assert_locked(mm);
- ctx = vmf->vma->vm_userfaultfd_ctx.ctx;
+ ctx = rcu_dereference_protected(vmf->vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&mm->mmap_lock));
if (!ctx)
goto out;
@@ -611,8 +638,10 @@ static void userfaultfd_event_wait_completion(struct userfaultfd_ctx *ctx,
/* the various vma->vm_userfaultfd_ctx still points to it */
mmap_write_lock(mm);
for (vma = mm->mmap; vma; vma = vma->vm_next)
- if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx) {
- vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
+ if (rcu_access_pointer(vma->vm_userfaultfd_ctx.ctx) ==
+ release_new_ctx) {
+ rcu_assign_pointer(vma->vm_userfaultfd_ctx.ctx,
+ NULL);
vma->vm_flags &= ~__VM_UFFD_FLAGS;
}
mmap_write_unlock(mm);
@@ -642,10 +671,13 @@ int dup_userfaultfd(struct vm_area_struct *vma, struct list_head *fcs)
struct userfaultfd_ctx *ctx = NULL, *octx;
struct userfaultfd_fork_ctx *fctx;
- octx = vma->vm_userfaultfd_ctx.ctx;
+ octx = rcu_dereference_protected(
+ vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&vma->vm_mm->mmap_lock));
+
if (!octx || !(octx->features & UFFD_FEATURE_EVENT_FORK)) {
vm_write_begin(vma);
- vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
+ rcu_assign_pointer(vma->vm_userfaultfd_ctx.ctx, NULL);
WRITE_ONCE(vma->vm_flags,
vma->vm_flags & ~__VM_UFFD_FLAGS);
vm_write_end(vma);
@@ -684,7 +716,7 @@ int dup_userfaultfd(struct vm_area_struct *vma, struct list_head *fcs)
list_add_tail(&fctx->list, fcs);
}
- vma->vm_userfaultfd_ctx.ctx = ctx;
+ rcu_assign_pointer(vma->vm_userfaultfd_ctx.ctx, ctx);
return 0;
}
@@ -717,7 +749,8 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma,
{
struct userfaultfd_ctx *ctx;
- ctx = vma->vm_userfaultfd_ctx.ctx;
+ ctx = rcu_dereference_protected(vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&vma->vm_mm->mmap_lock));
if (!ctx)
return;
@@ -728,7 +761,7 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma,
WRITE_ONCE(ctx->mmap_changing, true);
} else {
/* Drop uffd context if remap feature not enabled */
- vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
+ rcu_assign_pointer(vma->vm_userfaultfd_ctx.ctx, NULL);
vma->vm_flags &= ~__VM_UFFD_FLAGS;
}
}
@@ -765,7 +798,8 @@ bool userfaultfd_remove(struct vm_area_struct *vma,
struct userfaultfd_ctx *ctx;
struct userfaultfd_wait_queue ewq;
- ctx = vma->vm_userfaultfd_ctx.ctx;
+ ctx = rcu_dereference_protected(vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&mm->mmap_lock));
if (!ctx || !(ctx->features & UFFD_FEATURE_EVENT_REMOVE))
return true;
@@ -803,7 +837,9 @@ int userfaultfd_unmap_prep(struct vm_area_struct *vma,
{
for ( ; vma && vma->vm_start < end; vma = vma->vm_next) {
struct userfaultfd_unmap_ctx *unmap_ctx;
- struct userfaultfd_ctx *ctx = vma->vm_userfaultfd_ctx.ctx;
+ struct userfaultfd_ctx *ctx =
+ rcu_dereference_protected(vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&vma->vm_mm->mmap_lock));
if (!ctx || !(ctx->features & UFFD_FEATURE_EVENT_UNMAP) ||
has_unmap_ctx(ctx, unmaps, start, end))
@@ -868,10 +904,13 @@ static int userfaultfd_release(struct inode *inode, struct file *file)
mmap_write_lock(mm);
prev = NULL;
for (vma = mm->mmap; vma; vma = vma->vm_next) {
+ struct userfaultfd_ctx *cur_uffd_ctx =
+ rcu_dereference_protected(vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&mm->mmap_lock));
cond_resched();
- BUG_ON(!!vma->vm_userfaultfd_ctx.ctx ^
+ BUG_ON(!!cur_uffd_ctx ^
!!(vma->vm_flags & __VM_UFFD_FLAGS));
- if (vma->vm_userfaultfd_ctx.ctx != ctx) {
+ if (cur_uffd_ctx != ctx) {
prev = vma;
continue;
}
@@ -887,7 +926,7 @@ static int userfaultfd_release(struct inode *inode, struct file *file)
prev = vma;
vm_write_begin(vma);
WRITE_ONCE(vma->vm_flags, new_flags);
- vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
+ rcu_assign_pointer(vma->vm_userfaultfd_ctx.ctx, NULL);
vm_write_end(vma);
}
mmap_write_unlock(mm);
@@ -1350,9 +1389,12 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
found = false;
basic_ioctls = false;
for (cur = vma; cur && cur->vm_start < end; cur = cur->vm_next) {
+ struct userfaultfd_ctx *cur_uffd_ctx =
+ rcu_dereference_protected(cur->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&mm->mmap_lock));
cond_resched();
- BUG_ON(!!cur->vm_userfaultfd_ctx.ctx ^
+ BUG_ON(!!cur_uffd_ctx ^
!!(cur->vm_flags & __VM_UFFD_FLAGS));
/* check not compatible vmas */
@@ -1395,8 +1437,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
* wouldn't know which one to deliver the userfaults to.
*/
ret = -EBUSY;
- if (cur->vm_userfaultfd_ctx.ctx &&
- cur->vm_userfaultfd_ctx.ctx != ctx)
+ if (cur_uffd_ctx && cur_uffd_ctx != ctx)
goto out_unlock;
/*
@@ -1414,18 +1455,20 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
ret = 0;
do {
+ struct userfaultfd_ctx *cur_uffd_ctx =
+ rcu_dereference_protected(vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&mm->mmap_lock));
cond_resched();
BUG_ON(!vma_can_userfault(vma, vm_flags));
- BUG_ON(vma->vm_userfaultfd_ctx.ctx &&
- vma->vm_userfaultfd_ctx.ctx != ctx);
+ BUG_ON(cur_uffd_ctx && cur_uffd_ctx != ctx);
WARN_ON(!(vma->vm_flags & VM_MAYWRITE));
/*
* Nothing to do: this vma is already registered into this
* userfaultfd and with the right tracking mode too.
*/
- if (vma->vm_userfaultfd_ctx.ctx == ctx &&
+ if (cur_uffd_ctx == ctx &&
(vma->vm_flags & vm_flags) == vm_flags)
goto skip;
@@ -1461,7 +1504,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
*/
vm_write_begin(vma);
WRITE_ONCE(vma->vm_flags, new_flags);
- vma->vm_userfaultfd_ctx.ctx = ctx;
+ rcu_assign_pointer(vma->vm_userfaultfd_ctx.ctx, ctx);
vm_write_end(vma);
if (is_vm_hugetlb_page(vma) && uffd_disable_huge_pmd_share(vma))
@@ -1561,7 +1604,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
for (cur = vma; cur && cur->vm_start < end; cur = cur->vm_next) {
cond_resched();
- BUG_ON(!!cur->vm_userfaultfd_ctx.ctx ^
+ BUG_ON(!!rcu_access_pointer(cur->vm_userfaultfd_ctx.ctx) ^
!!(cur->vm_flags & __VM_UFFD_FLAGS));
/*
@@ -1583,6 +1626,9 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
ret = 0;
do {
+ struct userfaultfd_ctx *cur_uffd_ctx =
+ rcu_dereference_protected(vma->vm_userfaultfd_ctx.ctx,
+ lockdep_is_held(&mm->mmap_lock));
cond_resched();
BUG_ON(!vma_can_userfault(vma, vma->vm_flags));
@@ -1591,7 +1637,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
* Nothing to do: this vma is already registered into this
* userfaultfd and with the right tracking mode too.
*/
- if (!vma->vm_userfaultfd_ctx.ctx)
+ if (!cur_uffd_ctx)
goto skip;
WARN_ON(!(vma->vm_flags & VM_MAYWRITE));
@@ -1610,7 +1656,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
struct userfaultfd_wake_range range;
range.start = start;
range.len = vma_end - start;
- wake_userfault(vma->vm_userfaultfd_ctx.ctx, &range);
+ wake_userfault(cur_uffd_ctx, &range);
}
new_flags = vma->vm_flags & ~__VM_UFFD_FLAGS;
@@ -1640,7 +1686,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
*/
vm_write_begin(vma);
WRITE_ONCE(vma->vm_flags, new_flags);
- vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
+ rcu_assign_pointer(vma->vm_userfaultfd_ctx.ctx, NULL);
vm_write_end(vma);
skip:
@@ -1722,7 +1768,9 @@ static int userfaultfd_copy(struct userfaultfd_ctx *ctx,
ret = -EINVAL;
if (uffdio_copy.src + uffdio_copy.len <= uffdio_copy.src)
goto out;
- if (uffdio_copy.mode & ~(UFFDIO_COPY_MODE_DONTWAKE|UFFDIO_COPY_MODE_WP))
+ if (uffdio_copy.mode & ~(UFFDIO_COPY_MODE_DONTWAKE|
+ UFFDIO_COPY_MODE_WP|
+ UFFDIO_COPY_MODE_MMAP_TRYLOCK))
goto out;
if (mmget_not_zero(ctx->mm)) {
ret = mcopy_atomic(ctx->mm, uffdio_copy.dst, uffdio_copy.src,
@@ -1773,13 +1821,14 @@ static int userfaultfd_zeropage(struct userfaultfd_ctx *ctx,
if (ret)
goto out;
ret = -EINVAL;
- if (uffdio_zeropage.mode & ~UFFDIO_ZEROPAGE_MODE_DONTWAKE)
+ if (uffdio_zeropage.mode & ~(UFFDIO_ZEROPAGE_MODE_DONTWAKE|
+ UFFDIO_ZEROPAGE_MODE_MMAP_TRYLOCK))
goto out;
if (mmget_not_zero(ctx->mm)) {
ret = mfill_zeropage(ctx->mm, uffdio_zeropage.range.start,
uffdio_zeropage.range.len,
- &ctx->mmap_changing);
+ &ctx->mmap_changing, uffdio_zeropage.mode);
mmput(ctx->mm);
} else {
return -ESRCH;
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 80126b5..2648ec4d 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -297,7 +297,7 @@ struct vm_region {
#ifdef CONFIG_USERFAULTFD
#define NULL_VM_UFFD_CTX ((struct vm_userfaultfd_ctx) { NULL, })
struct vm_userfaultfd_ctx {
- struct userfaultfd_ctx *ctx;
+ struct userfaultfd_ctx __rcu *ctx;
};
#else /* CONFIG_USERFAULTFD */
#define NULL_VM_UFFD_CTX ((struct vm_userfaultfd_ctx) {})
diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h
index 331d2cc..c8d776b 100644
--- a/include/linux/userfaultfd_k.h
+++ b/include/linux/userfaultfd_k.h
@@ -33,9 +33,15 @@
#define UFFD_SHARED_FCNTL_FLAGS (O_CLOEXEC | O_NONBLOCK)
#define UFFD_FLAGS_SET (EFD_SHARED_FCNTL_FLAGS)
+static_assert(UFFDIO_ZEROPAGE_MODE_MMAP_TRYLOCK == UFFDIO_COPY_MODE_MMAP_TRYLOCK);
+#define UFFDIO_MODE_MMAP_TRYLOCK UFFDIO_COPY_MODE_MMAP_TRYLOCK
+
extern int sysctl_unprivileged_userfaultfd;
extern vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason);
+#ifdef CONFIG_SPECULATIVE_PAGE_FAULT
+extern bool userfaultfd_using_sigbus(struct vm_area_struct *vma);
+#endif
/*
* The mode of operation for __mcopy_atomic and its helpers.
@@ -62,9 +68,8 @@ extern ssize_t mcopy_atomic(struct mm_struct *dst_mm, unsigned long dst_start,
unsigned long src_start, unsigned long len,
bool *mmap_changing, __u64 mode);
extern ssize_t mfill_zeropage(struct mm_struct *dst_mm,
- unsigned long dst_start,
- unsigned long len,
- bool *mmap_changing);
+ unsigned long dst_start, unsigned long len,
+ bool *mmap_changing, __u64 mode);
extern ssize_t mcopy_continue(struct mm_struct *dst_mm, unsigned long dst_start,
unsigned long len, bool *mmap_changing);
extern int mwriteprotect_range(struct mm_struct *dst_mm,
@@ -75,7 +80,7 @@ extern int mwriteprotect_range(struct mm_struct *dst_mm,
static inline bool is_mergeable_vm_userfaultfd_ctx(struct vm_area_struct *vma,
struct vm_userfaultfd_ctx vm_ctx)
{
- return vma->vm_userfaultfd_ctx.ctx == vm_ctx.ctx;
+ return rcu_access_pointer(vma->vm_userfaultfd_ctx.ctx) == vm_ctx.ctx;
}
/*
@@ -154,6 +159,13 @@ static inline vm_fault_t handle_userfault(struct vm_fault *vmf,
return VM_FAULT_SIGBUS;
}
+#ifdef CONFIG_SPECULATIVE_PAGE_FAULT
+static inline bool userfaultfd_using_sigbus(struct vm_area_struct *vma)
+{
+ return false;
+}
+#endif
+
static inline bool is_mergeable_vm_userfaultfd_ctx(struct vm_area_struct *vma,
struct vm_userfaultfd_ctx vm_ctx)
{
diff --git a/include/uapi/linux/userfaultfd.h b/include/uapi/linux/userfaultfd.h
index 05b31d6..a13fa04 100644
--- a/include/uapi/linux/userfaultfd.h
+++ b/include/uapi/linux/userfaultfd.h
@@ -237,6 +237,7 @@ struct uffdio_copy {
* according to the uffdio_register.ioctls.
*/
#define UFFDIO_COPY_MODE_WP ((__u64)1<<1)
+#define UFFDIO_COPY_MODE_MMAP_TRYLOCK ((__u64)1<<63)
__u64 mode;
/*
@@ -249,6 +250,7 @@ struct uffdio_copy {
struct uffdio_zeropage {
struct uffdio_range range;
#define UFFDIO_ZEROPAGE_MODE_DONTWAKE ((__u64)1<<0)
+#define UFFDIO_ZEROPAGE_MODE_MMAP_TRYLOCK ((__u64)1<<63)
__u64 mode;
/*
diff --git a/mm/memory.c b/mm/memory.c
index 7bd6fb5..14a65c0 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -5018,6 +5018,7 @@ static vm_fault_t ___handle_speculative_fault(struct mm_struct *mm,
pud_t pudval;
int seq;
vm_fault_t ret;
+ bool uffd_missing_sigbus = false;
/* Clear flags that may lead to release the mmap_sem to retry */
flags &= ~(FAULT_FLAG_ALLOW_RETRY|FAULT_FLAG_KILLABLE);
@@ -5030,20 +5031,31 @@ static vm_fault_t ___handle_speculative_fault(struct mm_struct *mm,
return VM_FAULT_RETRY;
}
- if (!vmf_allows_speculation(&vmf))
- return VM_FAULT_RETRY;
-
vmf.vma_flags = READ_ONCE(vmf.vma->vm_flags);
vmf.vma_page_prot = READ_ONCE(vmf.vma->vm_page_prot);
#ifdef CONFIG_USERFAULTFD
- /* Can't call userland page fault handler in the speculative path */
+ /*
+ * Only support SPF for SIGBUS+MISSING userfaults in private anonymous
+ * VMAs. Rest all should be retried with mmap_lock.
+ */
if (unlikely(vmf.vma_flags & __VM_UFFD_FLAGS)) {
- trace_spf_vma_notsup(_RET_IP_, vmf.vma, address);
- return VM_FAULT_RETRY;
+ uffd_missing_sigbus = vma_is_anonymous(vmf.vma) &&
+ (vmf.vma_flags & VM_UFFD_MISSING) &&
+ userfaultfd_using_sigbus(vmf.vma);
+ if (!uffd_missing_sigbus) {
+ trace_spf_vma_notsup(_RET_IP_, vmf.vma, address);
+ return VM_FAULT_RETRY;
+ }
+ /* Not having anon_vma implies that the PTE is missing */
+ if (!vmf.vma->anon_vma)
+ return VM_FAULT_SIGBUS;
}
#endif
+ if (!vmf_allows_speculation(&vmf))
+ return VM_FAULT_RETRY;
+
if (vmf.vma_flags & VM_GROWSDOWN || vmf.vma_flags & VM_GROWSUP) {
/*
* This could be detected by the check address against VMA's
@@ -5161,6 +5173,9 @@ static vm_fault_t ___handle_speculative_fault(struct mm_struct *mm,
local_irq_enable();
+ if (!vmf.pte && uffd_missing_sigbus)
+ return VM_FAULT_SIGBUS;
+
/*
* We need to re-validate the VMA after checking the bounds, otherwise
* we might have a false positive on the bounds.
@@ -5196,7 +5211,12 @@ static vm_fault_t ___handle_speculative_fault(struct mm_struct *mm,
out_walk:
trace_spf_vma_notsup(_RET_IP_, vmf.vma, address);
local_irq_enable();
- return VM_FAULT_RETRY;
+ /*
+ * Failing page-table walk is similar to page-missing so give an
+ * opportunity to SIGBUS+MISSING userfault to handle it before retrying
+ * with mmap_lock
+ */
+ return uffd_missing_sigbus ? VM_FAULT_SIGBUS : VM_FAULT_RETRY;
out_segv:
trace_spf_vma_access(_RET_IP_, vmf.vma, address);
diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
index fa707e5..e8e8a79 100644
--- a/mm/userfaultfd.c
+++ b/mm/userfaultfd.c
@@ -42,7 +42,7 @@ struct vm_area_struct *find_dst_vma(struct mm_struct *dst_mm,
* enforce the VM_MAYWRITE check done at uffd registration
* time.
*/
- if (!dst_vma->vm_userfaultfd_ctx.ctx)
+ if (!rcu_access_pointer(dst_vma->vm_userfaultfd_ctx.ctx))
return NULL;
return dst_vma;
@@ -559,14 +559,19 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm,
copied = 0;
page = NULL;
retry:
- mmap_read_lock(dst_mm);
+ err = -EAGAIN;
+ if (mode & UFFDIO_MODE_MMAP_TRYLOCK) {
+ if (!mmap_read_trylock(dst_mm))
+ goto out;
+ } else {
+ mmap_read_lock(dst_mm);
+ }
/*
* If memory mappings are changing because of non-cooperative
* operation (e.g. mremap) running in parallel, bail out and
* request the user to retry later
*/
- err = -EAGAIN;
if (mmap_changing && READ_ONCE(*mmap_changing))
goto out_unlock;
@@ -659,6 +664,15 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm,
if (unlikely(err == -ENOENT)) {
void *page_kaddr;
+ /*
+ * Return early due to mmap_lock contention only after
+ * some pages are copied to ensure that jank sensitive
+ * threads don't keep retrying for progress-critical
+ * pages.
+ */
+ if (copied && mmap_lock_is_contended(dst_mm))
+ break;
+
mmap_read_unlock(dst_mm);
BUG_ON(!page);
@@ -683,6 +697,9 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm,
if (fatal_signal_pending(current))
err = -EINTR;
+
+ if (mmap_lock_is_contended(dst_mm))
+ err = -EAGAIN;
}
if (err)
break;
@@ -708,10 +725,10 @@ ssize_t mcopy_atomic(struct mm_struct *dst_mm, unsigned long dst_start,
}
ssize_t mfill_zeropage(struct mm_struct *dst_mm, unsigned long start,
- unsigned long len, bool *mmap_changing)
+ unsigned long len, bool *mmap_changing, __u64 mode)
{
return __mcopy_atomic(dst_mm, start, 0, len, MCOPY_ATOMIC_ZEROPAGE,
- mmap_changing, 0);
+ mmap_changing, mode);
}
ssize_t mcopy_continue(struct mm_struct *dst_mm, unsigned long start,
diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c
index 12d9d0d..18c0d16 100644
--- a/net/netfilter/nft_set_rbtree.c
+++ b/net/netfilter/nft_set_rbtree.c
@@ -237,7 +237,7 @@ static void nft_rbtree_gc_remove(struct net *net, struct nft_set *set,
static const struct nft_rbtree_elem *
nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
- struct nft_rbtree_elem *rbe, u8 genmask)
+ struct nft_rbtree_elem *rbe)
{
struct nft_set *set = (struct nft_set *)__set;
struct rb_node *prev = rb_prev(&rbe->node);
@@ -256,7 +256,7 @@ nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
while (prev) {
rbe_prev = rb_entry(prev, struct nft_rbtree_elem, node);
if (nft_rbtree_interval_end(rbe_prev) &&
- nft_set_elem_active(&rbe_prev->ext, genmask))
+ nft_set_elem_active(&rbe_prev->ext, NFT_GENMASK_ANY))
break;
prev = rb_prev(prev);
@@ -367,7 +367,7 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
nft_set_elem_active(&rbe->ext, cur_genmask)) {
const struct nft_rbtree_elem *removed_end;
- removed_end = nft_rbtree_gc_elem(set, priv, rbe, genmask);
+ removed_end = nft_rbtree_gc_elem(set, priv, rbe);
if (IS_ERR(removed_end))
return PTR_ERR(removed_end);