Linux 5.10.107
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.107 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/rk322x.dtsi | 4 - arch/arm/boot/dts/rk3288.dtsi | 2 arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 4 - arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 6 + arch/arm64/boot/dts/rockchip/rk3399.dtsi | 6 - arch/arm64/kvm/hyp/smccc_wa.S | 4 - arch/mips/kernel/smp.c | 6 - drivers/atm/firestream.c | 2 drivers/gpu/drm/drm_connector.c | 3 drivers/net/can/rcar/rcar_canfd.c | 6 - drivers/net/ethernet/sfc/mcdi.c | 2 drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c | 3 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 1 fs/io_uring.c | 18 ++++- include/net/xfrm.h | 5 - lib/Kconfig | 1 net/ipv4/tcp.c | 10 +- net/key/af_key.c | 2 net/mac80211/agg-tx.c | 10 ++ net/sctp/sm_statefuns.c | 71 +++++++++++++-------- net/wireless/nl80211.c | 3 net/xfrm/xfrm_policy.c | 14 ++-- net/xfrm/xfrm_state.c | 15 +++- net/xfrm/xfrm_user.c | 27 ++----- tools/testing/selftests/vm/userfaultfd.c | 1 26 files changed, 139 insertions(+), 89 deletions(-)
Alexander Lobakin (1):
MIPS: smp: fill in sibling and core maps earlier
Chengming Zhou (1):
kselftest/vm: fix tests build with old libc
Corentin Labbe (1):
ARM: dts: rockchip: fix a typo on rk3288 crypto-controller
Dinh Nguyen (1):
arm64: dts: agilex: use the compatible "intel,socfpga-agilex-hsotg"
Eric Dumazet (1):
tcp: make tcp_read_sock() more robust
Golan Ben Ami (1):
iwlwifi: don't advertise TWT support
Greg Kroah-Hartman (1):
Linux 5.10.107
Jakob Unterwurzacher (1):
arm64: dts: rockchip: fix rk3399-puma eMMC HS400 signal integrity
James Morse (1):
arm64: kvm: Fix copy-and-paste error in bhb templates for v5.10 stable
Jia-Ju Bai (1):
atm: firestream: check the return value of ioremap() in fs_init()
Johannes Berg (1):
mac80211: refuse aggregations sessions before authorized
Julian Braha (1):
ARM: 9178/1: fix unmet dependency on BITREVERSE for HAVE_ARCH_BITREVERSE
Kai Lueke (1):
Revert "xfrm: state and policy should fail if XFRMA_IF_ID 0"
Lad Prabhakar (1):
can: rcar_canfd: rcar_canfd_channel_probe(): register the CAN device when fully ready
Manasi Navare (1):
drm/vrr: Set VRR capable prop only if it is attached to connector
Niels Dossche (1):
sfc: extend the locking on mcdi->seqno
Pavel Begunkov (1):
io_uring: return back safer resurrect
Sascha Hauer (2):
arm64: dts: rockchip: reorder rk3399 hdmi clocks
ARM: dts: rockchip: reorder rk322x hmdi clocks
Sreeramya Soratkal (1):
nl80211: Update bss channel on channel switch for P2P_CLIENT
Xin Long (1):
sctp: fix the processing for INIT chunk
Yan Yan (2):
xfrm: Check if_id in xfrm_migrate
xfrm: Fix xfrm migrate issues when address family changes
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 106 +SUBLEVEL = 107 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/rk322x.dtsi +2 -2
@@ -640,8 +640,8 @@ hdmi: hdmi@200a0000 { interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; assigned-clocks = <&cru SCLK_HDMI_PHY>; assigned-clock-parents = <&hdmi_phy>; - clocks = <&cru SCLK_HDMI_HDCP>, <&cru PCLK_HDMI_CTRL>, <&cru SCLK_HDMI_CEC>; - clock-names = "isfr", "iahb", "cec"; + clocks = <&cru PCLK_HDMI_CTRL>, <&cru SCLK_HDMI_HDCP>, <&cru SCLK_HDMI_CEC>; + clock-names = "iahb", "isfr", "cec"; pinctrl-names = "default"; pinctrl-0 = <&hdmii2c_xfer &hdmi_hpd &hdmi_cec>; resets = <&cru SRST_HDMI_P>;
arch/arm/boot/dts/rk3288.dtsi +1 -1
@@ -990,7 +990,7 @@ i2s: i2s@ff890000 { status = "disabled"; }; - crypto: cypto-controller@ff8a0000 { + crypto: crypto@ff8a0000 { compatible = "rockchip,rk3288-crypto"; reg = <0x0 0xff8a0000 0x0 0x4000>; interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
arch/arm64/boot/dts/intel/socfpga_agilex.dtsi +2 -2
@@ -476,7 +476,7 @@ usbphy0: usbphy@0 { }; usb0: usb@ffb00000 { - compatible = "snps,dwc2"; + compatible = "intel,socfpga-agilex-hsotg", "snps,dwc2"; reg = <0xffb00000 0x40000>; interrupts = <0 93 4>; phys = <&usbphy0>;
@@ -489,7 +489,7 @@ usb0: usb@ffb00000 { }; usb1: usb@ffb40000 { - compatible = "snps,dwc2"; + compatible = "intel,socfpga-agilex-hsotg", "snps,dwc2"; reg = <0xffb40000 0x40000>; interrupts = <0 94 4>; phys = <&usbphy0>;
arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +6 -0
@@ -472,6 +472,12 @@ vcc5v0_host_en: vcc5v0-host-en { }; &sdhci { + /* + * Signal integrity isn't great at 200MHz but 100MHz has proven stable + * enough. + */ + max-frequency = <100000000>; + bus-width = <8>; mmc-hs400-1_8v; mmc-hs400-enhanced-strobe;
arch/arm64/boot/dts/rockchip/rk3399.dtsi +3 -3
@@ -1770,10 +1770,10 @@ hdmi: hdmi@ff940000 { interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH 0>; clocks = <&cru PCLK_HDMI_CTRL>, <&cru SCLK_HDMI_SFR>, - <&cru PLL_VPLL>, + <&cru SCLK_HDMI_CEC>, <&cru PCLK_VIO_GRF>, - <&cru SCLK_HDMI_CEC>; - clock-names = "iahb", "isfr", "vpll", "grf", "cec"; + <&cru PLL_VPLL>; + clock-names = "iahb", "isfr", "cec", "grf", "vpll"; power-domains = <&power RK3399_PD_HDCP>; reg-io-width = <4>; rockchip,grf = <&grf>;
arch/arm64/kvm/hyp/smccc_wa.S +2 -2
@@ -68,7 +68,7 @@ SYM_DATA_START(__spectre_bhb_loop_k24) esb sub sp, sp, #(8 * 2) stp x0, x1, [sp, #(8 * 0)] - mov x0, #8 + mov x0, #24 2: b . + 4 subs x0, x0, #1 b.ne 2b
@@ -85,7 +85,7 @@ SYM_DATA_START(__spectre_bhb_loop_k32) esb sub sp, sp, #(8 * 2) stp x0, x1, [sp, #(8 * 0)] - mov x0, #8 + mov x0, #32 2: b . + 4 subs x0, x0, #1 b.ne 2b
arch/mips/kernel/smp.c +3 -3
@@ -351,6 +351,9 @@ asmlinkage void start_secondary(void) cpu =smp_processor_id (); cpu_data[cpu].udelay_val = loops_per_jiffy; +set_cpu_sibling_map (cpu); +set_cpu_core_map (cpu); +cpumask_set_cpu (cpu, &cpu_coherent_mask);notify_cpu_starting (cpu);
@@ -362,9 +365,6 @@ asmlinkage void start_secondary(void)/* The CPU is running and counters synchronised, now mark it online */ set_cpu_online (cpu, true); -set_cpu_sibling_map (cpu); -set_cpu_core_map (cpu); -calculate_cpu_foreign_map ();/*
drivers/atm/firestream.c +2 -0
@@ -1675,6 +1675,8 @@ static int fs_init(struct fs_dev *dev) dev->hw_base =pci_resource_start (pci_dev,0 ); dev->base =ioremap (dev->hw_base,0x1000 ); +if (!dev->base) +return 1 ;reset_chip (dev);
drivers/gpu/drm/drm_connector.c +3 -0
@@ -2155,6 +2155,9 @@ EXPORT_SYMBOL(drm_connector_attach_max_bpc_property);void drm_connector_set_vrr_capable_property (struct drm_connector *connector,bool capable) { +if (!connector->vrr_capable_property) +return ; +drm_object_property_set_value (&connector->base, connector->vrr_capable_property, capable);
drivers/net/can/rcar/rcar_canfd.c +3 -3
@@ -1598,15 +1598,15 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,netif_napi_add (ndev, &priv->napi, rcar_canfd_rx_poll,RCANFD_NAPI_WEIGHT ); +spin_lock_init (&priv->tx_lock); +devm_can_led_init (ndev); + gpriv->ch[priv->channel] = priv; err =register_candev (ndev);if (err) {dev_err (&pdev->dev,"register_candev() failed, error %d\n" , err); goto fail_candev; } -spin_lock_init (&priv->tx_lock); -devm_can_led_init (ndev); - gpriv->ch[priv->channel] = priv;dev_info (&pdev->dev,"device registered (channel %u)\n" , priv->channel);return 0 ;
drivers/net/ethernet/sfc/mcdi.c +1 -1
@@ -163,9 +163,9 @@ static void efx_mcdi_send_request(struct efx_nic *efx, unsigned cmd,/* Serialise with efx_mcdi_ev_cpl() and efx_mcdi_ev_death() */ spin_lock_bh (&mcdi->iface_lock); ++mcdi->seqno; + seqno = mcdi->seqno &SEQ_MASK ;spin_unlock_bh (&mcdi->iface_lock); - seqno = mcdi->seqno &SEQ_MASK ; xflags =0 ;if (mcdi->mode ==MCDI_MODE_EVENTS ) xflags |=MCDI_HEADER_XFLAGS_EVREQ ;
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +1 -2
@@ -587,8 +587,7 @@ static struct ieee80211_sband_iftype_data iwl_he_capa[] = { .has_he = true, .he_cap_elem = { .mac_cap_info[0 ] = -IEEE80211_HE_MAC_CAP0_HTC_HE | - IEEE80211_HE_MAC_CAP0_TWT_REQ, + IEEE80211_HE_MAC_CAP0_HTC_HE, .mac_cap_info[1 ] =IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US | IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8,
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +0 -1
@@ -350,7 +350,6 @@ static const u8 he_if_types_ext_capa_sta[] = { [0] = WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING, [2] = WLAN_EXT_CAPA3_MULTI_BSSID_SUPPORT, [7] = WLAN_EXT_CAPA8_OPMODE_NOTIF, - [9] = WLAN_EXT_CAPA10_TWT_REQUESTER_SUPPORT, };static const struct wiphy_iftype_ext_capab he_iftypes_ext_capa[] = {
fs/io_uring.c +14 -4
@@ -1009,6 +1009,18 @@ static inline bool __io_match_files(struct io_kiocb *req, req->work.identity->files == files; } +static void io_refs_resurrect (struct percpu_ref *ref,struct completion *compl) +{ +bool got =percpu_ref_tryget (ref); + +/* already at zero, wait for ->release() */ +if (!got) +wait_for_completion (compl); +percpu_ref_resurrect (ref); +if (got) +percpu_ref_put (ref); +} +static bool io_match_task (struct io_kiocb *head,struct task_struct *task,struct files_struct *files)
@@ -9757,12 +9769,11 @@ static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,if (ret <0 )break ; }while (1 ); -mutex_lock (&ctx->uring_lock);if (ret) { -percpu_ref_resurrect (&ctx->refs); - goto out_quiesce; +io_refs_resurrect (&ctx->refs, &ctx->ref_comp); +return ret; } }
@@ -9855,7 +9866,6 @@ static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,if (io_register_op_must_quiesce (opcode)) {/* bring the ctx back to life */ percpu_ref_reinit (&ctx->refs); -out_quiesce:reinit_completion (&ctx->ref_comp); }return ret;
include/net/xfrm.h +3 -2
@@ -1668,14 +1668,15 @@ int km_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, const struct xfrm_migrate *m, int num_bundles, const struct xfrm_kmaddress *k, const struct xfrm_encap_tmpl *encap); -struct xfrm_state *xfrm_migrate_state_find (struct xfrm_migrate *m,struct net *net); +struct xfrm_state *xfrm_migrate_state_find (struct xfrm_migrate *m,struct net *net, +u32 if_id);struct xfrm_state *xfrm_state_migrate (struct xfrm_state *x,struct xfrm_migrate *m,struct xfrm_encap_tmpl *encap);int xfrm_migrate (const struct xfrm_selector *sel,u8 dir,u8 type,struct xfrm_migrate *m,int num_bundles,struct xfrm_kmaddress *k,struct net *net, -struct xfrm_encap_tmpl *encap); +struct xfrm_encap_tmpl *encap,u32 if_id);#endif int km_new_mapping (struct xfrm_state *x,xfrm_address_t *ipaddr,__be16 sport);
lib/Kconfig +0 -1
@@ -45,7 +45,6 @@ config BITREVERSE config HAVE_ARCH_BITREVERSE bool default n - depends on BITREVERSE help This option enables the use of hardware bit-reversal instructions on architectures which support such operations.
net/ipv4/tcp.c +6 -4
@@ -1652,11 +1652,13 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,if (!copied) copied = used;break ; - }else if (used <= len) { - seq += used; - copied += used; - offset += used; } +if (WARN_ON_ONCE (used > len)) + used = len; + seq += used; + copied += used; + offset += used; +/* If recv_actor drops the lock (e.g. TCP splice * receive) the skb pointer might be invalid when * getting here: tcp_collapse might have deleted it
net/key/af_key.c +1 -1
@@ -2627,7 +2627,7 @@ static int pfkey_migrate(struct sock *sk, struct sk_buff *skb, }return xfrm_migrate (&sel, dir,XFRM_POLICY_TYPE_MAIN , m, i, - kma ? &k :NULL , net,NULL ); + kma ? &k :NULL , net,NULL ,0 ); out:return err;
net/mac80211/agg-tx.c +9 -1
@@ -9,7 +9,7 @@* Copyright 2007, Michael Wu <[email protected]> * Copyright 2007-2010, Intel Corporation * Copyright(c) 2015-2017 Intel Deutschland GmbH -* Copyright (C) 2018 - 2021 Intel Corporation +* Copyright (C) 2018 - 2022 Intel Corporation */ #include <linux/ieee80211.h>
@@ -626,6 +626,14 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,return -EINVAL ; } +if (test_sta_flag (sta,WLAN_STA_MFP ) && + !test_sta_flag (sta,WLAN_STA_AUTHORIZED )) { +ht_dbg (sdata, +"MFP STA not authorized - deny BA session request %pM tid %d\n" , + sta->sta.addr, tid); +return -EINVAL ; + } +/* * 802.11n-2009 11.5.1.1: If the initiating STA is an HT STA, is a * member of an IBSS, and has no other existing Block Ack agreement
net/sctp/sm_statefuns.c +46 -25
119 lines not on this page · raw message
net/wireless/nl80211.c +2 -1
@@ -17127,7 +17127,8 @@ void cfg80211_ch_switch_notify(struct net_device *dev, wdev->chandef = *chandef; wdev->preset_chandef = *chandef; -if (wdev->iftype ==NL80211_IFTYPE_STATION && +if ((wdev->iftype ==NL80211_IFTYPE_STATION || + wdev->iftype ==NL80211_IFTYPE_P2P_CLIENT ) && !WARN_ON (!wdev->current_bss))cfg80211_update_assoc_bss_entry (wdev, chandef->chan);
net/xfrm/xfrm_policy.c +8 -6
@@ -4287,7 +4287,7 @@ static bool xfrm_migrate_selector_match(const struct xfrm_selector *sel_cmp, }static struct xfrm_policy *xfrm_migrate_policy_find (const struct xfrm_selector *sel, -u8 dir,u8 type,struct net *net) +u8 dir,u8 type,struct net *net,u32 if_id) {struct xfrm_policy *pol, *ret =NULL ;struct hlist_head *chain;
@@ -4296,7 +4296,8 @@ static struct xfrm_policy *xfrm_migrate_policy_find(const struct xfrm_selector *spin_lock_bh (&net->xfrm.xfrm_policy_lock); chain =policy_hash_direct (net, &sel->daddr, &sel->saddr, sel->family, dir);hlist_for_each_entry (pol, chain, bydst) { -if (xfrm_migrate_selector_match (sel, &pol->selector) && +if ((if_id ==0 || pol->if_id == if_id) && +xfrm_migrate_selector_match (sel, &pol->selector) && pol->type == type) { ret = pol; priority = ret->priority;
@@ -4308,7 +4309,8 @@ static struct xfrm_policy *xfrm_migrate_policy_find(const struct xfrm_selector *if ((pol->priority >= priority) && ret)break ; -if (xfrm_migrate_selector_match (sel, &pol->selector) && +if ((if_id ==0 || pol->if_id == if_id) && +xfrm_migrate_selector_match (sel, &pol->selector) && pol->type == type) { ret = pol;break ;
@@ -4424,7 +4426,7 @@ static int xfrm_migrate_check(const struct xfrm_migrate *m, int num_migrate)int xfrm_migrate (const struct xfrm_selector *sel,u8 dir,u8 type,struct xfrm_migrate *m,int num_migrate,struct xfrm_kmaddress *k,struct net *net, -struct xfrm_encap_tmpl *encap) +struct xfrm_encap_tmpl *encap,u32 if_id) {int i, err, nx_cur =0 , nx_new =0 ;struct xfrm_policy *pol =NULL ;
@@ -4443,14 +4445,14 @@ int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, }/* Stage 1 - find policy */ -if ((pol =xfrm_migrate_policy_find (sel, dir, type, net)) ==NULL ) { +if ((pol =xfrm_migrate_policy_find (sel, dir, type, net, if_id)) ==NULL ) { err = -ENOENT ; goto out; }/* Stage 2 - find and update state(s) */ for (i =0 , mp = m; i < num_migrate; i++, mp++) { -if ((x =xfrm_migrate_state_find (mp, net))) { +if ((x =xfrm_migrate_state_find (mp, net, if_id))) { x_cur[nx_cur] = x; nx_cur++; xc =xfrm_state_migrate (x, mp, encap);
net/xfrm/xfrm_state.c +11 -4
@@ -1542,9 +1542,6 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig,memcpy (&x->mark, &orig->mark,sizeof (x->mark));memcpy (&x->props.smark, &orig->props.smark,sizeof (x->props.smark)); -if (xfrm_init_state (x) <0 ) - goto error; - x->props.flags = orig->props.flags; x->props.extra_flags = orig->props.extra_flags;
@@ -1569,7 +1566,8 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig,return NULL ; } -struct xfrm_state *xfrm_migrate_state_find (struct xfrm_migrate *m,struct net *net) +struct xfrm_state *xfrm_migrate_state_find (struct xfrm_migrate *m,struct net *net, +u32 if_id) {unsigned int h;struct xfrm_state *x =NULL ;
@@ -1585,6 +1583,8 @@ struct xfrm_state *xfrm_migrate_state_find(struct xfrm_migrate *m, struct net *ncontinue ;if (m->reqid && x->props.reqid != m->reqid)continue ; +if (if_id !=0 && x->if_id != if_id) +continue ;if (!xfrm_addr_equal (&x->id.daddr, &m->old_daddr, m->old_family) || !xfrm_addr_equal(&x->props.saddr, &m->old_saddr,
@@ -1600,6 +1600,8 @@ struct xfrm_state *xfrm_migrate_state_find(struct xfrm_migrate *m, struct net *nif (x->props.mode != m->mode || x->id.proto != m->proto)continue ; +if (if_id !=0 && x->if_id != if_id) +continue ;if (!xfrm_addr_equal (&x->id.daddr, &m->old_daddr, m->old_family) || !xfrm_addr_equal(&x->props.saddr, &m->old_saddr,
@@ -1626,6 +1628,11 @@ struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x,if (!xc)return NULL ; + xc->props.family = m->new_family; + +if (xfrm_init_state (xc) <0 ) + goto error; +memcpy (&xc->id.daddr, &m->new_daddr,sizeof (xc->id.daddr));memcpy (&xc->props.saddr, &m->new_saddr,sizeof (xc->props.saddr));
net/xfrm/xfrm_user.c +8 -19
@@ -629,13 +629,8 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,xfrm_smark_init (attrs, &x->props.smark); -if (attrs[XFRMA_IF_ID ]) { +if (attrs[XFRMA_IF_ID ]) x->if_id =nla_get_u32 (attrs[XFRMA_IF_ID ]); -if (!x->if_id) { - err = -EINVAL ; - goto error; - } - } err =__xfrm_init_state (x, false, attrs[XFRMA_OFFLOAD_DEV ]);if (err)
@@ -1371,13 +1366,8 @@ static int xfrm_alloc_userspi(struct sk_buff *skb, struct nlmsghdr *nlh, mark =xfrm_mark_get (attrs, &m); -if (attrs[XFRMA_IF_ID ]) { +if (attrs[XFRMA_IF_ID ]) if_id =nla_get_u32 (attrs[XFRMA_IF_ID ]); -if (!if_id) { - err = -EINVAL ; - goto out_noput; - } - }if (p->info.seq) { x =xfrm_find_acq_byseq (net, mark, p->info.seq);
@@ -1690,13 +1680,8 @@ static struct xfrm_policy *xfrm_policy_construct(struct net *net, struct xfrm_usxfrm_mark_get (attrs, &xp->mark); -if (attrs[XFRMA_IF_ID ]) { +if (attrs[XFRMA_IF_ID ]) xp->if_id =nla_get_u32 (attrs[XFRMA_IF_ID ]); -if (!xp->if_id) { - err = -EINVAL ; - goto error; - } - }return xp; error:
@@ -2451,6 +2436,7 @@ static int xfrm_do_migrate(struct sk_buff *skb, struct nlmsghdr *nlh,int n =0 ;struct net *net =sock_net (skb->sk);struct xfrm_encap_tmpl *encap =NULL ; +u32 if_id =0 ;if (attrs[XFRMA_MIGRATE ] ==NULL )return -EINVAL ;
@@ -2475,7 +2461,10 @@ static int xfrm_do_migrate(struct sk_buff *skb, struct nlmsghdr *nlh,return 0 ; } - err =xfrm_migrate (&pi->sel, pi->dir, type, m, n, kmp, net, encap); +if (attrs[XFRMA_IF_ID ]) + if_id =nla_get_u32 (attrs[XFRMA_IF_ID ]); + + err =xfrm_migrate (&pi->sel, pi->dir, type, m, n, kmp, net, encap, if_id);kfree (encap);
tools/testing/selftests/vm/userfaultfd.c +1 -0
@@ -46,6 +46,7 @@#include <signal.h> #include <poll.h> #include <string.h> +#include <linux/mman.h> #include <sys/mman.h> #include <sys/syscall.h> #include <sys/ioctl.h>