1
0
Fork 0

This is the 5.4.92 stable release

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmAMOqAACgkQONu9yGCS
 aT5y+A//dHc3oRvCuXWaRS2Zhmx2KyZNOMkmElQnqi1aMcnrRhyIzNZ5gwCftYp6
 9EzhryrjioTZMHd14eYwwjyT2yckoBFKNsW+cPJ4YgqB8TtVD5a/2ygYAXBrHVkW
 Fj3fXeJZmkRk9U156Gw/O8GP/BJ2ld/lk89IYYNkdjXwjjKyyOotBDGMSou4Swjl
 8EciEzb3fyn8DvbD2bCFit5RgaNH2OMr0uTITS7RyLNmhBoZSfJo62KbFxYbnFti
 I3EKxVhnJemNzU+jWNpczZxTyOodMAzcOWbpttJTIxpGDsivWSXM3kDbIq1HT7pe
 xAfYEtkL+kgLb4EPIzdNue6GRQlRKbgwsfs/ralQ9iPFvL9GHP4zvMj6wGV1Qzjw
 4PI+wc76ZNlQMtkntGrOWRDmYrTICL1UY3Uh93SmaYKWSMRATuHK6LFe+y+7tIK7
 Yo/XAdlAzzmc3cGh4ikC1zj4WchRG9/GlfucnFGqxBuxZGXq8WBStBIOkHda4vFg
 a5Ncli+PyOID22AtXb8It6JFI70arZ53CUAwCRqRA7FYlrzZrcsZe15uuB72yDTZ
 mPeaNplWiIXPn8vWMDGFBX5Zhysgb/8FGXtSaFCOnE3QUVHPIE2hoLUlClfJIqxf
 f4uGh5HfquTXZUXzlvoM8tgKPzfpkrqZe1JKNdCh+khI6VzxX8Q=
 =B0JT
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEdQaENiSDAlGTDEbB7G51OISzHs0FAmAMjpwACgkQ7G51OISz
 Hs0jEA/7BXp59JKq3heiHRkYUgZHyYwZ9/9TjP9Ax9EzZUU930T+3ra2pFs0UPfI
 uHIEoYS0tai68lRppxCh50x6d24dfVPyo0ZGKG6AWPmpEnn+HbYT1tHKbzVugciI
 DQ+JvcwIv1OWkA7ueYnVjGshGYnmOV4t9WUU1Z9IXI0JDDoJnfoPrFVEN3wRWgpy
 PRoTqGAYmAVseWJAjQEDfzBZN7BMbA70Cxj7mf5Z37VEE9XG3k5mAvqIR540X/9I
 L7251rTjOvb/ke5EDwpX92iq9dBtqsj7t3j2/oXLI8hHnt6ot1M14YF0xcST4Ljv
 qTK4KwBgTKfUJ6MhedGeR8+UhG6GDgq/UP25Rs6uSZpRzHR/ubn1i++AJMiFDsdC
 tRVo54NcxibrESqsZ5ynHlUzlGY6F7aIV+AY9uEV3EplMjdgI7s02grIazvT3M7I
 g5vRzkXGtCc8WQ9qS/XDj1cKBWbmmTalCUqbfs6Apr0CmuVCRMa91NJaVA5oDtNc
 T3MOZKm6kuDwbLOevhgpANIU+Run1TzG33tfbE4LWbb6wDz7S052iNN1PZWs728L
 TqyIqFrrRwZ6icNBoNwvzBWz0iRC0daTpUZGnmbhQA3pn/PsHWZpLQwnA3jajrx9
 GwYOkLp4fFz0KXsTQ3RV3DKhWAQ6kpn4/mLVH5Kv3ZaHVA1QIfo=
 =Kbmk
 -----END PGP SIGNATURE-----

Merge tag 'v5.4.92' into 5.4-2.2.x-imx

This is the 5.4.92 stable release

Signed-off-by: Andrey Zhizhikin <andrey.zhizhikin@leica-geosystems.com>
5.4-rM2-2.2.x-imx-squashed
Andrey Zhizhikin 2021-01-23 21:01:13 +00:00
commit 0f940c106e
32 changed files with 157 additions and 88 deletions

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
VERSION = 5 VERSION = 5
PATCHLEVEL = 4 PATCHLEVEL = 4
SUBLEVEL = 91 SUBLEVEL = 92
EXTRAVERSION = EXTRAVERSION =
NAME = Kleptomaniac Octopus NAME = Kleptomaniac Octopus

View File

@ -4790,8 +4790,6 @@ static void mvpp2_phylink_validate(struct phylink_config *config,
phylink_set(mask, Autoneg); phylink_set(mask, Autoneg);
phylink_set_port_modes(mask); phylink_set_port_modes(mask);
phylink_set(mask, Pause);
phylink_set(mask, Asym_Pause);
switch (state->interface) { switch (state->interface) {
case PHY_INTERFACE_MODE_10GKR: case PHY_INTERFACE_MODE_10GKR:

View File

@ -19,7 +19,7 @@
#define MLXSW_THERMAL_ASIC_TEMP_NORM 75000 /* 75C */ #define MLXSW_THERMAL_ASIC_TEMP_NORM 75000 /* 75C */
#define MLXSW_THERMAL_ASIC_TEMP_HIGH 85000 /* 85C */ #define MLXSW_THERMAL_ASIC_TEMP_HIGH 85000 /* 85C */
#define MLXSW_THERMAL_ASIC_TEMP_HOT 105000 /* 105C */ #define MLXSW_THERMAL_ASIC_TEMP_HOT 105000 /* 105C */
#define MLXSW_THERMAL_ASIC_TEMP_CRIT 110000 /* 110C */ #define MLXSW_THERMAL_ASIC_TEMP_CRIT 140000 /* 140C */
#define MLXSW_THERMAL_HYSTERESIS_TEMP 5000 /* 5C */ #define MLXSW_THERMAL_HYSTERESIS_TEMP 5000 /* 5C */
#define MLXSW_THERMAL_MODULE_TEMP_SHIFT (MLXSW_THERMAL_HYSTERESIS_TEMP * 2) #define MLXSW_THERMAL_MODULE_TEMP_SHIFT (MLXSW_THERMAL_HYSTERESIS_TEMP * 2)
#define MLXSW_THERMAL_ZONE_MAX_NAME 16 #define MLXSW_THERMAL_ZONE_MAX_NAME 16
@ -177,6 +177,12 @@ mlxsw_thermal_module_trips_update(struct device *dev, struct mlxsw_core *core,
if (err) if (err)
return err; return err;
if (crit_temp > emerg_temp) {
dev_warn(dev, "%s : Critical threshold %d is above emergency threshold %d\n",
tz->tzdev->type, crit_temp, emerg_temp);
return 0;
}
/* According to the system thermal requirements, the thermal zones are /* According to the system thermal requirements, the thermal zones are
* defined with four trip points. The critical and emergency * defined with four trip points. The critical and emergency
* temperature thresholds, provided by QSFP module are set as "active" * temperature thresholds, provided by QSFP module are set as "active"
@ -191,11 +197,8 @@ mlxsw_thermal_module_trips_update(struct device *dev, struct mlxsw_core *core,
tz->trips[MLXSW_THERMAL_TEMP_TRIP_NORM].temp = crit_temp; tz->trips[MLXSW_THERMAL_TEMP_TRIP_NORM].temp = crit_temp;
tz->trips[MLXSW_THERMAL_TEMP_TRIP_HIGH].temp = crit_temp; tz->trips[MLXSW_THERMAL_TEMP_TRIP_HIGH].temp = crit_temp;
tz->trips[MLXSW_THERMAL_TEMP_TRIP_HOT].temp = emerg_temp; tz->trips[MLXSW_THERMAL_TEMP_TRIP_HOT].temp = emerg_temp;
if (emerg_temp > crit_temp) tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp +
tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp +
MLXSW_THERMAL_MODULE_TEMP_SHIFT; MLXSW_THERMAL_MODULE_TEMP_SHIFT;
else
tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp;
return 0; return 0;
} }

View File

@ -564,11 +564,6 @@ static const struct net_device_ops netxen_netdev_ops = {
.ndo_set_features = netxen_set_features, .ndo_set_features = netxen_set_features,
}; };
static inline bool netxen_function_zero(struct pci_dev *pdev)
{
return (PCI_FUNC(pdev->devfn) == 0) ? true : false;
}
static inline void netxen_set_interrupt_mode(struct netxen_adapter *adapter, static inline void netxen_set_interrupt_mode(struct netxen_adapter *adapter,
u32 mode) u32 mode)
{ {
@ -664,7 +659,7 @@ static int netxen_setup_intr(struct netxen_adapter *adapter)
netxen_initialize_interrupt_registers(adapter); netxen_initialize_interrupt_registers(adapter);
netxen_set_msix_bit(pdev, 0); netxen_set_msix_bit(pdev, 0);
if (netxen_function_zero(pdev)) { if (adapter->portnum == 0) {
if (!netxen_setup_msi_interrupts(adapter, num_msix)) if (!netxen_setup_msi_interrupts(adapter, num_msix))
netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE); netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE);
else else

View File

@ -3862,6 +3862,7 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
{ {
struct stmmac_priv *priv = netdev_priv(dev); struct stmmac_priv *priv = netdev_priv(dev);
int txfifosz = priv->plat->tx_fifo_size; int txfifosz = priv->plat->tx_fifo_size;
const int mtu = new_mtu;
if (txfifosz == 0) if (txfifosz == 0)
txfifosz = priv->dma_cap.tx_fifo_size; txfifosz = priv->dma_cap.tx_fifo_size;
@ -3879,7 +3880,7 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB)) if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB))
return -EINVAL; return -EINVAL;
dev->mtu = new_mtu; dev->mtu = mtu;
netdev_update_features(dev); netdev_update_features(dev);

View File

@ -387,7 +387,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
reply_len = sizeof *phym; reply_len = sizeof *phym;
retval = rndis_query(dev, intf, u.buf, retval = rndis_query(dev, intf, u.buf,
RNDIS_OID_GEN_PHYSICAL_MEDIUM, RNDIS_OID_GEN_PHYSICAL_MEDIUM,
0, (void **) &phym, &reply_len); reply_len, (void **)&phym, &reply_len);
if (retval != 0 || !phym) { if (retval != 0 || !phym) {
/* OID is optional so don't fail here. */ /* OID is optional so don't fail here. */
phym_unspec = cpu_to_le32(RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED); phym_unspec = cpu_to_le32(RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED);

View File

@ -286,7 +286,7 @@ lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
* This routine is only called if we are SLI3, direct connect pt2pt * This routine is only called if we are SLI3, direct connect pt2pt
* mode and the remote NPort issues the PLOGI after link up. * mode and the remote NPort issues the PLOGI after link up.
*/ */
void static void
lpfc_defer_pt2pt_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *link_mbox) lpfc_defer_pt2pt_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *link_mbox)
{ {
LPFC_MBOXQ_t *login_mbox; LPFC_MBOXQ_t *login_mbox;
@ -340,7 +340,7 @@ lpfc_defer_pt2pt_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *link_mbox)
* This routine is only called if we are SLI4, acting in target * This routine is only called if we are SLI4, acting in target
* mode and the remote NPort issues the PLOGI after link up. * mode and the remote NPort issues the PLOGI after link up.
**/ **/
void static void
lpfc_defer_acc_rsp(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) lpfc_defer_acc_rsp(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;

View File

@ -115,6 +115,7 @@ struct cdns_spi {
void __iomem *regs; void __iomem *regs;
struct clk *ref_clk; struct clk *ref_clk;
struct clk *pclk; struct clk *pclk;
unsigned int clk_rate;
u32 speed_hz; u32 speed_hz;
const u8 *txbuf; const u8 *txbuf;
u8 *rxbuf; u8 *rxbuf;
@ -250,7 +251,7 @@ static void cdns_spi_config_clock_freq(struct spi_device *spi,
u32 ctrl_reg, baud_rate_val; u32 ctrl_reg, baud_rate_val;
unsigned long frequency; unsigned long frequency;
frequency = clk_get_rate(xspi->ref_clk); frequency = xspi->clk_rate;
ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR); ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
@ -558,8 +559,9 @@ static int cdns_spi_probe(struct platform_device *pdev)
master->auto_runtime_pm = true; master->auto_runtime_pm = true;
master->mode_bits = SPI_CPOL | SPI_CPHA; master->mode_bits = SPI_CPOL | SPI_CPHA;
xspi->clk_rate = clk_get_rate(xspi->ref_clk);
/* Set to default valid value */ /* Set to default valid value */
master->max_speed_hz = clk_get_rate(xspi->ref_clk) / 4; master->max_speed_hz = xspi->clk_rate / 4;
xspi->speed_hz = master->max_speed_hz; xspi->speed_hz = master->max_speed_hz;
master->bits_per_word_mask = SPI_BPW_MASK(8); master->bits_per_word_mask = SPI_BPW_MASK(8);

View File

@ -677,8 +677,7 @@ static int npcm_fiu_probe(struct platform_device *pdev)
struct npcm_fiu_spi *fiu; struct npcm_fiu_spi *fiu;
void __iomem *regbase; void __iomem *regbase;
struct resource *res; struct resource *res;
int ret; int id, ret;
int id;
ctrl = devm_spi_alloc_master(dev, sizeof(*fiu)); ctrl = devm_spi_alloc_master(dev, sizeof(*fiu));
if (!ctrl) if (!ctrl)
@ -738,9 +737,9 @@ static int npcm_fiu_probe(struct platform_device *pdev)
ret = devm_spi_register_master(dev, ctrl); ret = devm_spi_register_master(dev, ctrl);
if (ret) if (ret)
return ret; clk_disable_unprepare(fiu->clk);
return 0; return ret;
} }
static int npcm_fiu_remove(struct platform_device *pdev) static int npcm_fiu_remove(struct platform_device *pdev)

View File

@ -102,7 +102,7 @@ static void io_watchdog_func(struct timer_list *t);
/* Some boards misreport power switching/overcurrent */ /* Some boards misreport power switching/overcurrent */
static bool distrust_firmware = true; static bool distrust_firmware;
module_param (distrust_firmware, bool, 0); module_param (distrust_firmware, bool, 0);
MODULE_PARM_DESC (distrust_firmware, MODULE_PARM_DESC (distrust_firmware,
"true to distrust firmware power/overcurrent setup"); "true to distrust firmware power/overcurrent setup");

View File

@ -724,14 +724,15 @@ static long privcmd_ioctl_restrict(struct file *file, void __user *udata)
return 0; return 0;
} }
static long privcmd_ioctl_mmap_resource(struct file *file, void __user *udata) static long privcmd_ioctl_mmap_resource(struct file *file,
struct privcmd_mmap_resource __user *udata)
{ {
struct privcmd_data *data = file->private_data; struct privcmd_data *data = file->private_data;
struct mm_struct *mm = current->mm; struct mm_struct *mm = current->mm;
struct vm_area_struct *vma; struct vm_area_struct *vma;
struct privcmd_mmap_resource kdata; struct privcmd_mmap_resource kdata;
xen_pfn_t *pfns = NULL; xen_pfn_t *pfns = NULL;
struct xen_mem_acquire_resource xdata; struct xen_mem_acquire_resource xdata = { };
int rc; int rc;
if (copy_from_user(&kdata, udata, sizeof(kdata))) if (copy_from_user(&kdata, udata, sizeof(kdata)))
@ -741,6 +742,22 @@ static long privcmd_ioctl_mmap_resource(struct file *file, void __user *udata)
if (data->domid != DOMID_INVALID && data->domid != kdata.dom) if (data->domid != DOMID_INVALID && data->domid != kdata.dom)
return -EPERM; return -EPERM;
/* Both fields must be set or unset */
if (!!kdata.addr != !!kdata.num)
return -EINVAL;
xdata.domid = kdata.dom;
xdata.type = kdata.type;
xdata.id = kdata.id;
if (!kdata.addr && !kdata.num) {
/* Query the size of the resource. */
rc = HYPERVISOR_memory_op(XENMEM_acquire_resource, &xdata);
if (rc)
return rc;
return __put_user(xdata.nr_frames, &udata->num);
}
down_write(&mm->mmap_sem); down_write(&mm->mmap_sem);
vma = find_vma(mm, kdata.addr); vma = find_vma(mm, kdata.addr);
@ -775,10 +792,6 @@ static long privcmd_ioctl_mmap_resource(struct file *file, void __user *udata)
} else } else
vma->vm_private_data = PRIV_VMA_LOCKED; vma->vm_private_data = PRIV_VMA_LOCKED;
memset(&xdata, 0, sizeof(xdata));
xdata.domid = kdata.dom;
xdata.type = kdata.type;
xdata.id = kdata.id;
xdata.frame = kdata.idx; xdata.frame = kdata.idx;
xdata.nr_frames = kdata.num; xdata.nr_frames = kdata.num;
set_xen_guest_handle(xdata.frame_list, pfns); set_xen_guest_handle(xdata.frame_list, pfns);

View File

@ -857,9 +857,14 @@ compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,
if (isdotent(name, namlen)) { if (isdotent(name, namlen)) {
if (namlen == 2) { if (namlen == 2) {
dchild = dget_parent(dparent); dchild = dget_parent(dparent);
/* filesystem root - cannot return filehandle for ".." */ /*
* Don't return filehandle for ".." if we're at
* the filesystem or export root:
*/
if (dchild == dparent) if (dchild == dparent)
goto out; goto out;
if (dparent == exp->ex_path.dentry)
goto out;
} else } else
dchild = dget(dparent); dchild = dget(dparent);
} else } else

View File

@ -12,6 +12,12 @@
#if GCC_VERSION < 40600 #if GCC_VERSION < 40600
# error Sorry, your compiler is too old - please upgrade it. # error Sorry, your compiler is too old - please upgrade it.
#elif defined(CONFIG_ARM64) && GCC_VERSION < 50100
/*
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
* https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk
*/
# error Sorry, your version of GCC is too old - please use 5.1 or newer.
#endif #endif
/* /*

View File

@ -58,6 +58,7 @@ static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregse
} }
#endif #endif
#if defined(CONFIG_UM) || defined(CONFIG_IA64)
/* /*
* These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
* extra segments containing the gate DSO contents. Dumping its * extra segments containing the gate DSO contents. Dumping its
@ -72,5 +73,26 @@ elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset);
extern int extern int
elf_core_write_extra_data(struct coredump_params *cprm); elf_core_write_extra_data(struct coredump_params *cprm);
extern size_t elf_core_extra_data_size(void); extern size_t elf_core_extra_data_size(void);
#else
static inline Elf_Half elf_core_extra_phdrs(void)
{
return 0;
}
static inline int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
{
return 1;
}
static inline int elf_core_write_extra_data(struct coredump_params *cprm)
{
return 1;
}
static inline size_t elf_core_extra_data_size(void)
{
return 0;
}
#endif
#endif /* _LINUX_ELFCORE_H */ #endif /* _LINUX_ELFCORE_H */

View File

@ -1481,6 +1481,11 @@ static inline void skb_mark_not_on_list(struct sk_buff *skb)
skb->next = NULL; skb->next = NULL;
} }
/* Iterate through singly-linked GSO fragments of an skb. */
#define skb_list_walk_safe(first, skb, next_skb) \
for ((skb) = (first), (next_skb) = (skb) ? (skb)->next : NULL; (skb); \
(skb) = (next_skb), (next_skb) = (skb) ? (skb)->next : NULL)
static inline void skb_list_del_init(struct sk_buff *skb) static inline void skb_list_del_init(struct sk_buff *skb)
{ {
__list_del_entry(&skb->list); __list_del_entry(&skb->list);

View File

@ -93,7 +93,6 @@ obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
obj-$(CONFIG_TRACEPOINTS) += tracepoint.o obj-$(CONFIG_TRACEPOINTS) += tracepoint.o
obj-$(CONFIG_LATENCYTOP) += latencytop.o obj-$(CONFIG_LATENCYTOP) += latencytop.o
obj-$(CONFIG_ELFCORE) += elfcore.o
obj-$(CONFIG_FUNCTION_TRACER) += trace/ obj-$(CONFIG_FUNCTION_TRACER) += trace/
obj-$(CONFIG_TRACING) += trace/ obj-$(CONFIG_TRACING) += trace/
obj-$(CONFIG_TRACE_CLOCK) += trace/ obj-$(CONFIG_TRACE_CLOCK) += trace/

View File

@ -1057,12 +1057,13 @@ int __cgroup_bpf_run_filter_setsockopt(struct sock *sk, int *level,
if (ctx.optlen != 0) { if (ctx.optlen != 0) {
*optlen = ctx.optlen; *optlen = ctx.optlen;
*kernel_optval = ctx.optval; *kernel_optval = ctx.optval;
/* export and don't free sockopt buf */
return 0;
} }
} }
out: out:
if (ret) sockopt_free_buf(&ctx);
sockopt_free_buf(&ctx);
return ret; return ret;
} }
EXPORT_SYMBOL(__cgroup_bpf_run_filter_setsockopt); EXPORT_SYMBOL(__cgroup_bpf_run_filter_setsockopt);

View File

@ -105,7 +105,7 @@ BPF_CALL_2(bpf_map_peek_elem, struct bpf_map *, map, void *, value)
} }
const struct bpf_func_proto bpf_map_peek_elem_proto = { const struct bpf_func_proto bpf_map_peek_elem_proto = {
.func = bpf_map_pop_elem, .func = bpf_map_peek_elem,
.gpl_only = false, .gpl_only = false,
.ret_type = RET_INTEGER, .ret_type = RET_INTEGER,
.arg1_type = ARG_CONST_MAP_PTR, .arg1_type = ARG_CONST_MAP_PTR,

View File

@ -1,26 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
#include <linux/elf.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/binfmts.h>
#include <linux/elfcore.h>
Elf_Half __weak elf_core_extra_phdrs(void)
{
return 0;
}
int __weak elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
{
return 1;
}
int __weak elf_core_write_extra_data(struct coredump_params *cprm)
{
return 1;
}
size_t __weak elf_core_extra_data_size(void)
{
return 0;
}

View File

@ -1475,7 +1475,7 @@ struct bpf_prog *__get_filter(struct sock_fprog *fprog, struct sock *sk)
if (copy_from_user(prog->insns, fprog->filter, fsize)) { if (copy_from_user(prog->insns, fprog->filter, fsize)) {
__bpf_prog_free(prog); __bpf_prog_free(prog);
return ERR_PTR(-EFAULT); return ERR_PTR(-EINVAL);
} }
prog->len = fprog->len; prog->len = fprog->len;

View File

@ -496,13 +496,17 @@ EXPORT_SYMBOL(__netdev_alloc_skb);
struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len, struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
gfp_t gfp_mask) gfp_t gfp_mask)
{ {
struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache); struct napi_alloc_cache *nc;
struct sk_buff *skb; struct sk_buff *skb;
void *data; void *data;
len += NET_SKB_PAD + NET_IP_ALIGN; len += NET_SKB_PAD + NET_IP_ALIGN;
if ((len > SKB_WITH_OVERHEAD(PAGE_SIZE)) || /* If requested length is either too small or too big,
* we use kmalloc() for skb->head allocation.
*/
if (len <= SKB_WITH_OVERHEAD(1024) ||
len > SKB_WITH_OVERHEAD(PAGE_SIZE) ||
(gfp_mask & (__GFP_DIRECT_RECLAIM | GFP_DMA))) { (gfp_mask & (__GFP_DIRECT_RECLAIM | GFP_DMA))) {
skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE); skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE);
if (!skb) if (!skb)
@ -510,6 +514,7 @@ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
goto skb_success; goto skb_success;
} }
nc = this_cpu_ptr(&napi_alloc_cache);
len += SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); len += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
len = SKB_DATA_ALIGN(len); len = SKB_DATA_ALIGN(len);

View File

@ -302,7 +302,7 @@ select_by_hash:
i = j = reciprocal_scale(hash, socks); i = j = reciprocal_scale(hash, socks);
while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) { while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) {
i++; i++;
if (i >= reuse->num_socks) if (i >= socks)
i = 0; i = 0;
if (i == j) if (i == j)
goto out; goto out;

View File

@ -1765,6 +1765,8 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
fn = &reply_funcs[dcb->cmd]; fn = &reply_funcs[dcb->cmd];
if (!fn->cb) if (!fn->cb)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (fn->type == RTM_SETDCB && !netlink_capable(skb, CAP_NET_ADMIN))
return -EPERM;
if (!tb[DCB_ATTR_IFNAME]) if (!tb[DCB_ATTR_IFNAME])
return -EINVAL; return -EINVAL;

View File

@ -272,7 +272,6 @@ static int esp_output_udp_encap(struct xfrm_state *x, struct sk_buff *skb, struc
int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp) int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp)
{ {
u8 *tail; u8 *tail;
u8 *vaddr;
int nfrags; int nfrags;
int esph_offset; int esph_offset;
struct page *page; struct page *page;
@ -314,14 +313,10 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *
page = pfrag->page; page = pfrag->page;
get_page(page); get_page(page);
vaddr = kmap_atomic(page); tail = page_address(page) + pfrag->offset;
tail = vaddr + pfrag->offset;
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto); esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
kunmap_atomic(vaddr);
nfrags = skb_shinfo(skb)->nr_frags; nfrags = skb_shinfo(skb)->nr_frags;
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset, __skb_fill_page_desc(skb, nfrags, page, pfrag->offset,

View File

@ -226,7 +226,6 @@ static void esp_output_fill_trailer(u8 *tail, int tfclen, int plen, __u8 proto)
int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp) int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp)
{ {
u8 *tail; u8 *tail;
u8 *vaddr;
int nfrags; int nfrags;
struct page *page; struct page *page;
struct sk_buff *trailer; struct sk_buff *trailer;
@ -259,14 +258,10 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info
page = pfrag->page; page = pfrag->page;
get_page(page); get_page(page);
vaddr = kmap_atomic(page); tail = page_address(page) + pfrag->offset;
tail = vaddr + pfrag->offset;
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto); esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
kunmap_atomic(vaddr);
nfrags = skb_shinfo(skb)->nr_frags; nfrags = skb_shinfo(skb)->nr_frags;
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset, __skb_fill_page_desc(skb, nfrags, page, pfrag->offset,

View File

@ -124,8 +124,43 @@ static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *
return -EINVAL; return -EINVAL;
} }
static int
ip6_finish_output_gso_slowpath_drop(struct net *net, struct sock *sk,
struct sk_buff *skb, unsigned int mtu)
{
struct sk_buff *segs, *nskb;
netdev_features_t features;
int ret = 0;
/* Please see corresponding comment in ip_finish_output_gso
* describing the cases where GSO segment length exceeds the
* egress MTU.
*/
features = netif_skb_features(skb);
segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
if (IS_ERR_OR_NULL(segs)) {
kfree_skb(skb);
return -ENOMEM;
}
consume_skb(skb);
skb_list_walk_safe(segs, segs, nskb) {
int err;
skb_mark_not_on_list(segs);
err = ip6_fragment(net, sk, segs, ip6_finish_output2);
if (err && ret == 0)
ret = err;
}
return ret;
}
static int __ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb) static int __ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb)
{ {
unsigned int mtu;
#if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM) #if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
/* Policy lookup after SNAT yielded a new policy */ /* Policy lookup after SNAT yielded a new policy */
if (skb_dst(skb)->xfrm) { if (skb_dst(skb)->xfrm) {
@ -134,7 +169,11 @@ static int __ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff
} }
#endif #endif
if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) || mtu = ip6_skb_dst_mtu(skb);
if (skb_is_gso(skb) && !skb_gso_validate_network_len(skb, mtu))
return ip6_finish_output_gso_slowpath_drop(net, sk, skb, mtu);
if ((skb->len > mtu && !skb_is_gso(skb)) ||
dst_allfrag(skb_dst(skb)) || dst_allfrag(skb_dst(skb)) ||
(IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size)) (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
return ip6_fragment(net, sk, skb, ip6_finish_output2); return ip6_fragment(net, sk, skb, ip6_finish_output2);

View File

@ -1597,8 +1597,11 @@ static int ipip6_newlink(struct net *src_net, struct net_device *dev,
} }
#ifdef CONFIG_IPV6_SIT_6RD #ifdef CONFIG_IPV6_SIT_6RD
if (ipip6_netlink_6rd_parms(data, &ip6rd)) if (ipip6_netlink_6rd_parms(data, &ip6rd)) {
err = ipip6_tunnel_update_6rd(nt, &ip6rd); err = ipip6_tunnel_update_6rd(nt, &ip6rd);
if (err < 0)
unregister_netdevice_queue(dev, NULL);
}
#endif #endif
return err; return err;

View File

@ -657,7 +657,7 @@ ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx)
if (!skip_hw && tx->key && if (!skip_hw && tx->key &&
tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
info->control.hw_key = &tx->key->conf; info->control.hw_key = &tx->key->conf;
} else if (!ieee80211_is_mgmt(hdr->frame_control) && tx->sta && } else if (ieee80211_is_data_present(hdr->frame_control) && tx->sta &&
test_sta_flag(tx->sta, WLAN_STA_USES_ENCRYPTION)) { test_sta_flag(tx->sta, WLAN_STA_USES_ENCRYPTION)) {
return TX_DROP; return TX_DROP;
} }
@ -3773,7 +3773,7 @@ void __ieee80211_schedule_txq(struct ieee80211_hw *hw,
* get immediately moved to the back of the list on the next * get immediately moved to the back of the list on the next
* call to ieee80211_next_txq(). * call to ieee80211_next_txq().
*/ */
if (txqi->txq.sta && if (txqi->txq.sta && local->airtime_flags &&
wiphy_ext_feature_isset(local->hw.wiphy, wiphy_ext_feature_isset(local->hw.wiphy,
NL80211_EXT_FEATURE_AIRTIME_FAIRNESS)) NL80211_EXT_FEATURE_AIRTIME_FAIRNESS))
list_add(&txqi->schedule_order, list_add(&txqi->schedule_order,

View File

@ -431,7 +431,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
return; return;
} }
if (call->state == RXRPC_CALL_SERVER_RECV_REQUEST) { if (state == RXRPC_CALL_SERVER_RECV_REQUEST) {
unsigned long timo = READ_ONCE(call->next_req_timo); unsigned long timo = READ_ONCE(call->next_req_timo);
unsigned long now, expect_req_by; unsigned long now, expect_req_by;

View File

@ -1110,7 +1110,7 @@ static long rxrpc_read(const struct key *key,
default: /* we have a ticket we can't encode */ default: /* we have a ticket we can't encode */
pr_err("Unsupported key token type (%u)\n", pr_err("Unsupported key token type (%u)\n",
token->security_index); token->security_index);
continue; return -ENOPKG;
} }
_debug("token[%u]: toksize=%u", ntoks, toksize); _debug("token[%u]: toksize=%u", ntoks, toksize);
@ -1225,7 +1225,9 @@ static long rxrpc_read(const struct key *key,
break; break;
default: default:
break; pr_err("Unsupported key token type (%u)\n",
token->security_index);
return -ENOPKG;
} }
ASSERTCMP((unsigned long)xdr - (unsigned long)oldxdr, ==, ASSERTCMP((unsigned long)xdr - (unsigned long)oldxdr, ==,

View File

@ -1319,7 +1319,7 @@ static int __sctp_setsockopt_connectx(struct sock *sk,
kaddrs = memdup_user(addrs, addrs_size); kaddrs = memdup_user(addrs, addrs_size);
if (IS_ERR(kaddrs)) if (IS_ERR(kaddrs))
return PTR_ERR(kaddrs); return PTR_ERR(kaddrs) == -EFAULT ? -EINVAL : PTR_ERR(kaddrs);
/* Allow security module to validate connectx addresses. */ /* Allow security module to validate connectx addresses. */
err = security_sctp_bind_connect(sk, SCTP_SOCKOPT_CONNECTX, err = security_sctp_bind_connect(sk, SCTP_SOCKOPT_CONNECTX,

View File

@ -939,9 +939,7 @@ void tipc_link_reset(struct tipc_link *l)
int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list, int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
struct sk_buff_head *xmitq) struct sk_buff_head *xmitq)
{ {
struct tipc_msg *hdr = buf_msg(skb_peek(list));
unsigned int maxwin = l->window; unsigned int maxwin = l->window;
int imp = msg_importance(hdr);
unsigned int mtu = l->mtu; unsigned int mtu = l->mtu;
u16 ack = l->rcv_nxt - 1; u16 ack = l->rcv_nxt - 1;
u16 seqno = l->snd_nxt; u16 seqno = l->snd_nxt;
@ -950,8 +948,14 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
struct sk_buff_head *backlogq = &l->backlogq; struct sk_buff_head *backlogq = &l->backlogq;
struct sk_buff *skb, *_skb, **tskb; struct sk_buff *skb, *_skb, **tskb;
int pkt_cnt = skb_queue_len(list); int pkt_cnt = skb_queue_len(list);
struct tipc_msg *hdr;
int rc = 0; int rc = 0;
int imp;
if (pkt_cnt <= 0)
return 0;
hdr = buf_msg(skb_peek(list));
if (unlikely(msg_size(hdr) > mtu)) { if (unlikely(msg_size(hdr) > mtu)) {
pr_warn("Too large msg, purging xmit list %d %d %d %d %d!\n", pr_warn("Too large msg, purging xmit list %d %d %d %d %d!\n",
skb_queue_len(list), msg_user(hdr), skb_queue_len(list), msg_user(hdr),
@ -960,6 +964,7 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
return -EMSGSIZE; return -EMSGSIZE;
} }
imp = msg_importance(hdr);
/* Allow oversubscription of one data msg per source at congestion */ /* Allow oversubscription of one data msg per source at congestion */
if (unlikely(l->backlog[imp].len >= l->backlog[imp].limit)) { if (unlikely(l->backlog[imp].len >= l->backlog[imp].limit)) {
if (imp == TIPC_SYSTEM_IMPORTANCE) { if (imp == TIPC_SYSTEM_IMPORTANCE) {