Linux 5.4.74
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.74 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/arm64/Makefile | 4 - arch/arm64/kernel/cpu_errata.c | 15 +++ arch/openrisc/include/asm/uaccess.h | 35 +++++--- arch/x86/crypto/crc32c-pcl-intel-asm_64.S | 2 arch/x86/events/amd/ibs.c | 15 +++ arch/x86/pci/intel_mid_pci.c | 1 arch/x86/xen/enlighten_pv.c | 9 ++ drivers/ata/ahci.h | 2 drivers/ata/ahci_mvebu.c | 2 drivers/ata/libahci_platform.c | 2 drivers/ata/sata_rcar.c | 2 drivers/crypto/chelsio/chtls/chtls_cm.c | 29 +++---- drivers/crypto/chelsio/chtls/chtls_io.c | 7 + drivers/infiniband/core/addr.c | 11 +- drivers/misc/cardreader/rtsx_pcr.c | 4 - drivers/misc/cxl/pci.c | 4 - drivers/net/ethernet/broadcom/bnxt/bnxt.c | 45 +++++++---- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c | 56 ++++++-------- drivers/net/ethernet/chelsio/cxgb4/t4_tcb.h | 4 + drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 2 drivers/net/ethernet/ibm/ibmvnic.c | 8 +- drivers/net/ethernet/mellanox/mlxsw/core.c | 2 drivers/net/ethernet/realtek/r8169_main.c | 4 - drivers/net/ethernet/renesas/ravb_main.c | 10 +- drivers/net/gtp.c | 16 ++-- drivers/net/wireless/intersil/p54/p54pci.c | 4 - drivers/phy/marvell/phy-mvebu-a3700-comphy.c | 14 ++- drivers/phy/marvell/phy-mvebu-cp110-comphy.c | 14 ++- drivers/tty/serial/amba-pl011.c | 11 +- drivers/tty/serial/qcom_geni_serial.c | 2 drivers/xen/gntdev.c | 17 +++- fs/efivarfs/super.c | 3 fs/erofs/xattr.c | 2 fs/fuse/dev.c | 28 ++++--- include/linux/mtd/pfow.h | 2 include/linux/pm.h | 2 include/linux/qcom-geni-se.h | 3 include/net/netfilter/nf_tables.h | 6 + include/uapi/linux/bpf.h | 4 - net/core/sock.c | 1 net/ipv4/tcp.c | 2 net/ipv4/tcp_input.c | 3 net/netfilter/nf_tables_api.c | 6 - net/netfilter/nf_tables_offload.c | 4 - net/sched/act_mpls.c | 1 net/sched/sch_netem.c | 9 ++ net/tipc/msg.c | 5 - scripts/setlocalversion | 21 ++++- security/integrity/evm/evm_main.c | 6 + tools/include/uapi/linux/bpf.h | 4 - tools/objtool/orc_gen.c | 33 ++++++-- 53 files changed, 330 insertions(+), 171 deletions(-)
Aleksandr Nogikh (1):
netem: fix zero division in tabledist
Andrew Gabbasov (1):
ravb: Fix bit fields checking in ravb_hwtstamp_get()
Arjun Roy (1):
tcp: Prevent low rmem stalls with SO_RCVLOWAT.
Arnd Bergmann (1):
crypto: x86/crc32c - fix building with clang ias
Christian Eggers (1):
socket: don't clear SOCK_TSTAMP_NEW when SO_TIMESTAMPNS is disabled
Frederic Barrat (1):
cxl: Rework error message for incompatible slots
Gao Xiang (1):
erofs: avoid duplicated permission check for "trusted." xattrs
Geert Uytterhoeven (1):
ata: sata_rcar: Fix DMA boundary mask
Greg Kroah-Hartman (1):
Linux 5.4.74
Grygorii Strashko (1):
PM: runtime: Fix timer_expires data type on 32-bit arches
Guillaume Nault (1):
net/sched: act_mpls: Add softdep on mpls_gso.ko
Gustavo A. R. Silva (1):
mtd: lpddr: Fix bad logic in print_drs_error
Heiner Kallweit (1):
r8169: fix issue with forced threading in combination with shared interrupts
Ido Schimmel (1):
mlxsw: core: Fix memory leak on module removal
Jason Gunthorpe (1):
RDMA/addr: Fix race with netevent_callback()/rdma_addr_cancel()
Jia-Ju Bai (1):
p54: avoid accessing the data mapped to streaming DMA
Josh Poimboeuf (1):
objtool: Support Clang non-section symbols in ORC generation
Juergen Gross (1):
x86/xen: disable Firmware First mode for correctable memory errors
Kim Phillips (1):
arch/x86/amd/ibs: Fix re-arming IBS Fetch
Lijun Pan (1):
ibmvnic: fix ibmvnic_set_mac
Marc Zyngier (2):
arm64: Run ARCH_WORKAROUND_1 enabling code on all CPUs
arm64: Run ARCH_WORKAROUND_2 enabling code on all CPUs
Masahiro Fujiwara (1):
gtp: fix an use-before-init in gtp_newlink()
Michael Chan (1):
bnxt_en: Check abort error state in bnxt_open_nic().
Michael Schaller (1):
efivarfs: Replace invalid slashes with exclamation marks in dentries.
Miklos Szeredi (1):
fuse: fix page dereference after free
Nick Desaulniers (1):
arm64: link with -z norelro regardless of CONFIG_RELOCATABLE
Pali Rohár (2):
ata: ahci: mvebu: Make SATA PHY optional for Armada 3720
phy: marvell: comphy: Convert internal SMCC firmware return codes to errno
Paras Sharma (1):
serial: qcom_geni_serial: To correct QUP Version detection logic
Peter Zijlstra (1):
serial: pl011: Fix lockdep splat when handling magic-sysrq interrupt
Raju Rangoju (1):
cxgb4: set up filter action after rewrites
Randy Dunlap (1):
x86/PCI: Fix intel_mid_pci.c build error when ACPI is not enabled
Rasmus Villemoes (1):
scripts/setlocalversion: make git describe output more reliable
Ricky Wu (1):
misc: rtsx: do not setting OC_POWER_DOWN reg in rtsx_pci_init_ocp()
Roberto Sassu (1):
evm: Check size of security.evm before using it
Saeed Mirzamohammadi (1):
netfilter: nftables_offload: KASAN slab-out-of-bounds Read in nft_flow_rule_create
Song Liu (1):
bpf: Fix comment for helper bpf_current_task_under_cgroup()
Souptick Joarder (1):
xen/gntdev.c: Mark pages as dirty
Stafford Horne (1):
openrisc: Fix issue with get_user for 64-bit values
Tung Nguyen (1):
tipc: fix memory leak caused by tipc_buf_append()
Vasundhara Volam (4):
bnxt_en: Send HWRM_FUNC_RESET fw command unconditionally.
bnxt_en: Re-write PCI BARs after PCI fatal error.
bnxt_en: Fix regression in workqueue cleanup logic in bnxt_remove_one().
bnxt_en: Invoke cancel_delayed_work_sync() for PFs also.
Vinay Kumar Yadav (3):
chelsio/chtls: fix deadlock issue chelsio/chtls: fix memory leaks in CPL handlers chelsio/chtls: fix tls record info to user
Zenghui Yu (1):
net: hns3: Clear the CMDQ registers before unmapping BAR region
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 73 +SUBLEVEL = 74 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm64/Makefile +2 -2
@@ -10,7 +10,7 @@ # # Copyright (C) 1995-2001 by Russell King -LDFLAGS_vmlinux :=--no-undefined -X +LDFLAGS_vmlinux :=--no-undefined -X -z norelro CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET) GZFLAGS :=-9
@@ -18,7 +18,7 @@ ifeq ($(CONFIG_RELOCATABLE), y) # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour # for relative relocs, since this leads to better Image compression # with the relocation offsets always being zero. -LDFLAGS_vmlinux += -shared -Bsymbolic -z notext -z norelro \ +LDFLAGS_vmlinux += -shared -Bsymbolic -z notext \ $(call ld-option, --no-apply-dynamic-relocs) endif
arch/arm64/kernel/cpu_errata.c +15 -0
@@ -492,6 +492,12 @@ static bool has_ssbd_mitigation(const struct arm64_cpu_capabilities *entry,return required; } +static void cpu_enable_ssbd_mitigation (const struct arm64_cpu_capabilities *cap) +{ +if (ssbd_state !=ARM64_SSBD_FORCE_DISABLE ) + cap->matches (cap,SCOPE_LOCAL_CPU ); +} +/* known invulnerable cores */ static const struct midr_range arm64_ssb_cpus[] = {MIDR_ALL_VERSIONS (MIDR_CORTEX_A35 ),
@@ -635,6 +641,12 @@ check_branch_predictor(const struct arm64_cpu_capabilities *entry, int scope)return (need_wa >0 ); } +static void +cpu_enable_branch_predictor_hardening (const struct arm64_cpu_capabilities *cap) +{ + cap->matches (cap,SCOPE_LOCAL_CPU ); +} +static const __maybe_unused struct midr_range tx2_family_cpus[] = {MIDR_ALL_VERSIONS (MIDR_BRCM_VULCAN ),MIDR_ALL_VERSIONS (MIDR_CAVIUM_THUNDERX2 ),
@@ -894,9 +906,11 @@ const struct arm64_cpu_capabilities arm64_errata[] = { },#endif { + .desc = "Branch predictor hardening", .capability = ARM64_HARDEN_BRANCH_PREDICTOR, .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, .matches = check_branch_predictor, + .cpu_enable = cpu_enable_branch_predictor_hardening, }, #ifdef CONFIG_HARDEN_EL2_VECTORS {
@@ -910,6 +924,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { .capability = ARM64_SSBD, .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, .matches = has_ssbd_mitigation, + .cpu_enable = cpu_enable_ssbd_mitigation, .midr_range_list = arm64_ssb_cpus, },#ifdef CONFIG_ARM64_ERRATUM_1418040
arch/openrisc/include/asm/uaccess.h +22 -13
@@ -164,19 +164,19 @@ struct __large_struct {#define __get_user_nocheck (x, ptr, size) \ ({ \ - long __gu_err, __gu_val; \ - __get_user_size(__gu_val, (ptr), (size), __gu_err); \ - (x) = (__force __typeof__(*(ptr)))__gu_val; \ + long __gu_err; \ + __get_user_size((x), (ptr), (size), __gu_err); \ __gu_err; \ })#define __get_user_check (x, ptr, size) \ ({ \ - long __gu_err = -EFAULT, __gu_val = 0; \ - const __typeof__(*(ptr)) * __gu_addr = (ptr); \ - if (access_ok(__gu_addr, size)) \ - __get_user_size(__gu_val, __gu_addr, (size), __gu_err); \ - (x) = (__force __typeof__(*(ptr)))__gu_val; \ + long __gu_err = -EFAULT; \ + const __typeof__(*(ptr)) *__gu_addr = (ptr); \ + if (access_ok(__gu_addr, size)) \ + __get_user_size((x), __gu_addr, (size), __gu_err); \ + else \ + (x) = (__typeof__(*(ptr))) 0; \ __gu_err; \ })
@@ -190,11 +190,13 @@ do { \case 2 :__get_user_asm (x, ptr, retval,"l.lhz" );break ; \case 4 :__get_user_asm (x, ptr, retval,"l.lwz" );break ; \case 8 :__get_user_asm2 (x, ptr, retval);break ; \ -default : (x) =__get_user_bad (); \ +default : (x) = (__typeof__ (*(ptr )))__get_user_bad (); \ } \ } while (0)#define __get_user_asm (x, addr, err, op) \ +{ \ + unsigned long __gu_tmp; \ __asm__ __volatile__( \ "1: "op" %1,0(%2)\n" \ "2:\n" \
@@ -208,10 +210,14 @@ do { \ " .align 2\n" \ " .long 1b,3b\n" \ ".previous" \ - : "=r"(err), "=r"(x) \ - : "r"(addr), "i"(-EFAULT), "0"(err)) + : "=r"(err), "=r"(__gu_tmp) \ + : "r"(addr), "i"(-EFAULT), "0"(err)); \ + (x) = (__typeof__ (*(addr )))__gu_tmp; \ +}#define __get_user_asm2 (x, addr, err) \ +{ \ + unsigned long long __gu_tmp; \ __asm__ __volatile__( \ "1: l.lwz %1,0(%2)\n" \ "2: l.lwz %H1,4(%2)\n" \
@@ -228,8 +234,11 @@ do { \ " .long 1b,4b\n" \ " .long 2b,4b\n" \ ".previous" \ - : "=r"(err), "=&r"(x) \ - : "r"(addr), "i"(-EFAULT), "0"(err)) + : "=r"(err), "=&r"(__gu_tmp) \ + : "r"(addr), "i"(-EFAULT), "0"(err)); \ + (x) = (__typeof__ (*(addr )))( \ + (__typeof__((x)-(x)))__gu_tmp); \ +}/* more complex routines */
arch/x86/crypto/crc32c-pcl-intel-asm_64.S +1 -1
@@ -170,7 +170,7 @@ continue_block: ## branch into array lea jump_table(%rip), bufp - movzxw (bufp, %rax, 2), len + movzwq (bufp, %rax, 2), len lea crc_array(%rip), bufp lea (bufp, len, 1), bufp JMP_NOSPEC bufp
arch/x86/events/amd/ibs.c +14 -1
@@ -89,6 +89,7 @@ struct perf_ibs {u64 max_period;unsigned long offset_mask[1 ];int offset_max; + unsigned int fetch_count_reset_broken : 1;struct cpu_perf_ibs __percpu *pcpu;struct attribute **format_attrs;
@@ -363,7 +364,12 @@ perf_ibs_event_update(struct perf_ibs *perf_ibs, struct perf_event *event,static inline void perf_ibs_enable_event (struct perf_ibs *perf_ibs,struct hw_perf_event *hwc,u64 config) { -wrmsrl (hwc->config_base, hwc->config | config | perf_ibs->enable_mask); +u64 tmp = hwc->config | config; + +if (perf_ibs->fetch_count_reset_broken) +wrmsrl (hwc->config_base, tmp & ~perf_ibs->enable_mask); + +wrmsrl (hwc->config_base, tmp | perf_ibs->enable_mask); }/*
@@ -733,6 +739,13 @@ static __init void perf_event_ibs_init(void) {struct attribute **attr = ibs_op_format_attrs; +/* +* Some chips fail to reset the fetch count when it is written; instead +* they need a 0-1 transition of IbsFetchEn. +*/ +if (boot_cpu_data.x86 >=0x16 && boot_cpu_data.x86 <=0x18 ) + perf_ibs_fetch.fetch_count_reset_broken =1 ; +perf_ibs_pmu_init (&perf_ibs_fetch,"ibs_fetch" );if (ibs_caps &IBS_CAPS_OPCNT ) {
arch/x86/pci/intel_mid_pci.c +1 -0
@@ -33,6 +33,7 @@#include <asm/hw_irq.h> #include <asm/io_apic.h> #include <asm/intel-mid.h> +#include <asm/acpi.h> #define PCIE_CAP_OFFSET 0x100
arch/x86/xen/enlighten_pv.c +9 -0
@@ -1382,6 +1382,15 @@ asmlinkage __visible void __init xen_start_kernel(void) x86_init.mpparse.get_smp_config = x86_init_uint_noop;xen_boot_params_init_edd (); + +#ifdef CONFIG_ACPI +/* +* Disable selecting "Firmware First mode" for correctable +* memory errors, as this is the duty of the hypervisor to +* decide. +*/ + acpi_disable_cmcff =1 ; +#endif }if (!boot_params.screen_info.orig_video_isVGA)
drivers/ata/ahci.h +2 -0
@@ -240,6 +240,8 @@ enum {as default lpm_policy */ AHCI_HFLAG_SUSPEND_PHYS = (1 <<26 ),/* handle PHYs during suspend/resume */ + AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = (1 << 27), /* ignore -EOPNOTSUPP +from phy_power_on() */ /* ap->flags bits */
drivers/ata/ahci_mvebu.c +1 -1
@@ -227,7 +227,7 @@ static const struct ahci_mvebu_plat_data ahci_mvebu_armada_380_plat_data = {static const struct ahci_mvebu_plat_data ahci_mvebu_armada_3700_plat_data = { .plat_config = ahci_mvebu_armada_3700_config, - .flags =AHCI_HFLAG_SUSPEND_PHYS , + .flags =AHCI_HFLAG_SUSPEND_PHYS |AHCI_HFLAG_IGN_NOTSUPP_POWER_ON , };static const struct of_device_id ahci_mvebu_of_match[] = {
drivers/ata/libahci_platform.c +1 -1
@@ -59,7 +59,7 @@ int ahci_platform_enable_phys(struct ahci_host_priv *hpriv) } rc =phy_power_on (hpriv->phys[i]); -if (rc) { +if (rc && !(rc == -EOPNOTSUPP && (hpriv->flags &AHCI_HFLAG_IGN_NOTSUPP_POWER_ON ))) {phy_exit (hpriv->phys[i]); goto disable_phys; }
drivers/ata/sata_rcar.c +1 -1
@@ -120,7 +120,7 @@/* Descriptor table word 0 bit (when DTA32M = 1) */ #define SATA_RCAR_DTEND BIT(0) -#define SATA_RCAR_DMA_BOUNDARY 0x1FFFFFFEUL +#define SATA_RCAR_DMA_BOUNDARY 0x1FFFFFFFUL/* Gen2 Physical Layer Control Registers */ #define RCAR_GEN2_PHY_CTL1_REG 0x1704
drivers/crypto/chelsio/chtls/chtls_cm.c +12 -17
@@ -692,14 +692,13 @@ static int chtls_pass_open_rpl(struct chtls_dev *cdev, struct sk_buff *skb)if (rpl->status !=CPL_ERR_NONE ) {pr_info ("Unexpected PASS_OPEN_RPL status %u for STID %u\n" , rpl->status, stid); -return CPL_RET_BUF_DONE ; + }else { +cxgb4_free_stid (cdev->tids, stid, listen_ctx->lsk->sk_family); +sock_put (listen_ctx->lsk); +kfree (listen_ctx); +module_put (THIS_MODULE ); } -cxgb4_free_stid (cdev->tids, stid, listen_ctx->lsk->sk_family); -sock_put (listen_ctx->lsk); -kfree (listen_ctx); -module_put (THIS_MODULE ); - -return 0 ; +return CPL_RET_BUF_DONE ; }static int chtls_close_listsrv_rpl (struct chtls_dev *cdev,struct sk_buff *skb)
@@ -716,15 +715,13 @@ static int chtls_close_listsrv_rpl(struct chtls_dev *cdev, struct sk_buff *skb)if (rpl->status !=CPL_ERR_NONE ) {pr_info ("Unexpected CLOSE_LISTSRV_RPL status %u for STID %u\n" , rpl->status, stid); -return CPL_RET_BUF_DONE ; + }else { +cxgb4_free_stid (cdev->tids, stid, listen_ctx->lsk->sk_family); +sock_put (listen_ctx->lsk); +kfree (listen_ctx); +module_put (THIS_MODULE ); } - -cxgb4_free_stid (cdev->tids, stid, listen_ctx->lsk->sk_family); -sock_put (listen_ctx->lsk); -kfree (listen_ctx); -module_put (THIS_MODULE ); - -return 0 ; +return CPL_RET_BUF_DONE ; }static void chtls_purge_wr_queue (struct sock *sk)
@@ -1369,7 +1366,6 @@ static void add_to_reap_list(struct sock *sk)struct chtls_sock *csk = sk->sk_user_data;local_bh_disable (); -bh_lock_sock (sk);release_tcp_port (sk);/* release the port immediately */ spin_lock (&reap_list_lock);
@@ -1378,7 +1374,6 @@ static void add_to_reap_list(struct sock *sk)if (!csk->passive_reap_next)schedule_work (&reap_task);spin_unlock (&reap_list_lock); -bh_unlock_sock (sk);local_bh_enable (); }
drivers/crypto/chelsio/chtls/chtls_io.c +5 -2
@@ -1537,6 +1537,7 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, tp->urg_data =0 ;if ((avail + offset) >= skb->len) { +struct sk_buff *next_skb;if (ULP_SKB_CB (skb)->flags &ULPCB_FLAG_TLS_HDR ) { tp->copied_seq += skb->len; hws->rcvpld = skb->hdr_len;
@@ -1546,8 +1547,10 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,chtls_free_skb (sk, skb); buffers_freed++; hws->copied_seq =0 ; -if (copied >= target && - !skb_peek (&sk->sk_receive_queue)) + next_skb =skb_peek (&sk->sk_receive_queue); +if (copied >= target && !next_skb) +break ; +if (ULP_SKB_CB (next_skb)->flags &ULPCB_FLAG_TLS_HDR )break ; } }while (len >0 );
drivers/infiniband/core/addr.c +5 -6
@@ -645,13 +645,12 @@ static void process_one_req(struct work_struct *_work) req->callback =NULL ;spin_lock_bh (&lock); +/* +* Although the work will normally have been canceled by the workqueue, +* it can still be requeued as long as it is on the req_list. +*/ +cancel_delayed_work (&req->work);if (!list_empty (&req->list)) { -/* -* Although the work will normally have been canceled by the -* workqueue, it can still be requeued as long as it is on the -* req_list. -*/ -cancel_delayed_work (&req->work);list_del_init (&req->list);kfree (req); }
drivers/misc/cardreader/rtsx_pcr.c +0 -4
@@ -1189,10 +1189,6 @@ void rtsx_pci_init_ocp(struct rtsx_pcr *pcr)rtsx_pci_write_register (pcr,REG_OCPGLITCH ,SD_OCP_GLITCH_MASK , pcr->hw_param.ocp_glitch);rtsx_pci_enable_ocp (pcr); - }else { -/* OC power down */ -rtsx_pci_write_register (pcr,FPDCTL ,OC_POWER_DOWN , -OC_POWER_DOWN ); } } }
drivers/misc/cxl/pci.c +2 -2
@@ -393,8 +393,8 @@ int cxl_calc_capp_routing(struct pci_dev *dev, u64 *chipid, *capp_unit_id =get_capp_unit_id (np, *phb_index);of_node_put (np);if (!*capp_unit_id) { -pr_err ("cxl: invalid capp unit id (phb_index: %d)\n" , - *phb_index); +pr_err ("cxl: No capp unit found for PHB[%lld,%d]. Make sure the adapter is on a capi-compatible slot\n" , + *chipid, *phb_index);return -ENODEV ; }
drivers/net/ethernet/broadcom/bnxt/bnxt.c +29 -16
91 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnxt/bnxt.h +1 -0
@@ -1627,6 +1627,7 @@ struct bnxt {#define BNXT_STATE_IN_FW_RESET 4#define BNXT_STATE_ABORT_ERR 5#define BNXT_STATE_FW_FATAL_COND 6 +#define BNXT_STATE_PCI_CHANNEL_IO_FROZEN 8#define BNXT_NO_FW_ACCESS (bp) \ (test_bit(BNXT_STATE_FW_FATAL_COND, &(bp)->state) || \
drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c +27 -29
103 lines not on this page · raw message
drivers/net/ethernet/chelsio/cxgb4/t4_tcb.h +4 -0
@@ -50,6 +50,10 @@#define TCB_RQ_START_M 0x3ffffffULL#define TCB_RQ_START_V (x) ((x) << TCB_RQ_START_S) +#define TF_DROP_S 22 +#define TF_DIRECT_STEER_S 23 +#define TF_LPBK_S 59 +#define TF_CCTRL_ECE_S 60#define TF_CCTRL_CWR_S 61#define TF_CCTRL_RFR_S 62
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +1 -1
@@ -2782,8 +2782,8 @@ static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev)hclgevf_uninit_msi (hdev); } -hclgevf_pci_uninit (hdev);hclgevf_cmd_uninit (hdev); +hclgevf_pci_uninit (hdev); }static int hclgevf_init_ae_dev (struct hnae3_ae_dev *ae_dev)
drivers/net/ethernet/ibm/ibmvnic.c +6 -2
@@ -1735,9 +1735,13 @@ static int ibmvnic_set_mac(struct net_device *netdev, void *p)int rc; rc =0 ; -ether_addr_copy (adapter->mac_addr, addr->sa_data); -if (adapter->state !=VNIC_PROBED ) +if (!is_valid_ether_addr (addr->sa_data)) +return -EADDRNOTAVAIL ; + +if (adapter->state !=VNIC_PROBED ) { +ether_addr_copy (adapter->mac_addr, addr->sa_data); rc =__ibmvnic_set_mac (netdev, addr->sa_data); + }return rc; }
drivers/net/ethernet/mellanox/mlxsw/core.c +2 -0
@@ -1281,6 +1281,8 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core,if (!reload)devlink_resources_unregister (devlink,NULL ); mlxsw_core->bus->fini (mlxsw_core->bus_priv); +if (!reload) +devlink_free (devlink);return ;
drivers/net/ethernet/realtek/r8169_main.c +2 -2
@@ -6264,7 +6264,7 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance) }rtl_irq_disable (tp); -napi_schedule_irqoff (&tp->napi); +napi_schedule (&tp->napi); out:rtl_ack_events (tp, status);
@@ -6470,7 +6470,7 @@ static int rtl_open(struct net_device *dev)rtl_request_firmware (tp); retval =request_irq (pci_irq_vector (pdev,0 ), rtl8169_interrupt, -IRQF_NO_THREAD |IRQF_SHARED , dev->name, tp); +IRQF_SHARED , dev->name, tp);if (retval <0 ) goto err_release_fw_2;
drivers/net/ethernet/renesas/ravb_main.c +7 -3
@@ -1741,12 +1741,16 @@ static int ravb_hwtstamp_get(struct net_device *ndev, struct ifreq *req) config.flags =0 ; config.tx_type = priv->tstamp_tx_ctrl ?HWTSTAMP_TX_ON :HWTSTAMP_TX_OFF ; -if (priv->tstamp_rx_ctrl &RAVB_RXTSTAMP_TYPE_V2_L2_EVENT ) +switch (priv->tstamp_rx_ctrl &RAVB_RXTSTAMP_TYPE ) { +case RAVB_RXTSTAMP_TYPE_V2_L2_EVENT : config.rx_filter =HWTSTAMP_FILTER_PTP_V2_L2_EVENT ; -else if (priv->tstamp_rx_ctrl &RAVB_RXTSTAMP_TYPE_ALL ) +break ; +case RAVB_RXTSTAMP_TYPE_ALL : config.rx_filter =HWTSTAMP_FILTER_ALL ; -else +break ; +default : config.rx_filter =HWTSTAMP_FILTER_NONE ; + }return copy_to_user (req->ifr_data, &config,sizeof (config)) ? -EFAULT :0 ;
drivers/net/gtp.c +8 -8
@@ -663,10 +663,6 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev, gtp =netdev_priv (dev); - err =gtp_encap_enable (gtp, data); -if (err <0 ) -return err; -if (!data[IFLA_GTP_PDP_HASHSIZE ]) { hashsize =1024 ; }else {
@@ -677,12 +673,16 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev, err =gtp_hashtable_new (gtp, hashsize);if (err <0 ) - goto out_encap; +return err; + + err =gtp_encap_enable (gtp, data); +if (err <0 ) + goto out_hashtable; err =register_netdevice (dev);if (err <0 ) {netdev_dbg (dev,"failed to register new netdev %d\n" , err); - goto out_hashtable; + goto out_encap; } gn =net_generic (dev_net (dev), gtp_net_id);
@@ -693,11 +693,11 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,return 0 ; +out_encap: +gtp_encap_disable (gtp); out_hashtable:kfree (gtp->addr_hash);kfree (gtp->tid_hash); -out_encap: -gtp_encap_disable (gtp);return err; }
drivers/net/wireless/intersil/p54/p54pci.c +3 -1
@@ -329,10 +329,12 @@ static void p54p_tx(struct ieee80211_hw *dev, struct sk_buff *skb)struct p54p_desc *desc;dma_addr_t mapping;u32 idx, i; +__le32 device_addr;spin_lock_irqsave (&priv->lock, flags); idx =le32_to_cpu (ring_control->host_idx[1 ]); i = idx %ARRAY_SIZE (ring_control->tx_data); + device_addr = ((struct p54_hdr *)skb->data)->req_id; mapping =pci_map_single (priv->pdev, skb->data, skb->len,PCI_DMA_TODEVICE );
@@ -346,7 +348,7 @@ static void p54p_tx(struct ieee80211_hw *dev, struct sk_buff *skb) desc = &ring_control->tx_data[i]; desc->host_addr =cpu_to_le32 (mapping); - desc->device_addr = ((struct p54_hdr *)skb->data)->req_id; + desc->device_addr = device_addr; desc->len =cpu_to_le16 (skb->len); desc->flags =0 ;
drivers/phy/marvell/phy-mvebu-a3700-comphy.c +11 -3
@@ -26,7 +26,6 @@#define COMPHY_SIP_POWER_ON 0x82000001#define COMPHY_SIP_POWER_OFF 0x82000002#define COMPHY_SIP_PLL_LOCK 0x82000003 -#define COMPHY_FW_NOT_SUPPORTED (-1)#define COMPHY_FW_MODE_SATA 0x1#define COMPHY_FW_MODE_SGMII 0x2
@@ -112,10 +111,19 @@ static int mvebu_a3700_comphy_smc(unsigned long function, unsigned long lane, unsigned long mode) {struct arm_smccc_res res; +s32 ret;arm_smccc_smc (function, lane, mode,0 ,0 ,0 ,0 ,0 , &res); + ret = res.a0; -return res.a0; +switch (ret) { +case SMCCC_RET_SUCCESS : +return 0 ; +case SMCCC_RET_NOT_SUPPORTED : +return -EOPNOTSUPP ; +default : +return -EINVAL ; + } } static int mvebu_a3700_comphy_get_fw_mode(int lane, int port,
@@ -220,7 +228,7 @@ static int mvebu_a3700_comphy_power_on(struct phy *phy) } ret =mvebu_a3700_comphy_smc (COMPHY_SIP_POWER_ON , lane->id, fw_param); -if (ret ==COMPHY_FW_NOT_SUPPORTED ) +if (ret == -EOPNOTSUPP )dev_err (lane->dev,"unsupported SMC call, try updating your firmware\n" );
drivers/phy/marvell/phy-mvebu-cp110-comphy.c +11 -3
@@ -123,7 +123,6 @@#define COMPHY_SIP_POWER_ON 0x82000001#define COMPHY_SIP_POWER_OFF 0x82000002 -#define COMPHY_FW_NOT_SUPPORTED (-1)/* * A lane is described by the following bitfields:
@@ -273,10 +272,19 @@ static int mvebu_comphy_smc(unsigned long function, unsigned long phys, unsigned long lane, unsigned long mode) {struct arm_smccc_res res; +s32 ret;arm_smccc_smc (function, phys, lane, mode,0 ,0 ,0 ,0 , &res); + ret = res.a0; -return res.a0; +switch (ret) { +case SMCCC_RET_SUCCESS : +return 0 ; +case SMCCC_RET_NOT_SUPPORTED : +return -EOPNOTSUPP ; +default : +return -EINVAL ; + } } static int mvebu_comphy_get_mode(bool fw_mode, int lane, int port,
@@ -819,7 +827,7 @@ static int mvebu_comphy_power_on(struct phy *phy)if (!ret)return ret; -if (ret ==COMPHY_FW_NOT_SUPPORTED ) +if (ret == -EOPNOTSUPP )dev_err (priv->dev,"unsupported SMC call, try updating your firmware\n" );
drivers/tty/serial/amba-pl011.c +7 -4
@@ -313,8 +313,9 @@ static void pl011_write(unsigned int val, const struct uart_amba_port *uap,*/ static int pl011_fifo_to_tty (struct uart_amba_port *uap) { -u16 status;unsigned int ch, flag, fifotaken; +int sysrq; +u16 status;for (fifotaken =0 ; fifotaken !=256 ; fifotaken++) { status =pl011_read (uap,REG_FR );
@@ -349,10 +350,12 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) flag =TTY_FRAME ; } -if (uart_handle_sysrq_char (&uap->port, ch &255 )) -continue ; +spin_unlock (&uap->port.lock); + sysrq =uart_handle_sysrq_char (&uap->port, ch &255 ); +spin_lock (&uap->port.lock); -uart_insert_char (&uap->port, ch,UART011_DR_OE , ch, flag); +if (!sysrq) +uart_insert_char (&uap->port, ch,UART011_DR_OE , ch, flag); }return fifotaken;
drivers/tty/serial/qcom_geni_serial.c +1 -1
@@ -970,7 +970,7 @@ static void qcom_geni_serial_set_termios(struct uart_port *uport, sampling_rate =UART_OVERSAMPLING ;/* Sampling rate is halved for IP versions >= 2.5 */ ver =geni_se_get_qup_hw_version (&port->se); -if (GENI_SE_VERSION_MAJOR (ver) >=2 &&GENI_SE_VERSION_MINOR (ver) >=5 ) +if (ver >=QUP_SE_VERSION_2_5 ) sampling_rate /=2 ; clk_rate =get_clk_div_rate (baud, sampling_rate, &clk_div);
drivers/xen/gntdev.c +12 -5
@@ -831,17 +831,18 @@ struct gntdev_copy_batch {s16 __user *status[GNTDEV_COPY_BATCH ];unsigned int nr_ops;unsigned int nr_pages; +bool writeable; };static int gntdev_get_page (struct gntdev_copy_batch *batch,void __user *virt, -bool writeable,unsigned long *gfn) +unsigned long *gfn) {unsigned long addr = (unsigned long )virt;struct page *page;unsigned long xen_pfn;int ret; - ret =get_user_pages_fast (addr,1 , writeable ?FOLL_WRITE :0 , &page); + ret =get_user_pages_fast (addr,1 , batch->writeable ?FOLL_WRITE :0 , &page);if (ret <0 )return ret;
@@ -857,9 +858,13 @@ static void gntdev_put_pages(struct gntdev_copy_batch *batch) {unsigned int i; -for (i =0 ; i < batch->nr_pages; i++) +for (i =0 ; i < batch->nr_pages; i++) { +if (batch->writeable && !PageDirty (batch->pages[i])) +set_page_dirty_lock (batch->pages[i]);put_page (batch->pages[i]); + } batch->nr_pages =0 ; + batch->writeable = false; }static int gntdev_copy (struct gntdev_copy_batch *batch)
@@ -948,8 +953,9 @@ static int gntdev_grant_copy_seg(struct gntdev_copy_batch *batch, virt = seg->source.virt + copied; off = (unsigned long )virt & ~XEN_PAGE_MASK ; len =min (len, (size_t )XEN_PAGE_SIZE - off); + batch->writeable = false; - ret =gntdev_get_page (batch, virt, false, &gfn); + ret =gntdev_get_page (batch, virt, &gfn);if (ret <0 )return ret;
@@ -967,8 +973,9 @@ static int gntdev_grant_copy_seg(struct gntdev_copy_batch *batch, virt = seg->dest.virt + copied; off = (unsigned long )virt & ~XEN_PAGE_MASK ; len =min (len, (size_t )XEN_PAGE_SIZE - off); + batch->writeable = true; - ret =gntdev_get_page (batch, virt, true, &gfn); + ret =gntdev_get_page (batch, virt, &gfn);if (ret <0 )return ret;
fs/efivarfs/super.c +3 -0
@@ -141,6 +141,9 @@ static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor, name[len +EFI_VARIABLE_GUID_LEN +1 ] ='\0' ; +/* replace invalid slashes like kobject_set_name_vargs does for /sys/firmware/efi/vars. */ +strreplace (name,'/' ,'!' ); + inode =efivarfs_get_inode (sb,d_inode (root),S_IFREG |0644 ,0 , is_removable);if (!inode)
fs/erofs/xattr.c +0 -2
@@ -473,8 +473,6 @@ static int erofs_xattr_generic_get(const struct xattr_handler *handler,return -EOPNOTSUPP ;break ;case EROFS_XATTR_INDEX_TRUSTED : -if (!capable (CAP_SYS_ADMIN )) -return -EPERM ;break ;case EROFS_XATTR_INDEX_SECURITY :break ;
fs/fuse/dev.c +18 -10
@@ -786,15 +786,16 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)struct page *newpage;struct pipe_buffer *buf = cs->pipebufs; +get_page (oldpage); err =unlock_request (cs->req);if (err) -return err; + goto out_put_old;fuse_copy_finish (cs); err =pipe_buf_confirm (cs->pipe, buf);if (err) -return err; + goto out_put_old;BUG_ON (!cs->nr_segs); cs->currbuf = buf;
@@ -834,7 +835,7 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep) err =replace_page_cache_page (oldpage, newpage,GFP_KERNEL );if (err) {unlock_page (newpage); -return err; + goto out_put_old; }get_page (newpage);
@@ -853,14 +854,19 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)if (err) {unlock_page (newpage);put_page (newpage); -return err; + goto out_put_old; }unlock_page (oldpage); +/* Drop ref for ap->pages[] array */ put_page (oldpage); cs->len =0 ; -return 0 ; + err =0 ; +out_put_old: +/* Drop ref obtained in this function */ +put_page (oldpage); +return err; out_fallback_unlock:unlock_page (newpage);
@@ -869,10 +875,10 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep) cs->offset = buf->offset; err =lock_request (cs->req); -if (err) -return err; +if (!err) + err =1 ; -return 1 ; + goto out_put_old; } static int fuse_ref_page(struct fuse_copy_state *cs, struct page *page,
@@ -884,14 +890,16 @@ static int fuse_ref_page(struct fuse_copy_state *cs, struct page *page,if (cs->nr_segs == cs->pipe->buffers)return -EIO ; +get_page (page); err =unlock_request (cs->req); -if (err) +if (err) { +put_page (page);return err; + }fuse_copy_finish (cs); buf = cs->pipebufs; -get_page (page); buf->page = page; buf->offset = offset; buf->len = count;
include/linux/mtd/pfow.h +1 -1
@@ -128,7 +128,7 @@ static inline void print_drs_error(unsigned dsr)if (!(dsr &DSR_AVAILABLE ))printk (KERN_NOTICE "DSR.15: (0) Device not Available\n" ); -if (prog_status &0x03 ) +if ((prog_status &0x03 ) ==0x03 )printk (KERN_NOTICE "DSR.9,8: (11) Attempt to program invalid " "half with 41h command\n" );else if (prog_status &0x02 )
include/linux/pm.h +1 -1
@@ -598,7 +598,7 @@ struct dev_pm_info {#endif #ifdef CONFIG_PM struct hrtimer suspend_timer; -unsigned long timer_expires; +u64 timer_expires;struct work_struct work;wait_queue_head_t wait_queue;struct wake_irq *wakeirq;
include/linux/qcom-geni-se.h +3 -0
@@ -229,6 +229,9 @@ struct geni_se {#define GENI_SE_VERSION_MINOR (ver) ((ver & HW_VER_MINOR_MASK) >> HW_VER_MINOR_SHFT)#define GENI_SE_VERSION_STEP (ver) (ver & HW_VER_STEP_MASK) +/* QUP SE VERSION value for major number 2 and minor number 5 */ +#define QUP_SE_VERSION_2_5 0x20050000 +#if IS_ENABLED (CONFIG_QCOM_GENI_SE )u32 geni_se_get_qup_hw_version (struct geni_se *se);
include/net/netfilter/nf_tables.h +6 -0
@@ -872,6 +872,12 @@ static inline struct nft_expr *nft_expr_last(const struct nft_rule *rule)return (struct nft_expr *)&rule->data[rule->dlen]; } +static inline bool nft_expr_more (const struct nft_rule *rule, +const struct nft_expr *expr) +{ +return expr !=nft_expr_last (rule) && expr->ops; +} +static inline struct nft_userdata *nft_userdata (const struct nft_rule *rule) {return (void *)&rule->data[rule->dlen];
include/uapi/linux/bpf.h +2 -2
@@ -1294,8 +1294,8 @@ union bpf_attr {* Return * The return value depends on the result of the test, and can be: * -* * 0, if the *skb* task belongs to the cgroup2. -* * 1, if the *skb* task does not belong to the cgroup2. +* * 0, if current task belongs to the cgroup2. +* * 1, if current task does not belong to the cgroup2. * * A negative error code, if an error occurred. * * int bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
net/core/sock.c +0 -1
@@ -923,7 +923,6 @@ int sock_setsockopt(struct socket *sock, int level, int optname, }else {sock_reset_flag (sk,SOCK_RCVTSTAMP );sock_reset_flag (sk,SOCK_RCVTSTAMPNS ); -sock_reset_flag (sk,SOCK_TSTAMP_NEW ); }break ;
net/ipv4/tcp.c +2 -0
@@ -484,6 +484,8 @@ static inline bool tcp_stream_is_readable(const struct tcp_sock *tp,return true;if (tcp_rmem_pressure (sk))return true; +if (tcp_receive_window (tp) <=inet_csk (sk)->icsk_ack.rcv_mss) +return true; }if (sk->sk_prot->stream_memory_read)return sk->sk_prot->stream_memory_read (sk);
net/ipv4/tcp_input.c +2 -1
@@ -4774,7 +4774,8 @@ void tcp_data_ready(struct sock *sk)int avail = tp->rcv_nxt - tp->copied_seq;if (avail < sk->sk_rcvlowat && !tcp_rmem_pressure (sk) && - !sock_flag (sk,SOCK_DONE )) + !sock_flag (sk,SOCK_DONE ) && +tcp_receive_window (tp) >inet_csk (sk)->icsk_ack.rcv_mss)return ; sk->sk_data_ready (sk);
net/netfilter/nf_tables_api.c +3 -3
@@ -254,7 +254,7 @@ static void nft_rule_expr_activate(const struct nft_ctx *ctx,struct nft_expr *expr; expr =nft_expr_first (rule); -while (expr !=nft_expr_last (rule) && expr->ops) { +while (nft_expr_more (rule, expr)) {if (expr->ops->activate) expr->ops->activate (ctx, expr);
@@ -269,7 +269,7 @@ static void nft_rule_expr_deactivate(const struct nft_ctx *ctx,struct nft_expr *expr; expr =nft_expr_first (rule); -while (expr !=nft_expr_last (rule) && expr->ops) { +while (nft_expr_more (rule, expr)) {if (expr->ops->deactivate) expr->ops->deactivate (ctx, expr, phase);
@@ -2642,7 +2642,7 @@ static void nf_tables_rule_destroy(const struct nft_ctx *ctx,* is called on error from nf_tables_newrule(). */ expr =nft_expr_first (rule); -while (expr !=nft_expr_last (rule) && expr->ops) { +while (nft_expr_more (rule, expr)) { next =nft_expr_next (expr);nf_tables_expr_destroy (ctx, expr); expr = next;
net/netfilter/nf_tables_offload.c +2 -2
@@ -37,7 +37,7 @@ struct nft_flow_rule *nft_flow_rule_create(struct net *net,struct nft_expr *expr; expr =nft_expr_first (rule); -while (expr->ops && expr !=nft_expr_last (rule)) { +while (nft_expr_more (rule, expr)) {if (expr->ops->offload_flags &NFT_OFFLOAD_F_ACTION ) num_actions++;
@@ -61,7 +61,7 @@ struct nft_flow_rule *nft_flow_rule_create(struct net *net, ctx->net = net; ctx->dep.type =NFT_OFFLOAD_DEP_UNSPEC ; -while (expr->ops && expr !=nft_expr_last (rule)) { +while (nft_expr_more (rule, expr)) {if (!expr->ops->offload) { err = -EOPNOTSUPP ; goto err_out;
net/sched/act_mpls.c +1 -0
@@ -408,6 +408,7 @@ static void __exit mpls_cleanup_module(void)module_init (mpls_init_module);module_exit (mpls_cleanup_module); +MODULE_SOFTDEP ("post: mpls_gso" );MODULE_AUTHOR ("Netronome Systems <[email protected]>" );MODULE_LICENSE ("GPL" );MODULE_DESCRIPTION ("MPLS manipulation actions" );
net/sched/sch_netem.c +8 -1
@@ -330,7 +330,7 @@ static s64 tabledist(s64 mu, s32 sigma,/* default uniform distribution */ if (dist ==NULL ) -return ((rnd % (2 * sigma)) + mu) - sigma; +return ((rnd % (2 * (u32 )sigma)) + mu) - sigma; t = dist->table[rnd % dist->size]; x = (sigma %NETEM_DIST_SCALE ) * t;
@@ -812,6 +812,10 @@ static void get_slot(struct netem_sched_data *q, const struct nlattr *attr) q->slot_config.max_packets =INT_MAX ;if (q->slot_config.max_bytes ==0 ) q->slot_config.max_bytes =INT_MAX ; + +/* capping dist_jitter to the range acceptable by tabledist() */ + q->slot_config.dist_jitter =min_t (__s64,INT_MAX ,abs (q->slot_config.dist_jitter)); + q->slot.packets_left = q->slot_config.max_packets; q->slot.bytes_left = q->slot_config.max_bytes; if (q->slot_config.min_delay | q->slot_config.max_delay |
@@ -1037,6 +1041,9 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt,if (tb[TCA_NETEM_SLOT ])get_slot (q, tb[TCA_NETEM_SLOT ]); +/* capping jitter to the range acceptable by tabledist() */ + q->jitter =min_t (s64,abs (q->jitter),INT_MAX ); +return ret; get_table_failure:
net/tipc/msg.c +2 -3
@@ -140,12 +140,11 @@ int tipc_buf_append(struct sk_buff **headbuf, struct sk_buff **buf)if (fragid ==FIRST_FRAGMENT ) {if (unlikely (head)) goto err; -if (skb_cloned (frag)) - frag =skb_copy (frag,GFP_ATOMIC ); + *buf =NULL ; + frag =skb_unshare (frag,GFP_ATOMIC );if (unlikely (!frag)) goto err; head = *headbuf = frag; - *buf =NULL ;TIPC_SKB_CB (head)->tail =NULL ;if (skb_is_nonlinear (head)) { skb_walk_frags(head, tail) {
scripts/setlocalversion +16 -5
@@ -45,7 +45,7 @@ scm_version() # Check for git and a git repo. if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && - head=`git rev-parse --verify --short HEAD 2>/dev/null`; then + head=$(git rev-parse --verify HEAD 2>/dev/null); then # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore # it, because this version is defined in the top level Makefile.
@@ -59,11 +59,22 @@ scm_version() fi # If we are past a tagged commit (like # "v2.6.30-rc5-302-g72357d5"), we pretty print it. - if atag="`git describe 2>/dev/null`"; then - echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' - - # If we don't have a tag at all we print -g{commitish}. + # + # Ensure the abbreviated sha1 has exactly 12 + # hex characters, to make the output + # independent of git version, local + # core.abbrev settings and/or total number of + # objects in the current repository - passing + # --abbrev=12 ensures a minimum of 12, and the + # awk substr() then picks the 'g' and first 12 + # hex chars. + if atag="$(git describe --abbrev=12 2>/dev/null)"; then + echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),substr($(NF),0,13))}' + + # If we don't have a tag at all we print -g{commitish}, + # again using exactly 12 hex chars. else + head="$(echo $head | cut -c1-12)" printf '%s%s' -g $head fi fi
security/integrity/evm/evm_main.c +6 -0
@@ -183,6 +183,12 @@ static enum integrity_status evm_verify_hmac(struct dentry *dentry,break ;case EVM_IMA_XATTR_DIGSIG :case EVM_XATTR_PORTABLE_DIGSIG : +/* accept xattr with non-empty signature field */ +if (xattr_len <=sizeof (struct signature_v2_hdr )) { + evm_status =INTEGRITY_FAIL ; + goto out; + } + hdr = (struct signature_v2_hdr *)xattr_data; digest.hdr.algo = hdr->hash_algo; rc = evm_calc_hash(dentry, xattr_name, xattr_value,
tools/include/uapi/linux/bpf.h +2 -2
@@ -1294,8 +1294,8 @@ union bpf_attr {* Return * The return value depends on the result of the test, and can be: * -* * 0, if the *skb* task belongs to the cgroup2. -* * 1, if the *skb* task does not belong to the cgroup2. +* * 0, if current task belongs to the cgroup2. +* * 1, if current task does not belong to the cgroup2. * * A negative error code, if an error occurred. * * int bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
tools/objtool/orc_gen.c +26 -7
@@ -88,11 +88,6 @@ static int create_orc_entry(struct section *u_sec, struct section *ip_relasec,struct orc_entry *orc;struct rela *rela; -if (!insn_sec->sym) { -WARN ("missing symbol for section %s" , insn_sec->name); -return -1 ; - } -/* populate ORC data */ orc = (struct orc_entry *)u_sec->data->d_buf + idx;memcpy (orc, o,sizeof (*orc));
@@ -105,8 +100,32 @@ static int create_orc_entry(struct section *u_sec, struct section *ip_relasec, }memset (rela,0 ,sizeof (*rela)); - rela->sym = insn_sec->sym; - rela->addend = insn_off; +if (insn_sec->sym) { + rela->sym = insn_sec->sym; + rela->addend = insn_off; + }else { +/* +* The Clang assembler doesn't produce section symbols, so we +* have to reference the function symbol instead: +*/ + rela->sym =find_symbol_containing (insn_sec, insn_off); +if (!rela->sym) { +/* +* Hack alert. This happens when we need to reference +* the NOP pad insn immediately after the function. +*/ + rela->sym =find_symbol_containing (insn_sec, + insn_off -1 ); + } +if (!rela->sym) { +WARN ("missing symbol for insn at offset 0x%lx\n" , + insn_off); +return -1 ; + } + + rela->addend = insn_off - rela->sym->offset; + } + rela->type =R_X86_64_PC32 ; rela->offset = idx *sizeof (int );