mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-15 19:31:42 +00:00
Add upstream patches
This commit is contained in:
parent
44ceb61427
commit
dc13e7ec4f
4 changed files with 4235 additions and 1 deletions
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.4.88 Kernel Configuration
|
||||
# Linux/arm 5.4.94 Kernel Configuration
|
||||
#
|
||||
|
||||
#
|
||||
|
|
756
patch/kernel/odroidxu4-current/patch-5.4.91-92.patch
Normal file
756
patch/kernel/odroidxu4-current/patch-5.4.91-92.patch
Normal file
|
@ -0,0 +1,756 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index a5edbd4f34145..5bae2206a35e7 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 91
|
||||
+SUBLEVEL = 92
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
||||
index 6988bbf2576f5..9a77b70ad601b 100644
|
||||
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
||||
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
||||
@@ -4790,8 +4790,6 @@ static void mvpp2_phylink_validate(struct phylink_config *config,
|
||||
|
||||
phylink_set(mask, Autoneg);
|
||||
phylink_set_port_modes(mask);
|
||||
- phylink_set(mask, Pause);
|
||||
- phylink_set(mask, Asym_Pause);
|
||||
|
||||
switch (state->interface) {
|
||||
case PHY_INTERFACE_MODE_10GKR:
|
||||
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
|
||||
index 71c90c8a9e943..c3fc1cc4bb2b9 100644
|
||||
--- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
|
||||
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
|
||||
@@ -19,7 +19,7 @@
|
||||
#define MLXSW_THERMAL_ASIC_TEMP_NORM 75000 /* 75C */
|
||||
#define MLXSW_THERMAL_ASIC_TEMP_HIGH 85000 /* 85C */
|
||||
#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_MODULE_TEMP_SHIFT (MLXSW_THERMAL_HYSTERESIS_TEMP * 2)
|
||||
#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)
|
||||
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
|
||||
* defined with four trip points. The critical and emergency
|
||||
* 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_HIGH].temp = crit_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;
|
||||
- else
|
||||
- tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
|
||||
index c692a41e45480..25b6f2ee2beb8 100644
|
||||
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
|
||||
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
|
||||
@@ -564,11 +564,6 @@ static const struct net_device_ops netxen_netdev_ops = {
|
||||
.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,
|
||||
u32 mode)
|
||||
{
|
||||
@@ -664,7 +659,7 @@ static int netxen_setup_intr(struct netxen_adapter *adapter)
|
||||
netxen_initialize_interrupt_registers(adapter);
|
||||
netxen_set_msix_bit(pdev, 0);
|
||||
|
||||
- if (netxen_function_zero(pdev)) {
|
||||
+ if (adapter->portnum == 0) {
|
||||
if (!netxen_setup_msi_interrupts(adapter, num_msix))
|
||||
netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE);
|
||||
else
|
||||
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
index 18c5a9bb6759c..ce5d3e9e5dff4 100644
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
@@ -3739,6 +3739,7 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
int txfifosz = priv->plat->tx_fifo_size;
|
||||
+ const int mtu = new_mtu;
|
||||
|
||||
if (txfifosz == 0)
|
||||
txfifosz = priv->dma_cap.tx_fifo_size;
|
||||
@@ -3756,7 +3757,7 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
|
||||
if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB))
|
||||
return -EINVAL;
|
||||
|
||||
- dev->mtu = new_mtu;
|
||||
+ dev->mtu = mtu;
|
||||
|
||||
netdev_update_features(dev);
|
||||
|
||||
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c
|
||||
index 6fa7a009a24a4..f9b359d4e2939 100644
|
||||
--- a/drivers/net/usb/rndis_host.c
|
||||
+++ b/drivers/net/usb/rndis_host.c
|
||||
@@ -387,7 +387,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
|
||||
reply_len = sizeof *phym;
|
||||
retval = rndis_query(dev, intf, u.buf,
|
||||
RNDIS_OID_GEN_PHYSICAL_MEDIUM,
|
||||
- 0, (void **) &phym, &reply_len);
|
||||
+ reply_len, (void **)&phym, &reply_len);
|
||||
if (retval != 0 || !phym) {
|
||||
/* OID is optional so don't fail here. */
|
||||
phym_unspec = cpu_to_le32(RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED);
|
||||
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
|
||||
index 590a49e847626..418d62e945544 100644
|
||||
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
|
||||
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
|
||||
@@ -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
|
||||
* 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_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
|
||||
* 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)
|
||||
{
|
||||
struct lpfc_vport *vport = pmb->vport;
|
||||
diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
|
||||
index 82a0ee09cbe14..1d0c335b0bf88 100644
|
||||
--- a/drivers/spi/spi-cadence.c
|
||||
+++ b/drivers/spi/spi-cadence.c
|
||||
@@ -115,6 +115,7 @@ struct cdns_spi {
|
||||
void __iomem *regs;
|
||||
struct clk *ref_clk;
|
||||
struct clk *pclk;
|
||||
+ unsigned int clk_rate;
|
||||
u32 speed_hz;
|
||||
const u8 *txbuf;
|
||||
u8 *rxbuf;
|
||||
@@ -250,7 +251,7 @@ static void cdns_spi_config_clock_freq(struct spi_device *spi,
|
||||
u32 ctrl_reg, baud_rate_val;
|
||||
unsigned long frequency;
|
||||
|
||||
- frequency = clk_get_rate(xspi->ref_clk);
|
||||
+ frequency = xspi->clk_rate;
|
||||
|
||||
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->mode_bits = SPI_CPOL | SPI_CPHA;
|
||||
|
||||
+ xspi->clk_rate = clk_get_rate(xspi->ref_clk);
|
||||
/* 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;
|
||||
|
||||
master->bits_per_word_mask = SPI_BPW_MASK(8);
|
||||
diff --git a/drivers/spi/spi-npcm-fiu.c b/drivers/spi/spi-npcm-fiu.c
|
||||
index 5ed7c9e017fb1..1e770d6739050 100644
|
||||
--- a/drivers/spi/spi-npcm-fiu.c
|
||||
+++ b/drivers/spi/spi-npcm-fiu.c
|
||||
@@ -677,8 +677,7 @@ static int npcm_fiu_probe(struct platform_device *pdev)
|
||||
struct npcm_fiu_spi *fiu;
|
||||
void __iomem *regbase;
|
||||
struct resource *res;
|
||||
- int ret;
|
||||
- int id;
|
||||
+ int id, ret;
|
||||
|
||||
ctrl = devm_spi_alloc_master(dev, sizeof(*fiu));
|
||||
if (!ctrl)
|
||||
@@ -738,9 +737,9 @@ static int npcm_fiu_probe(struct platform_device *pdev)
|
||||
|
||||
ret = devm_spi_register_master(dev, ctrl);
|
||||
if (ret)
|
||||
- return ret;
|
||||
+ clk_disable_unprepare(fiu->clk);
|
||||
|
||||
- return 0;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int npcm_fiu_remove(struct platform_device *pdev)
|
||||
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
|
||||
index 5eb62240c7f87..833f51282accc 100644
|
||||
--- a/drivers/usb/host/ohci-hcd.c
|
||||
+++ b/drivers/usb/host/ohci-hcd.c
|
||||
@@ -102,7 +102,7 @@ static void io_watchdog_func(struct timer_list *t);
|
||||
|
||||
|
||||
/* Some boards misreport power switching/overcurrent */
|
||||
-static bool distrust_firmware = true;
|
||||
+static bool distrust_firmware;
|
||||
module_param (distrust_firmware, bool, 0);
|
||||
MODULE_PARM_DESC (distrust_firmware,
|
||||
"true to distrust firmware power/overcurrent setup");
|
||||
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
|
||||
index c6070e70dd73d..9c9422e9fac4d 100644
|
||||
--- a/drivers/xen/privcmd.c
|
||||
+++ b/drivers/xen/privcmd.c
|
||||
@@ -724,14 +724,15 @@ static long privcmd_ioctl_restrict(struct file *file, void __user *udata)
|
||||
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 mm_struct *mm = current->mm;
|
||||
struct vm_area_struct *vma;
|
||||
struct privcmd_mmap_resource kdata;
|
||||
xen_pfn_t *pfns = NULL;
|
||||
- struct xen_mem_acquire_resource xdata;
|
||||
+ struct xen_mem_acquire_resource xdata = { };
|
||||
int rc;
|
||||
|
||||
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)
|
||||
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);
|
||||
|
||||
vma = find_vma(mm, kdata.addr);
|
||||
@@ -775,10 +792,6 @@ static long privcmd_ioctl_mmap_resource(struct file *file, void __user *udata)
|
||||
} else
|
||||
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.nr_frames = kdata.num;
|
||||
set_xen_guest_handle(xdata.frame_list, pfns);
|
||||
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
|
||||
index 86e5658651f10..8f077e66e613f 100644
|
||||
--- a/fs/nfsd/nfs3xdr.c
|
||||
+++ b/fs/nfsd/nfs3xdr.c
|
||||
@@ -857,9 +857,14 @@ compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,
|
||||
if (isdotent(name, namlen)) {
|
||||
if (namlen == 2) {
|
||||
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)
|
||||
goto out;
|
||||
+ if (dparent == exp->ex_path.dentry)
|
||||
+ goto out;
|
||||
} else
|
||||
dchild = dget(dparent);
|
||||
} else
|
||||
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
|
||||
index d8fab3ecf5120..180b52419136f 100644
|
||||
--- a/include/linux/compiler-gcc.h
|
||||
+++ b/include/linux/compiler-gcc.h
|
||||
@@ -12,6 +12,12 @@
|
||||
|
||||
#if GCC_VERSION < 40600
|
||||
# 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
|
||||
|
||||
/*
|
||||
diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h
|
||||
index 4cad0e784b286..b81f9e1d74b0a 100644
|
||||
--- a/include/linux/elfcore.h
|
||||
+++ b/include/linux/elfcore.h
|
||||
@@ -58,6 +58,7 @@ static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregse
|
||||
}
|
||||
#endif
|
||||
|
||||
+#if defined(CONFIG_UM) || defined(CONFIG_IA64)
|
||||
/*
|
||||
* These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
|
||||
* 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
|
||||
elf_core_write_extra_data(struct coredump_params *cprm);
|
||||
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 */
|
||||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
|
||||
index 68139cc2f3ca3..6493c98c86317 100644
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -1480,6 +1480,11 @@ static inline void skb_mark_not_on_list(struct sk_buff *skb)
|
||||
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)
|
||||
{
|
||||
__list_del_entry(&skb->list);
|
||||
diff --git a/kernel/Makefile b/kernel/Makefile
|
||||
index f2cc0d118a0bc..6aef13053a5c4 100644
|
||||
--- a/kernel/Makefile
|
||||
+++ b/kernel/Makefile
|
||||
@@ -93,7 +93,6 @@ obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
|
||||
obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
|
||||
obj-$(CONFIG_TRACEPOINTS) += tracepoint.o
|
||||
obj-$(CONFIG_LATENCYTOP) += latencytop.o
|
||||
-obj-$(CONFIG_ELFCORE) += elfcore.o
|
||||
obj-$(CONFIG_FUNCTION_TRACER) += trace/
|
||||
obj-$(CONFIG_TRACING) += trace/
|
||||
obj-$(CONFIG_TRACE_CLOCK) += trace/
|
||||
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
|
||||
index b701af27a7799..5a8b4dfdb1419 100644
|
||||
--- a/kernel/bpf/cgroup.c
|
||||
+++ b/kernel/bpf/cgroup.c
|
||||
@@ -1057,12 +1057,13 @@ int __cgroup_bpf_run_filter_setsockopt(struct sock *sk, int *level,
|
||||
if (ctx.optlen != 0) {
|
||||
*optlen = ctx.optlen;
|
||||
*kernel_optval = ctx.optval;
|
||||
+ /* export and don't free sockopt buf */
|
||||
+ return 0;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
- if (ret)
|
||||
- sockopt_free_buf(&ctx);
|
||||
+ sockopt_free_buf(&ctx);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(__cgroup_bpf_run_filter_setsockopt);
|
||||
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
|
||||
index 5e28718928cad..a77d2814cac5d 100644
|
||||
--- a/kernel/bpf/helpers.c
|
||||
+++ b/kernel/bpf/helpers.c
|
||||
@@ -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 = {
|
||||
- .func = bpf_map_pop_elem,
|
||||
+ .func = bpf_map_peek_elem,
|
||||
.gpl_only = false,
|
||||
.ret_type = RET_INTEGER,
|
||||
.arg1_type = ARG_CONST_MAP_PTR,
|
||||
diff --git a/kernel/elfcore.c b/kernel/elfcore.c
|
||||
deleted file mode 100644
|
||||
index 57fb4dcff4349..0000000000000
|
||||
--- a/kernel/elfcore.c
|
||||
+++ /dev/null
|
||||
@@ -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;
|
||||
-}
|
||||
diff --git a/net/core/filter.c b/net/core/filter.c
|
||||
index b040b7bf28582..2fa10fdcf6b1d 100644
|
||||
--- a/net/core/filter.c
|
||||
+++ b/net/core/filter.c
|
||||
@@ -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)) {
|
||||
__bpf_prog_free(prog);
|
||||
- return ERR_PTR(-EFAULT);
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
prog->len = fprog->len;
|
||||
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
|
||||
index 49d923c227a21..961cb5a88c958 100644
|
||||
--- a/net/core/skbuff.c
|
||||
+++ b/net/core/skbuff.c
|
||||
@@ -496,13 +496,17 @@ EXPORT_SYMBOL(__netdev_alloc_skb);
|
||||
struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
|
||||
gfp_t gfp_mask)
|
||||
{
|
||||
- struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
|
||||
+ struct napi_alloc_cache *nc;
|
||||
struct sk_buff *skb;
|
||||
void *data;
|
||||
|
||||
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))) {
|
||||
skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE);
|
||||
if (!skb)
|
||||
@@ -510,6 +514,7 @@ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
|
||||
goto skb_success;
|
||||
}
|
||||
|
||||
+ nc = this_cpu_ptr(&napi_alloc_cache);
|
||||
len += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||
len = SKB_DATA_ALIGN(len);
|
||||
|
||||
diff --git a/net/core/sock_reuseport.c b/net/core/sock_reuseport.c
|
||||
index 40829111fe00c..273c921751e49 100644
|
||||
--- a/net/core/sock_reuseport.c
|
||||
+++ b/net/core/sock_reuseport.c
|
||||
@@ -302,7 +302,7 @@ select_by_hash:
|
||||
i = j = reciprocal_scale(hash, socks);
|
||||
while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) {
|
||||
i++;
|
||||
- if (i >= reuse->num_socks)
|
||||
+ if (i >= socks)
|
||||
i = 0;
|
||||
if (i == j)
|
||||
goto out;
|
||||
diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
|
||||
index 0fd1c2aa13615..e9ecbb57df455 100644
|
||||
--- a/net/dcb/dcbnl.c
|
||||
+++ b/net/dcb/dcbnl.c
|
||||
@@ -1765,6 +1765,8 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
fn = &reply_funcs[dcb->cmd];
|
||||
if (!fn->cb)
|
||||
return -EOPNOTSUPP;
|
||||
+ if (fn->type == RTM_SETDCB && !netlink_capable(skb, CAP_NET_ADMIN))
|
||||
+ return -EPERM;
|
||||
|
||||
if (!tb[DCB_ATTR_IFNAME])
|
||||
return -EINVAL;
|
||||
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
|
||||
index 5c967764041f4..00210e55b4cd1 100644
|
||||
--- a/net/ipv4/esp4.c
|
||||
+++ b/net/ipv4/esp4.c
|
||||
@@ -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)
|
||||
{
|
||||
u8 *tail;
|
||||
- u8 *vaddr;
|
||||
int nfrags;
|
||||
int esph_offset;
|
||||
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;
|
||||
get_page(page);
|
||||
|
||||
- vaddr = kmap_atomic(page);
|
||||
-
|
||||
- tail = vaddr + pfrag->offset;
|
||||
+ tail = page_address(page) + pfrag->offset;
|
||||
|
||||
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
|
||||
|
||||
- kunmap_atomic(vaddr);
|
||||
-
|
||||
nfrags = skb_shinfo(skb)->nr_frags;
|
||||
|
||||
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
|
||||
diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c
|
||||
index a3b403ba8f8f0..7a739f16d82b2 100644
|
||||
--- a/net/ipv6/esp6.c
|
||||
+++ b/net/ipv6/esp6.c
|
||||
@@ -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)
|
||||
{
|
||||
u8 *tail;
|
||||
- u8 *vaddr;
|
||||
int nfrags;
|
||||
struct page *page;
|
||||
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;
|
||||
get_page(page);
|
||||
|
||||
- vaddr = kmap_atomic(page);
|
||||
-
|
||||
- tail = vaddr + pfrag->offset;
|
||||
+ tail = page_address(page) + pfrag->offset;
|
||||
|
||||
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
|
||||
|
||||
- kunmap_atomic(vaddr);
|
||||
-
|
||||
nfrags = skb_shinfo(skb)->nr_frags;
|
||||
|
||||
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
|
||||
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
|
||||
index 78d495581d696..7a80c42fcce2f 100644
|
||||
--- a/net/ipv6/ip6_output.c
|
||||
+++ b/net/ipv6/ip6_output.c
|
||||
@@ -124,8 +124,43 @@ static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *
|
||||
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)
|
||||
{
|
||||
+ unsigned int mtu;
|
||||
+
|
||||
#if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
|
||||
/* Policy lookup after SNAT yielded a new policy */
|
||||
if (skb_dst(skb)->xfrm) {
|
||||
@@ -134,7 +169,11 @@ static int __ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff
|
||||
}
|
||||
#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)) ||
|
||||
(IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
|
||||
return ip6_fragment(net, sk, skb, ip6_finish_output2);
|
||||
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
|
||||
index 2872f7a00e863..de4c871787e2f 100644
|
||||
--- a/net/ipv6/sit.c
|
||||
+++ b/net/ipv6/sit.c
|
||||
@@ -1597,8 +1597,11 @@ static int ipip6_newlink(struct net *src_net, struct net_device *dev,
|
||||
}
|
||||
|
||||
#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);
|
||||
+ if (err < 0)
|
||||
+ unregister_netdevice_queue(dev, NULL);
|
||||
+ }
|
||||
#endif
|
||||
|
||||
return err;
|
||||
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
|
||||
index 30a0c7c6224b3..da0e285302f9d 100644
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -657,7 +657,7 @@ ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx)
|
||||
if (!skip_hw && tx->key &&
|
||||
tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
|
||||
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)) {
|
||||
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
|
||||
* call to ieee80211_next_txq().
|
||||
*/
|
||||
- if (txqi->txq.sta &&
|
||||
+ if (txqi->txq.sta && local->airtime_flags &&
|
||||
wiphy_ext_feature_isset(local->hw.wiphy,
|
||||
NL80211_EXT_FEATURE_AIRTIME_FAIRNESS))
|
||||
list_add(&txqi->schedule_order,
|
||||
diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
|
||||
index 6cace43b217ee..916d1f455b218 100644
|
||||
--- a/net/rxrpc/input.c
|
||||
+++ b/net/rxrpc/input.c
|
||||
@@ -431,7 +431,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
|
||||
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 now, expect_req_by;
|
||||
|
||||
diff --git a/net/rxrpc/key.c b/net/rxrpc/key.c
|
||||
index 85a9ff8cd236a..2b26c4d229a5a 100644
|
||||
--- a/net/rxrpc/key.c
|
||||
+++ b/net/rxrpc/key.c
|
||||
@@ -1110,7 +1110,7 @@ static long rxrpc_read(const struct key *key,
|
||||
default: /* we have a ticket we can't encode */
|
||||
pr_err("Unsupported key token type (%u)\n",
|
||||
token->security_index);
|
||||
- continue;
|
||||
+ return -ENOPKG;
|
||||
}
|
||||
|
||||
_debug("token[%u]: toksize=%u", ntoks, toksize);
|
||||
@@ -1225,7 +1225,9 @@ static long rxrpc_read(const struct key *key,
|
||||
break;
|
||||
|
||||
default:
|
||||
- break;
|
||||
+ pr_err("Unsupported key token type (%u)\n",
|
||||
+ token->security_index);
|
||||
+ return -ENOPKG;
|
||||
}
|
||||
|
||||
ASSERTCMP((unsigned long)xdr - (unsigned long)oldxdr, ==,
|
||||
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
|
||||
index 1fcc13f6073ef..41abfff6a6a3d 100644
|
||||
--- a/net/sctp/socket.c
|
||||
+++ b/net/sctp/socket.c
|
||||
@@ -1319,7 +1319,7 @@ static int __sctp_setsockopt_connectx(struct sock *sk,
|
||||
|
||||
kaddrs = memdup_user(addrs, addrs_size);
|
||||
if (IS_ERR(kaddrs))
|
||||
- return PTR_ERR(kaddrs);
|
||||
+ return PTR_ERR(kaddrs) == -EFAULT ? -EINVAL : PTR_ERR(kaddrs);
|
||||
|
||||
/* Allow security module to validate connectx addresses. */
|
||||
err = security_sctp_bind_connect(sk, SCTP_SOCKOPT_CONNECTX,
|
||||
diff --git a/net/tipc/link.c b/net/tipc/link.c
|
||||
index a9d8a81e80cfd..f25010261a9e0 100644
|
||||
--- a/net/tipc/link.c
|
||||
+++ b/net/tipc/link.c
|
||||
@@ -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,
|
||||
struct sk_buff_head *xmitq)
|
||||
{
|
||||
- struct tipc_msg *hdr = buf_msg(skb_peek(list));
|
||||
unsigned int maxwin = l->window;
|
||||
- int imp = msg_importance(hdr);
|
||||
unsigned int mtu = l->mtu;
|
||||
u16 ack = l->rcv_nxt - 1;
|
||||
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 *skb, *_skb, **tskb;
|
||||
int pkt_cnt = skb_queue_len(list);
|
||||
+ struct tipc_msg *hdr;
|
||||
int rc = 0;
|
||||
+ int imp;
|
||||
+
|
||||
+ if (pkt_cnt <= 0)
|
||||
+ return 0;
|
||||
|
||||
+ hdr = buf_msg(skb_peek(list));
|
||||
if (unlikely(msg_size(hdr) > mtu)) {
|
||||
pr_warn("Too large msg, purging xmit list %d %d %d %d %d!\n",
|
||||
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;
|
||||
}
|
||||
|
||||
+ imp = msg_importance(hdr);
|
||||
/* Allow oversubscription of one data msg per source at congestion */
|
||||
if (unlikely(l->backlog[imp].len >= l->backlog[imp].limit)) {
|
||||
if (imp == TIPC_SYSTEM_IMPORTANCE) {
|
2413
patch/kernel/odroidxu4-current/patch-5.4.92-93.patch
Normal file
2413
patch/kernel/odroidxu4-current/patch-5.4.92-93.patch
Normal file
File diff suppressed because it is too large
Load diff
1065
patch/kernel/odroidxu4-current/patch-5.4.93-94.patch
Normal file
1065
patch/kernel/odroidxu4-current/patch-5.4.93-94.patch
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue