Merge branch 'android11-5.4' into 'android11-5.4-lts'
Sync up with android11-5.4 for the following commits:05cd3c592d
ANDROID: distribute Module.symvers6eea8a6d1d
UPSTREAM: usb: max-3421: Prevent corruption of freed memoryf625f1b305
ANDROID: ABI: Update allowed list for QCOMd7aa701af5
UPSTREAM: driver core: Prevent warning when removing a device link from unregistered consumer2e30052a73
UPSTREAM: udp: properly flush normal packet at GRO time833c1e231c
UPSTREAM: net/xfrm/compat: Copy xfrm_spdattr_type_t atributesa95d35ae26
UPSTREAM: f2fs: Advertise encrypted casefolding in sysfs8557d5a891
UPSTREAM: loop: Fix missing discard support when using LOOP_CONFIGUREd0cca8a1ea
UPSTREAM: thermal/drivers/sprd: Add missing MODULE_DEVICE_TABLEba83fe23f6
UPSTREAM: nvmem: sprd: Fix an error message98e9d16b6b
UPSTREAM: usb: musb: Fix an error messageace71bcb51
UPSTREAM: scsi: ufs: core: Cancel rpm_dev_flush_recheck_work during system suspenddc5ccc2d9c
UPSTREAM: scsi: ufs: core: Do not put UFS power into LPM if link is broken5576e5e477
UPSTREAM: selinux: add proper NULL termination to the secclass_map permissionsf87a97cd71
UPSTREAM: of: property: fw_devlink: do not link ".*,nr-gpios"751aaf9f30
UPSTREAM: udp: never accept GSO_FRAGLIST packets01228292a6
UPSTREAM: udp: skip L4 aggregation for UDP tunnel packets13ab504be3
UPSTREAM: xfrm/compat: Cleanup WARN()s that can be user-triggered236d41699d
UPSTREAM: pinctrl: sunxi: fix irq bank map for the Allwinner A100 pin controller4f031c8941
UPSTREAM: loop: Set correct device size when using LOOP_CONFIGURE38866fe5a7
UPSTREAM: loop: unset GENHD_FL_NO_PART_SCAN on LOOP_CONFIGUREc060961254
ANDROID: ion_system_heap: Add __GFP_NOWARN to mid-order allocations77e911a101
ANDROID: drivers: gpu: drm: increase the MAX_DRM_OPEN_COUNT0923d5c13b
UPSTREAM: af_unix: fix garbage collect vs MSG_PEEK Change-Id: I91712c50821a00aea9165ca5497cead9ade766e6 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
65d414cb38
@ -431,6 +431,7 @@
|
||||
devm_kmemdup
|
||||
devm_kstrdup
|
||||
devm_led_classdev_register_ext
|
||||
devm_mbox_controller_register
|
||||
devm_nvmem_cell_get
|
||||
devm_nvmem_device_get
|
||||
devm_nvmem_register
|
||||
|
@ -11,4 +11,5 @@ arch/arm64/boot/Image.gz
|
||||
arch/arm64/boot/Image
|
||||
vmlinux
|
||||
System.map
|
||||
Module.symvers
|
||||
"
|
||||
|
@ -8,4 +8,5 @@ FILES="
|
||||
arch/x86/boot/bzImage
|
||||
vmlinux
|
||||
System.map
|
||||
Module.symvers
|
||||
"
|
||||
|
@ -425,8 +425,10 @@ static void devlink_remove_symlinks(struct device *dev,
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf(buf, len, "supplier:%s", dev_name(sup));
|
||||
sysfs_remove_link(&con->kobj, buf);
|
||||
if (device_is_registered(con)) {
|
||||
snprintf(buf, len, "supplier:%s", dev_name(sup));
|
||||
sysfs_remove_link(&con->kobj, buf);
|
||||
}
|
||||
snprintf(buf, len, "consumer:%s", dev_name(con));
|
||||
sysfs_remove_link(&sup->kobj, buf);
|
||||
kfree(buf);
|
||||
|
@ -1113,8 +1113,6 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
mapping = file->f_mapping;
|
||||
inode = mapping->host;
|
||||
|
||||
size = get_loop_size(lo, file);
|
||||
|
||||
if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS) != 0) {
|
||||
error = -EINVAL;
|
||||
goto out_unlock;
|
||||
@ -1163,9 +1161,12 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
blk_queue_physical_block_size(lo->lo_queue, bsize);
|
||||
blk_queue_io_min(lo->lo_queue, bsize);
|
||||
|
||||
loop_config_discard(lo);
|
||||
loop_update_rotational(lo);
|
||||
loop_update_dio(lo);
|
||||
loop_sysfs_init(lo);
|
||||
|
||||
size = get_loop_size(lo, file);
|
||||
loop_set_size(lo, size);
|
||||
|
||||
set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
|
||||
@ -1175,6 +1176,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
if (part_shift)
|
||||
lo->lo_flags |= LO_FLAGS_PARTSCAN;
|
||||
partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
|
||||
if (partscan)
|
||||
lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN;
|
||||
|
||||
/* Grab the block_device to prevent its destruction after we
|
||||
* put /dev/loopXX inode. Later in __loop_clr_fd() we bdput(bdev).
|
||||
|
@ -49,7 +49,7 @@
|
||||
/* from BKL pushdown */
|
||||
DEFINE_MUTEX(drm_global_mutex);
|
||||
|
||||
#define MAX_DRM_OPEN_COUNT 128
|
||||
#define MAX_DRM_OPEN_COUNT 4096
|
||||
|
||||
/**
|
||||
* DOC: file operations
|
||||
|
@ -234,7 +234,7 @@ static int sprd_efuse_raw_prog(struct sprd_efuse *efuse, u32 blk, bool doub,
|
||||
status = readl(efuse->base + SPRD_EFUSE_ERR_FLAG);
|
||||
if (status) {
|
||||
dev_err(efuse->dev,
|
||||
"write error status %d of block %d\n", ret, blk);
|
||||
"write error status %u of block %d\n", status, blk);
|
||||
|
||||
writel(SPRD_EFUSE_ERR_CLR_MASK,
|
||||
efuse->base + SPRD_EFUSE_ERR_CLR);
|
||||
|
@ -1221,7 +1221,16 @@ DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL)
|
||||
DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL)
|
||||
DEFINE_SUFFIX_PROP(regulators, "-supply", NULL)
|
||||
DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells")
|
||||
DEFINE_SUFFIX_PROP(gpios, "-gpios", "#gpio-cells")
|
||||
|
||||
static struct device_node *parse_gpios(struct device_node *np,
|
||||
const char *prop_name, int index)
|
||||
{
|
||||
if (!strcmp_suffix(prop_name, ",nr-gpios"))
|
||||
return NULL;
|
||||
|
||||
return parse_suffix_prop_cells(np, prop_name, index, "-gpios",
|
||||
"#gpio-cells");
|
||||
}
|
||||
|
||||
static struct device_node *parse_iommu_maps(struct device_node *np,
|
||||
const char *prop_name, int index)
|
||||
|
@ -677,7 +677,7 @@ static const struct sunxi_desc_pin a100_pins[] = {
|
||||
SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 19)),
|
||||
};
|
||||
|
||||
static const unsigned int a100_irq_bank_map[] = { 0, 1, 2, 3, 4, 5, 6};
|
||||
static const unsigned int a100_irq_bank_map[] = { 1, 2, 3, 4, 5, 6, 7};
|
||||
|
||||
static const struct sunxi_pinctrl_desc a100_pinctrl_data = {
|
||||
.pins = a100_pins,
|
||||
|
@ -8469,7 +8469,7 @@ static void ufshcd_vreg_set_lpm(struct ufs_hba *hba)
|
||||
} else if (!ufshcd_is_ufs_dev_active(hba)) {
|
||||
ufshcd_toggle_vreg(hba->dev, hba->vreg_info.vcc, false);
|
||||
vcc_off = true;
|
||||
if (!ufshcd_is_link_active(hba)) {
|
||||
if (ufshcd_is_link_hibern8(hba) || ufshcd_is_link_off(hba)) {
|
||||
ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq);
|
||||
ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq2);
|
||||
}
|
||||
@ -8491,7 +8491,7 @@ static int ufshcd_vreg_set_hpm(struct ufs_hba *hba)
|
||||
!hba->dev_info.is_lu_power_on_wp) {
|
||||
ret = ufshcd_setup_vreg(hba, true);
|
||||
} else if (!ufshcd_is_ufs_dev_active(hba)) {
|
||||
if (!ret && !ufshcd_is_link_active(hba)) {
|
||||
if (!ufshcd_is_link_active(hba)) {
|
||||
ret = ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq);
|
||||
if (ret)
|
||||
goto vcc_disable;
|
||||
@ -8843,6 +8843,8 @@ int ufshcd_system_suspend(struct ufs_hba *hba)
|
||||
if (!hba || !hba->is_powered)
|
||||
return 0;
|
||||
|
||||
cancel_delayed_work_sync(&hba->rpm_dev_flush_recheck_work);
|
||||
|
||||
if ((ufs_get_pm_lvl_to_dev_pwr_mode(hba->spm_lvl) ==
|
||||
hba->curr_dev_pwr_mode) &&
|
||||
(ufs_get_pm_lvl_to_link_pwr_state(hba->spm_lvl) ==
|
||||
|
@ -238,6 +238,14 @@ static int ion_system_heap_create_pools(struct ion_page_pool **pools)
|
||||
struct ion_page_pool *pool;
|
||||
gfp_t gfp_flags = low_order_gfp_flags;
|
||||
|
||||
/*
|
||||
* Enable NOWARN on larger order allocations, as
|
||||
* we will fall back to 0-order if things fail.
|
||||
* This avoids warning noise in dmesg.
|
||||
*/
|
||||
if (orders[i] > 0)
|
||||
gfp_flags |= __GFP_NOWARN;
|
||||
|
||||
if (orders[i] > 4)
|
||||
gfp_flags = high_order_gfp_flags;
|
||||
|
||||
|
@ -530,6 +530,7 @@ static const struct of_device_id sprd_thermal_of_match[] = {
|
||||
{ .compatible = "sprd,ums512-thermal", .data = &ums512_data },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, sprd_thermal_of_match);
|
||||
|
||||
static const struct dev_pm_ops sprd_thermal_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(sprd_thm_suspend, sprd_thm_resume)
|
||||
|
@ -514,8 +514,8 @@ static int mtk_musb_probe(struct platform_device *pdev)
|
||||
|
||||
glue->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR(glue->xceiv)) {
|
||||
dev_err(dev, "fail to getting usb-phy %d\n", ret);
|
||||
ret = PTR_ERR(glue->xceiv);
|
||||
dev_err(dev, "fail to getting usb-phy %d\n", ret);
|
||||
goto err_unregister_usb_phy;
|
||||
}
|
||||
|
||||
|
@ -458,6 +458,7 @@ enum feat_id {
|
||||
FEAT_CASEFOLD,
|
||||
FEAT_COMPRESSION,
|
||||
FEAT_TEST_DUMMY_ENCRYPTION_V2,
|
||||
FEAT_ENCRYPTED_CASEFOLD,
|
||||
};
|
||||
|
||||
static ssize_t f2fs_feature_show(struct f2fs_attr *a,
|
||||
@ -479,6 +480,7 @@ static ssize_t f2fs_feature_show(struct f2fs_attr *a,
|
||||
case FEAT_CASEFOLD:
|
||||
case FEAT_COMPRESSION:
|
||||
case FEAT_TEST_DUMMY_ENCRYPTION_V2:
|
||||
case FEAT_ENCRYPTED_CASEFOLD:
|
||||
return sprintf(buf, "supported\n");
|
||||
}
|
||||
return 0;
|
||||
@ -580,7 +582,10 @@ F2FS_GENERAL_RO_ATTR(avg_vblocks);
|
||||
#ifdef CONFIG_FS_ENCRYPTION
|
||||
F2FS_FEATURE_RO_ATTR(encryption, FEAT_CRYPTO);
|
||||
F2FS_FEATURE_RO_ATTR(test_dummy_encryption_v2, FEAT_TEST_DUMMY_ENCRYPTION_V2);
|
||||
#ifdef CONFIG_UNICODE
|
||||
F2FS_FEATURE_RO_ATTR(encrypted_casefold, FEAT_ENCRYPTED_CASEFOLD);
|
||||
#endif
|
||||
#endif /* CONFIG_FS_ENCRYPTION */
|
||||
#ifdef CONFIG_BLK_DEV_ZONED
|
||||
F2FS_FEATURE_RO_ATTR(block_zoned, FEAT_BLKZONED);
|
||||
#endif
|
||||
@ -670,7 +675,10 @@ static struct attribute *f2fs_feat_attrs[] = {
|
||||
#ifdef CONFIG_FS_ENCRYPTION
|
||||
ATTR_LIST(encryption),
|
||||
ATTR_LIST(test_dummy_encryption_v2),
|
||||
#ifdef CONFIG_UNICODE
|
||||
ATTR_LIST(encrypted_casefold),
|
||||
#endif
|
||||
#endif /* CONFIG_FS_ENCRYPTION */
|
||||
#ifdef CONFIG_BLK_DEV_ZONED
|
||||
ATTR_LIST(block_zoned),
|
||||
#endif
|
||||
|
@ -51,7 +51,9 @@ struct udp_sock {
|
||||
* different encapsulation layer set
|
||||
* this
|
||||
*/
|
||||
gro_enabled:1; /* Can accept GRO packets */
|
||||
gro_enabled:1, /* Request GRO aggregation */
|
||||
accept_udp_l4:1,
|
||||
accept_udp_fraglist:1;
|
||||
/*
|
||||
* Following member retains the information to create a UDP header
|
||||
* when the socket is uncorked.
|
||||
@ -131,8 +133,16 @@ static inline void udp_cmsg_recv(struct msghdr *msg, struct sock *sk,
|
||||
|
||||
static inline bool udp_unexpected_gso(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
return !udp_sk(sk)->gro_enabled && skb_is_gso(skb) &&
|
||||
skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4;
|
||||
if (!skb_is_gso(skb))
|
||||
return false;
|
||||
|
||||
if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4 && !udp_sk(sk)->accept_udp_l4)
|
||||
return true;
|
||||
|
||||
if (skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST && !udp_sk(sk)->accept_udp_fraglist)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#define udp_portaddr_for_each_entry(__sk, list) \
|
||||
|
@ -2596,9 +2596,12 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname,
|
||||
|
||||
case UDP_GRO:
|
||||
lock_sock(sk);
|
||||
|
||||
/* when enabling GRO, accept the related GSO packet type */
|
||||
if (valbool)
|
||||
udp_tunnel_encap_enable(sk->sk_socket);
|
||||
up->gro_enabled = valbool;
|
||||
up->accept_udp_l4 = valbool;
|
||||
release_sock(sk);
|
||||
break;
|
||||
|
||||
|
@ -512,20 +512,25 @@ struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
|
||||
unsigned int off = skb_gro_offset(skb);
|
||||
int flush = 1;
|
||||
|
||||
/* we can do L4 aggregation only if the packet can't land in a tunnel
|
||||
* otherwise we could corrupt the inner stream
|
||||
*/
|
||||
NAPI_GRO_CB(skb)->is_flist = 0;
|
||||
if (skb->dev->features & NETIF_F_GRO_FRAGLIST)
|
||||
NAPI_GRO_CB(skb)->is_flist = sk ? !udp_sk(sk)->gro_enabled: 1;
|
||||
if (!sk || !udp_sk(sk)->gro_receive) {
|
||||
if (skb->dev->features & NETIF_F_GRO_FRAGLIST)
|
||||
NAPI_GRO_CB(skb)->is_flist = sk ? !udp_sk(sk)->gro_enabled : 1;
|
||||
|
||||
if ((sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist) {
|
||||
pp = call_gro_receive(udp_gro_receive_segment, head, skb);
|
||||
return pp;
|
||||
if ((sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist)
|
||||
return call_gro_receive(udp_gro_receive_segment, head, skb);
|
||||
|
||||
/* no GRO, be sure flush the current packet */
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!sk || NAPI_GRO_CB(skb)->encap_mark ||
|
||||
if (NAPI_GRO_CB(skb)->encap_mark ||
|
||||
(uh->check && skb->ip_summed != CHECKSUM_PARTIAL &&
|
||||
NAPI_GRO_CB(skb)->csum_cnt == 0 &&
|
||||
!NAPI_GRO_CB(skb)->csum_valid) ||
|
||||
!udp_sk(sk)->gro_receive)
|
||||
!NAPI_GRO_CB(skb)->csum_valid))
|
||||
goto out;
|
||||
|
||||
/* mark that this skb passed once through the tunnel gro layer */
|
||||
|
@ -216,7 +216,7 @@ static struct nlmsghdr *xfrm_nlmsg_put_compat(struct sk_buff *skb,
|
||||
case XFRM_MSG_GETSADINFO:
|
||||
case XFRM_MSG_GETSPDINFO:
|
||||
default:
|
||||
WARN_ONCE(1, "unsupported nlmsg_type %d", nlh_src->nlmsg_type);
|
||||
pr_warn_once("unsupported nlmsg_type %d\n", nlh_src->nlmsg_type);
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
}
|
||||
|
||||
@ -277,7 +277,7 @@ static int xfrm_xlate64_attr(struct sk_buff *dst, const struct nlattr *src)
|
||||
return xfrm_nla_cpy(dst, src, nla_len(src));
|
||||
default:
|
||||
BUILD_BUG_ON(XFRMA_MAX != XFRMA_IF_ID);
|
||||
WARN_ONCE(1, "unsupported nla_type %d", src->nla_type);
|
||||
pr_warn_once("unsupported nla_type %d\n", src->nla_type);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
@ -298,8 +298,16 @@ static int xfrm_xlate64(struct sk_buff *dst, const struct nlmsghdr *nlh_src)
|
||||
len = nlmsg_attrlen(nlh_src, xfrm_msg_min[type]);
|
||||
|
||||
nla_for_each_attr(nla, attrs, len, remaining) {
|
||||
int err = xfrm_xlate64_attr(dst, nla);
|
||||
int err;
|
||||
|
||||
switch (type) {
|
||||
case XFRM_MSG_NEWSPDINFO:
|
||||
err = xfrm_nla_cpy(dst, nla, nla_len(nla));
|
||||
break;
|
||||
default:
|
||||
err = xfrm_xlate64_attr(dst, nla);
|
||||
break;
|
||||
}
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
@ -315,8 +323,10 @@ static int xfrm_alloc_compat(struct sk_buff *skb, const struct nlmsghdr *nlh_src
|
||||
struct sk_buff *new = NULL;
|
||||
int err;
|
||||
|
||||
if (WARN_ON_ONCE(type >= ARRAY_SIZE(xfrm_msg_min)))
|
||||
if (type >= ARRAY_SIZE(xfrm_msg_min)) {
|
||||
pr_warn_once("unsupported nlmsg_type %d\n", nlh_src->nlmsg_type);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (skb_shinfo(skb)->frag_list == NULL) {
|
||||
new = alloc_skb(skb->len + skb_tailroom(skb), GFP_ATOMIC);
|
||||
@ -339,7 +349,8 @@ static int xfrm_alloc_compat(struct sk_buff *skb, const struct nlmsghdr *nlh_src
|
||||
|
||||
/* Calculates len of translated 64-bit message. */
|
||||
static size_t xfrm_user_rcv_calculate_len64(const struct nlmsghdr *src,
|
||||
struct nlattr *attrs[XFRMA_MAX+1])
|
||||
struct nlattr *attrs[XFRMA_MAX + 1],
|
||||
int maxtype)
|
||||
{
|
||||
size_t len = nlmsg_len(src);
|
||||
|
||||
@ -356,10 +367,20 @@ static size_t xfrm_user_rcv_calculate_len64(const struct nlmsghdr *src,
|
||||
case XFRM_MSG_POLEXPIRE:
|
||||
len += 8;
|
||||
break;
|
||||
case XFRM_MSG_NEWSPDINFO:
|
||||
/* attirbutes are xfrm_spdattr_type_t, not xfrm_attr_type_t */
|
||||
return len;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Unexpected for anything, but XFRM_MSG_NEWSPDINFO, please
|
||||
* correct both 64=>32-bit and 32=>64-bit translators to copy
|
||||
* new attributes.
|
||||
*/
|
||||
if (WARN_ON_ONCE(maxtype))
|
||||
return len;
|
||||
|
||||
if (attrs[XFRMA_SA])
|
||||
len += 4;
|
||||
if (attrs[XFRMA_POLICY])
|
||||
@ -378,6 +399,10 @@ static int xfrm_attr_cpy32(void *dst, size_t *pos, const struct nlattr *src,
|
||||
struct nlmsghdr *nlmsg = dst;
|
||||
struct nlattr *nla;
|
||||
|
||||
/* xfrm_user_rcv_msg_compat() relies on fact that 32-bit messages
|
||||
* have the same len or shorted than 64-bit ones.
|
||||
* 32-bit translation that is bigger than 64-bit original is unexpected.
|
||||
*/
|
||||
if (WARN_ON_ONCE(copy_len > payload))
|
||||
copy_len = payload;
|
||||
|
||||
@ -434,7 +459,8 @@ static int xfrm_xlate32_attr(void *dst, const struct nlattr *nla,
|
||||
|
||||
static int xfrm_xlate32(struct nlmsghdr *dst, const struct nlmsghdr *src,
|
||||
struct nlattr *attrs[XFRMA_MAX+1],
|
||||
size_t size, u8 type, struct netlink_ext_ack *extack)
|
||||
size_t size, u8 type, int maxtype,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
size_t pos;
|
||||
int i;
|
||||
@ -514,6 +540,25 @@ static int xfrm_xlate32(struct nlmsghdr *dst, const struct nlmsghdr *src,
|
||||
}
|
||||
pos = dst->nlmsg_len;
|
||||
|
||||
if (maxtype) {
|
||||
/* attirbutes are xfrm_spdattr_type_t, not xfrm_attr_type_t */
|
||||
WARN_ON_ONCE(src->nlmsg_type != XFRM_MSG_NEWSPDINFO);
|
||||
|
||||
for (i = 1; i <= maxtype; i++) {
|
||||
int err;
|
||||
|
||||
if (!attrs[i])
|
||||
continue;
|
||||
|
||||
/* just copy - no need for translation */
|
||||
err = xfrm_attr_cpy32(dst, &pos, attrs[i], size,
|
||||
nla_len(attrs[i]), nla_len(attrs[i]));
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 1; i < XFRMA_MAX + 1; i++) {
|
||||
int err;
|
||||
|
||||
@ -558,7 +603,7 @@ static struct nlmsghdr *xfrm_user_rcv_msg_compat(const struct nlmsghdr *h32,
|
||||
if (err < 0)
|
||||
return ERR_PTR(err);
|
||||
|
||||
len = xfrm_user_rcv_calculate_len64(h32, attrs);
|
||||
len = xfrm_user_rcv_calculate_len64(h32, attrs, maxtype);
|
||||
/* The message doesn't need translation */
|
||||
if (len == nlmsg_len(h32))
|
||||
return NULL;
|
||||
@ -568,7 +613,7 @@ static struct nlmsghdr *xfrm_user_rcv_msg_compat(const struct nlmsghdr *h32,
|
||||
if (!h64)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
err = xfrm_xlate32(h64, h32, attrs, len, type, extack);
|
||||
err = xfrm_xlate32(h64, h32, attrs, len, type, maxtype, extack);
|
||||
if (err < 0) {
|
||||
kvfree(h64);
|
||||
return ERR_PTR(err);
|
||||
|
@ -242,11 +242,12 @@ struct security_class_mapping secclass_map[] = {
|
||||
{ "infiniband_endport",
|
||||
{ "manage_subnet", NULL } },
|
||||
{ "bpf",
|
||||
{"map_create", "map_read", "map_write", "prog_load", "prog_run"} },
|
||||
{ "map_create", "map_read", "map_write", "prog_load", "prog_run",
|
||||
NULL } },
|
||||
{ "xdp_socket",
|
||||
{ COMMON_SOCK_PERMS, NULL } },
|
||||
{ "perf_event",
|
||||
{"open", "cpu", "kernel", "tracepoint", "read", "write"} },
|
||||
{"open", "cpu", "kernel", "tracepoint", "read", "write", NULL } },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user