Linux 5.15.45
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.45 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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
------------
Documentation/process/submitting-patches.rst | 2 Makefile | 2 arch/arm/boot/dts/s5pv210-aries.dtsi | 2 arch/arm64/kvm/arm.c | 3 arch/powerpc/kvm/book3s_hv_uvmem.c | 8 + arch/x86/kernel/cpu/sgx/encl.c | 113 +++++++++++++++++++++++--- arch/x86/kernel/cpu/sgx/encl.h | 2 arch/x86/kernel/cpu/sgx/main.c | 13 ++ arch/x86/kernel/kvm.c | 41 ++++++--- arch/x86/kvm/svm/nested.c | 3 arch/x86/kvm/svm/sev.c | 12 +- arch/x86/kvm/vmx/nested.c | 3 arch/x86/kvm/x86.c | 31 ++++--- crypto/Kconfig | 2 crypto/drbg.c | 110 ++++++++++--------------- crypto/ecrdsa.c | 8 - drivers/bluetooth/hci_qca.c | 4 drivers/char/random.c | 2 drivers/char/tpm/tpm2-cmd.c | 11 ++ drivers/char/tpm/tpm_ibmvtpm.c | 1 drivers/crypto/caam/ctrl.c | 18 ++++ drivers/gpu/drm/i915/intel_pm.c | 2 drivers/hid/hid-ids.h | 1 drivers/hid/hid-multitouch.c | 9 ++ drivers/i2c/busses/i2c-ismt.c | 17 +++ drivers/i2c/busses/i2c-thunderx-pcidrv.c | 1 drivers/md/dm-crypt.c | 14 ++- drivers/md/dm-integrity.c | 2 drivers/md/dm-stats.c | 8 + drivers/md/dm-verity-target.c | 1 drivers/md/raid5.c | 47 +++++----- drivers/media/i2c/imx412.c | 8 - drivers/net/ethernet/faraday/ftgmac100.c | 5 + drivers/net/ipa/ipa_endpoint.c | 4 drivers/nfc/pn533/pn533.c | 5 - drivers/pinctrl/sunxi/pinctrl-suniv-f1c100s.c | 2 fs/exfat/balloc.c | 8 + fs/exfat/exfat_fs.h | 8 + fs/exfat/fatent.c | 8 - fs/nfs/internal.h | 1 fs/nfsd/nfs4state.c | 12 -- fs/ntfs3/super.c | 10 +- fs/pipe.c | 33 ++++--- include/crypto/drbg.h | 10 +- include/linux/pipe_fs_i.h | 2 include/net/netfilter/nf_conntrack_core.h | 7 + kernel/bpf/stackmap.c | 1 kernel/bpf/trampoline.c | 18 ++-- kernel/bpf/verifier.c | 17 +++ lib/Kconfig | 2 lib/assoc_array.c | 8 + lib/crypto/Kconfig | 17 ++- lib/percpu-refcount.c | 1 mm/zsmalloc.c | 37 +++++++- net/core/filter.c | 4 net/key/af_key.c | 6 - net/netfilter/nf_tables_api.c | 94 +++++++++++++++------ sound/usb/clock.c | 11 ++ sound/usb/pcm.c | 17 ++- sound/usb/quirks-table.h | 3 sound/usb/quirks.c | 2 61 files changed, 585 insertions(+), 269 deletions(-)
Akira Yokosawa (1):
docs: submitting-patches: Fix crossref to 'The canonical patch format'
Al Viro (1):
percpu_ref_init(): clean ->percpu_count_ref on failure
Alex Elder (1):
net: ipa: compute proper aggregation limit
Ashish Kalra (1):
KVM: SVM: Use kzalloc for sev ioctl interfaces to prevent kernel data leak
Bryan O'Donoghue (2):
media: i2c: imx412: Fix reset GPIO polarity
media: i2c: imx412: Fix power_off ordering
Chuck Lever (1):
NFSD: Fix possible sleep during nfsd4_release_lockowner()
Craig McLure (1):
ALSA: usb-audio: Configure sync endpoints before data
Dan Carpenter (2):
i2c: ismt: prevent memory corruption in ismt_access() dm integrity: fix error code in dm_integrity_ctr()
David Howells (1):
pipe: Fix missing lock in pipe_resize_ring()
Fabio Estevam (1):
crypto: caam - fix i.MX6SX entropy delay value
Florian Westphal (1):
netfilter: conntrack: re-fetch conntrack after insertion
Forest Crossman (1):
ALSA: usb-audio: Don't get sample rate for MCT Trigger 5 USB-to-HDMI
Greg Kroah-Hartman (1):
Linux 5.15.45
Gustavo A. R. Silva (1):
drm/i915: Fix -Wstringop-overflow warning in call to intel_read_wm_latency()
IotaHydrae (1):
pinctrl: sunxi: fix f1c100s uart2 function
Joel Stanley (1):
net: ftgmac100: Disable hardware checksum on AST2600
Jonathan Bakker (1):
ARM: dts: s5pv210: Correct interrupt name for bluetooth in Aries
Justin M. Forbes (1):
lib/crypto: add prompts back to crypto libraries
Kumar Kartikeya Dwivedi (2):
bpf: Reject writes for PTR_TO_MAP_KEY in check_helper_mem_access
bpf: Check PTR_TO_MEM | MEM_RDONLY in check_helper_mem_access
Kuniyuki Iwashima (1):
pipe: make poll_usage boolean and annotate its access
Lin Ma (1):
nfc: pn533: Fix buggy cleanup order
Liu Jian (1):
bpf: Enlarge offset check value to INT_MAX in bpf_skb_{load,store}_bytes
Marek Maślanka (1):
HID: multitouch: Add support for Google Whiskers Touchpad
Mariusz Tkaczyk (1):
raid5: introduce MD_BROKEN
Mika Westerberg (1):
i2c: ismt: Provide a DMA buffer for Interrupt Cause Logging
Mikulas Patocka (2):
dm crypt: make printing of the key constant-time dm stats: add cond_resched when looping over entries
Nicolai Stange (4):
crypto: drbg - prepare for more fine-grained tracking of seeding state
crypto: drbg - track whether DRBG was seeded with !rng_is_initialized()
crypto: drbg - move dynamic ->reseed_threshold adjustments to __drbg_seed()
crypto: drbg - make reseeding from get_random_bytes() synchronous
Pablo Neira Ayuso (4):
netfilter: nf_tables: disallow non-stateful expression in sets earlier
netfilter: nf_tables: sanitize nft_set_desc_concat_parse()
netfilter: nf_tables: hold mutex on netns pre_exit path
netfilter: nf_tables: double hook unregistration in netns path
Paolo Bonzini (1):
x86, kvm: use correct GFP flags for preemption disabled
Piyush Malgujar (1):
drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers
Quentin Perret (1):
KVM: arm64: Don't hypercall before EL2 init
Randy Dunlap (1):
fs/ntfs3: validate BOOT sectors_per_clusters
Reinette Chatre (5):
x86/sgx: Disconnect backing page references from dirty status x86/sgx: Mark PCMD page as dirty when modifying contents x86/sgx: Obtain backing storage page with enclave mutex held x86/sgx: Fix race between reclaimer and page fault handler x86/sgx: Ensure no data in PCMD page after truncate
Sarthak Kukreti (1):
dm verity: set DM_TARGET_IMMUTABLE feature flag
Sean Christopherson (3):
x86/kvm: Alloc dummy async #PF token outside of raw spinlock
KVM: x86: avoid calling x86 emulator without a decoded instruction
KVM: x86: Drop WARNs that assert a triple fault never "escapes" from L2
Stefan Mahnke-Hartmann (1):
tpm: Fix buffer access in tpm2_get_tpm_pt()
Stephen Brennan (1):
assoc_array: Fix BUG_ON during garbage collect
Steven Rostedt (1):
Bluetooth: hci_qca: Use del_timer_sync() before freeing
Sultan Alsawaf (1):
zsmalloc: fix races between asynchronous zspage free and page migration
Tadeusz Struk (1):
exfat: check if cluster num is valid
Takashi Iwai (3):
ALSA: usb-audio: Workaround for clock setup on TEAC devices
ALSA: usb-audio: Add missing ep_idx in fixed EP quirks
ALSA: usb-audio: Optimize TEAC clock quirk
Tao Jin (1):
HID: multitouch: add quirks to enable Lenovo X12 trackpoint
Thomas Bartschies (1):
net: af_key: check encryption module availability consistency
Trond Myklebust (1):
NFS: Memory allocation failures are not server fatal errors
Vitaly Chikunov (1):
crypto: ecrdsa - Fix incorrect use of vli_cmp
Xiaomeng Tong (1):
KVM: PPC: Book3S HV: fix incorrect NULL check on list iterator
Xiu Jianfeng (1):
tpm: ibmvtpm: Correct the return value in tpm_ibmvtpm_probe()
Yuntao Wang (2):
bpf: Fix potential array overflow in bpf_trampoline_get_progs()
bpf: Fix excessive memory allocation in stack_map_alloc()
Greg Kroah-Hartman
maintainerDocumentation/process/submitting-patches.rst +1 -1
@@ -72,7 +72,7 @@ as you intend it to. The maintainer will thank you if you write your patch description in a form which can be easily pulled into Linux's source code management -system, ``git``, as a "commit log". See :ref:`explicit_in_reply_to`. +system, ``git``, as a "commit log". See :ref:`the_canonical_patch_format`. Solve only one problem per patch. If your description starts to get long, that's a sign that you probably need to split up your patch.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 44 +SUBLEVEL = 45 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/s5pv210-aries.dtsi +1 -1
@@ -895,7 +895,7 @@ bluetooth { device-wakeup-gpios = <&gpg3 4 GPIO_ACTIVE_HIGH>; interrupt-parent = <&gph2>; interrupts = <5 IRQ_TYPE_LEVEL_HIGH>; - interrupt-names = "host-wake"; + interrupt-names = "host-wakeup"; }; };
arch/arm64/kvm/arm.c +2 -1
@@ -1458,7 +1458,8 @@ static int kvm_init_vector_slots(void) base =kern_hyp_va (kvm_ksym_ref (__bp_harden_hyp_vecs));kvm_init_vector_slot (base,HYP_VECTOR_SPECTRE_DIRECT ); -if (kvm_system_needs_idmapped_vectors () && !has_vhe ()) { +if (kvm_system_needs_idmapped_vectors () && + !is_protected_kvm_enabled ()) { err =create_hyp_exec_mappings (__pa_symbol (__bp_harden_hyp_vecs), __BP_HARDEN_HYP_VECS_SZ, &base);if (err)
arch/powerpc/kvm/book3s_hv_uvmem.c +5 -3
@@ -360,13 +360,15 @@ static bool kvmppc_gfn_is_uvmem_pfn(unsigned long gfn, struct kvm *kvm,static bool kvmppc_next_nontransitioned_gfn (const struct kvm_memory_slot *memslot,struct kvm *kvm,unsigned long *gfn) { -struct kvmppc_uvmem_slot *p; +struct kvmppc_uvmem_slot *p =NULL , *iter;bool ret = false;unsigned long i; -list_for_each_entry (p, &kvm->arch.uvmem_pfns, list) -if (*gfn >= p->base_pfn && *gfn < p->base_pfn + p->nr_pfns) +list_for_each_entry (iter, &kvm->arch.uvmem_pfns, list) +if (*gfn >= iter->base_pfn && *gfn < iter->base_pfn + iter->nr_pfns) { + p = iter;break ; + }if (!p)return ret;/*
arch/x86/kernel/cpu/sgx/encl.c +104 -9
155 lines not on this page · raw message
arch/x86/kernel/cpu/sgx/encl.h +1 -1
@@ -107,7 +107,7 @@ void sgx_encl_release(struct kref *ref);int sgx_encl_mm_add (struct sgx_encl *encl,struct mm_struct *mm);int sgx_encl_get_backing (struct sgx_encl *encl,unsigned long page_index,struct sgx_backing *backing); -void sgx_encl_put_backing (struct sgx_backing *backing,bool do_write); +void sgx_encl_put_backing (struct sgx_backing *backing);int sgx_encl_test_and_clear_young (struct mm_struct *mm,struct sgx_encl_page *page);
arch/x86/kernel/cpu/sgx/main.c +9 -4
@@ -170,6 +170,8 @@ static int __sgx_encl_ewb(struct sgx_epc_page *epc_page, void *va_slot, backing->pcmd_offset; ret =__ewb (&pginfo,sgx_get_epc_virt_addr (epc_page), va_slot); +set_page_dirty (backing->pcmd); +set_page_dirty (backing->contents);kunmap_atomic ((void *)(unsigned long )(pginfo.metadata - backing->pcmd_offset));
@@ -287,6 +289,7 @@ static void sgx_reclaimer_write(struct sgx_epc_page *epc_page,sgx_encl_ewb (epc_page, backing); encl_page->epc_page =NULL ; encl->secs_child_cnt--; +sgx_encl_put_backing (backing);if (!encl->secs_child_cnt &&test_bit (SGX_ENCL_INITIALIZED , &encl->flags)) { ret = sgx_encl_get_backing(encl, PFN_DOWN(encl->size),
@@ -299,7 +302,7 @@ static void sgx_reclaimer_write(struct sgx_epc_page *epc_page,sgx_encl_free_epc_page (encl->secs.epc_page); encl->secs.epc_page =NULL ; -sgx_encl_put_backing (&secs_backing, true); +sgx_encl_put_backing (&secs_backing); } out:
@@ -360,11 +363,14 @@ static void sgx_reclaim_pages(void) goto skip; page_index =PFN_DOWN (encl_page->desc - encl_page->encl->base); + +mutex_lock (&encl_page->encl->lock); ret =sgx_encl_get_backing (encl_page->encl, page_index, &backing[i]); -if (ret) +if (ret) { +mutex_unlock (&encl_page->encl->lock); goto skip; + } -mutex_lock (&encl_page->encl->lock); encl_page->desc |=SGX_ENCL_PAGE_BEING_RECLAIMED ;mutex_unlock (&encl_page->encl->lock);continue ;
@@ -392,7 +398,6 @@ static void sgx_reclaim_pages(void) encl_page = epc_page->owner;sgx_reclaimer_write (epc_page, &backing[i]); -sgx_encl_put_backing (&backing[i], true);kref_put (&encl_page->encl->refcount, sgx_encl_release); epc_page->flags &= ~SGX_EPC_PAGE_RECLAIMER_TRACKED ;
arch/x86/kernel/kvm.c +27 -14
62 lines not on this page · raw message
arch/x86/kvm/svm/nested.c +0 -3
@@ -750,9 +750,6 @@ int nested_svm_vmexit(struct vcpu_svm *svm)struct kvm_host_map map;int rc; -/* Triple faults in L2 should never escape. */ -WARN_ON_ONCE (kvm_check_request (KVM_REQ_TRIPLE_FAULT , vcpu)); - rc =kvm_vcpu_map (vcpu,gpa_to_gfn (svm->nested.vmcb12_gpa), &map);if (rc) {if (rc == -EINVAL )
arch/x86/kvm/svm/sev.c +6 -6
@@ -676,7 +676,7 @@ static int sev_launch_measure(struct kvm *kvm, struct kvm_sev_cmd *argp)if (params.len >SEV_FW_BLOB_MAX_SIZE )return -EINVAL ; - blob =kmalloc (params.len,GFP_KERNEL_ACCOUNT ); + blob =kzalloc (params.len,GFP_KERNEL_ACCOUNT );if (!blob)return -ENOMEM ;
@@ -796,7 +796,7 @@ static int __sev_dbg_decrypt_user(struct kvm *kvm, unsigned long paddr,if (!IS_ALIGNED (dst_paddr,16 ) || !IS_ALIGNED (paddr,16 ) || !IS_ALIGNED (size,16 )) { - tpage = (void *)alloc_page (GFP_KERNEL ); + tpage = (void *)alloc_page (GFP_KERNEL | __GFP_ZERO);if (!tpage)return -ENOMEM ;
@@ -1082,7 +1082,7 @@ static int sev_get_attestation_report(struct kvm *kvm, struct kvm_sev_cmd *argp)if (params.len >SEV_FW_BLOB_MAX_SIZE )return -EINVAL ; - blob =kmalloc (params.len,GFP_KERNEL_ACCOUNT ); + blob =kzalloc (params.len,GFP_KERNEL_ACCOUNT );if (!blob)return -ENOMEM ;
@@ -1164,7 +1164,7 @@ static int sev_send_start(struct kvm *kvm, struct kvm_sev_cmd *argp)return -EINVAL ;/* allocate the memory to hold the session data blob */ - session_data =kmalloc (params.session_len,GFP_KERNEL_ACCOUNT ); + session_data =kzalloc (params.session_len,GFP_KERNEL_ACCOUNT );if (!session_data)return -ENOMEM ;
@@ -1288,11 +1288,11 @@ static int sev_send_update_data(struct kvm *kvm, struct kvm_sev_cmd *argp)/* allocate memory for header and transport buffer */ ret = -ENOMEM ; - hdr =kmalloc (params.hdr_len,GFP_KERNEL_ACCOUNT ); + hdr =kzalloc (params.hdr_len,GFP_KERNEL_ACCOUNT );if (!hdr) goto e_unpin; - trans_data =kmalloc (params.trans_len,GFP_KERNEL_ACCOUNT ); + trans_data =kzalloc (params.trans_len,GFP_KERNEL_ACCOUNT );if (!trans_data) goto e_free_hdr;
arch/x86/kvm/vmx/nested.c +0 -3
@@ -4501,9 +4501,6 @@ void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 vm_exit_reason,/* trying to cancel vmlaunch/vmresume is a bug */ WARN_ON_ONCE (vmx->nested.nested_run_pending); -/* Similarly, triple faults in L2 should never escape. */ -WARN_ON_ONCE (kvm_check_request (KVM_REQ_TRIPLE_FAULT , vcpu)); -if (kvm_check_request (KVM_REQ_GET_NESTED_STATE_PAGES , vcpu)) {/* * KVM_REQ_GET_NESTED_STATE_PAGES is also used to map
arch/x86/kvm/x86.c +19 -12
@@ -7846,7 +7846,7 @@ int kvm_skip_emulated_instruction(struct kvm_vcpu *vcpu) }EXPORT_SYMBOL_GPL (kvm_skip_emulated_instruction); -static bool kvm_vcpu_check_breakpoint (struct kvm_vcpu *vcpu,int *r) +static bool kvm_vcpu_check_code_breakpoint (struct kvm_vcpu *vcpu,int *r) {if (unlikely (vcpu->guest_debug &KVM_GUESTDBG_USE_HW_BP ) && (vcpu->arch.guest_debug_dr7 &DR7_BP_EN_MASK )) {
@@ -7915,25 +7915,23 @@ static bool is_vmware_backdoor_opcode(struct x86_emulate_ctxt *ctxt) }/* -* Decode to be emulated instruction. Return EMULATION_OK if success. +* Decode an instruction for emulation. The caller is responsible for handling +* code breakpoints. Note, manually detecting code breakpoints is unnecessary +* (and wrong) when emulating on an intercepted fault-like exception[*], as +* code breakpoints have higher priority and thus have already been done by +* hardware. +* +* [*] Except #MC, which is higher priority, but KVM should never emulate in +* response to a machine check. */ int x86_decode_emulated_instruction (struct kvm_vcpu *vcpu,int emulation_type,void *insn,int insn_len) { -int r =EMULATION_OK ;struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt; +int r;init_emulate_ctxt (vcpu); -/* -* We will reenter on the same instruction since we do not set -* complete_userspace_io. This does not handle watchpoints yet, -* those would be handled in the emulate_ops. -*/ -if (!(emulation_type &EMULTYPE_SKIP ) && -kvm_vcpu_check_breakpoint (vcpu, &r)) -return r; - r =x86_decode_insn (ctxt, insn, insn_len, emulation_type);trace_kvm_emulate_insn_start (vcpu);
@@ -7966,6 +7964,15 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,if (!(emulation_type &EMULTYPE_NO_DECODE )) {kvm_clear_exception_queue (vcpu); +/* +* Return immediately if RIP hits a code breakpoint, such #DBs +* are fault-like and are higher priority than any faults on +* the code fetch itself. +*/ +if (!(emulation_type &EMULTYPE_SKIP ) && +kvm_vcpu_check_code_breakpoint (vcpu, &r)) +return r; + r =x86_decode_emulated_instruction (vcpu, emulation_type, insn, insn_len);if (r !=EMULATION_OK ) {
crypto/Kconfig +0 -2
@@ -1924,5 +1924,3 @@ source "crypto/asymmetric_keys/Kconfig" source "certs/Kconfig" endif # if CRYPTO - -source "lib/crypto/Kconfig"
crypto/drbg.c +44 -66
205 lines not on this page · raw message
crypto/ecrdsa.c +4 -4
@@ -113,15 +113,15 @@ static int ecrdsa_verify(struct akcipher_request *req)/* Step 1: verify that 0 < r < q, 0 < s < q */ if (vli_is_zero (r, ndigits) || -vli_cmp (r, ctx->curve->n, ndigits) ==1 || +vli_cmp (r, ctx->curve->n, ndigits) >=0 ||vli_is_zero (s, ndigits) || -vli_cmp (s, ctx->curve->n, ndigits) ==1 ) +vli_cmp (s, ctx->curve->n, ndigits) >=0 )return -EKEYREJECTED ;/* Step 2: calculate hash (h) of the message (passed as input) */ /* Step 3: calculate e = h \mod q */ vli_from_le64 (e, digest, ndigits); -if (vli_cmp (e, ctx->curve->n, ndigits) ==1 ) +if (vli_cmp (e, ctx->curve->n, ndigits) >=0 )vli_sub (e, e, ctx->curve->n, ndigits);if (vli_is_zero (e, ndigits)) e[0 ] =1 ;
@@ -137,7 +137,7 @@ static int ecrdsa_verify(struct akcipher_request *req)/* Step 6: calculate point C = z_1P + z_2Q, and R = x_c \mod q */ ecc_point_mult_shamir (&cc, z1, &ctx->curve->g, z2, &ctx->pub_key, ctx->curve); -if (vli_cmp (cc.x, ctx->curve->n, ndigits) ==1 ) +if (vli_cmp (cc.x, ctx->curve->n, ndigits) >=0 )vli_sub (cc.x, cc.x, ctx->curve->n, ndigits);/* Step 7: if R == r signature is valid */
drivers/bluetooth/hci_qca.c +2 -2
@@ -696,9 +696,9 @@ static int qca_close(struct hci_uart *hu)skb_queue_purge (&qca->tx_wait_q);skb_queue_purge (&qca->txq);skb_queue_purge (&qca->rx_memdump_q); -del_timer (&qca->tx_idle_timer); -del_timer (&qca->wake_retrans_timer);destroy_workqueue (qca->workqueue); +del_timer_sync (&qca->tx_idle_timer); +del_timer_sync (&qca->wake_retrans_timer); qca->hu =NULL ;kfree_skb (qca->rx_skb);
drivers/char/random.c +0 -2
@@ -163,7 +163,6 @@ int __cold register_random_ready_notifier(struct notifier_block *nb)spin_unlock_irqrestore (&random_ready_chain_lock, flags);return ret; } -EXPORT_SYMBOL (register_random_ready_notifier);/* * Delete a previously registered readiness callback function.
@@ -178,7 +177,6 @@ int __cold unregister_random_ready_notifier(struct notifier_block *nb)spin_unlock_irqrestore (&random_ready_chain_lock, flags);return ret; } -EXPORT_SYMBOL (unregister_random_ready_notifier);static void __cold process_random_ready_list (void ) {
drivers/char/tpm/tpm2-cmd.c +10 -1
@@ -400,7 +400,16 @@ ssize_t tpm2_get_tpm_pt(struct tpm_chip *chip, u32 property_id, u32 *value,if (!rc) { out = (struct tpm2_get_cap_out *) &buf.data[TPM_HEADER_SIZE ]; - *value =be32_to_cpu (out->value); +/* +* To prevent failing boot up of some systems, Infineon TPM2.0 +* returns SUCCESS on TPM2_Startup in field upgrade mode. Also +* the TPM2_Getcapability command returns a zero length list +* in field upgrade mode. +*/ +if (be32_to_cpu (out->property_cnt) >0 ) + *value =be32_to_cpu (out->value); +else + rc = -ENODATA ; }tpm_buf_destroy (&buf);return rc;
drivers/char/tpm/tpm_ibmvtpm.c +1 -0
@@ -681,6 +681,7 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,if (!wait_event_timeout (ibmvtpm->crq_queue.wq, ibmvtpm->rtce_buf !=NULL ,HZ )) { + rc = -ENODEV ;dev_err (dev,"CRQ response timed out\n" ); goto init_irq_cleanup; }
drivers/crypto/caam/ctrl.c +18 -0
@@ -609,6 +609,13 @@ static bool check_version(struct fsl_mc_version *mc_version, u32 major, }#endif +static bool needs_entropy_delay_adjustment (void ) +{ +if (of_machine_is_compatible ("fsl,imx6sx" )) +return true; +return false; +} +/* Probe routine for CAAM top (controller) level */ static int caam_probe (struct platform_device *pdev) {
@@ -855,6 +862,8 @@ static int caam_probe(struct platform_device *pdev)* Also, if a handle was instantiated, do not change * the TRNG parameters. */ +if (needs_entropy_delay_adjustment ()) + ent_delay =12000 ;if (!(ctrlpriv->rng4_sh_init || inst_handles)) { dev_info(dev, "Entropy delay = %u\n",
@@ -871,6 +880,15 @@ static int caam_probe(struct platform_device *pdev)*/ ret =instantiate_rng (dev, inst_handles, gen_sk); +/* +* Entropy delay is determined via TRNG characterization. +* TRNG characterization is run across different voltages +* and temperatures. +* If worst case value for ent_dly is identified, +* the loop can be skipped for that platform. +*/ +if (needs_entropy_delay_adjustment ()) +break ;if (ret == -EAGAIN )/* * if here, the loop will rerun,
drivers/gpu/drm/i915/intel_pm.c +1 -1
@@ -2863,7 +2863,7 @@ static void ilk_compute_wm_level(const struct drm_i915_private *dev_priv, }static void intel_read_wm_latency (struct drm_i915_private *dev_priv, -u16 wm[8 ]) +u16 wm[]) {struct intel_uncore *uncore = &dev_priv->uncore;
drivers/hid/hid-ids.h +1 -0
@@ -753,6 +753,7 @@#define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085#define USB_DEVICE_ID_LENOVO_X1_TAB 0x60a3#define USB_DEVICE_ID_LENOVO_X1_TAB3 0x60b5 +#define USB_DEVICE_ID_LENOVO_X12_TAB 0x60fe#define USB_DEVICE_ID_LENOVO_OPTICAL_USB_MOUSE_600E 0x600e#define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D 0x608d#define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6019 0x6019
drivers/hid/hid-multitouch.c +9 -0
@@ -2032,6 +2032,12 @@ static const struct hid_device_id mt_devices[] = { USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB3) }, +/* Lenovo X12 TAB Gen 1 */ + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT, +HID_DEVICE (BUS_USB ,HID_GROUP_MULTITOUCH_WIN_8 , +USB_VENDOR_ID_LENOVO , + USB_DEVICE_ID_LENOVO_X12_TAB) }, + /* MosArt panels */ { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
@@ -2176,6 +2182,9 @@ static const struct hid_device_id mt_devices[] = { { .driver_data = MT_CLS_GOOGLE,HID_DEVICE (HID_BUS_ANY ,HID_GROUP_ANY ,USB_VENDOR_ID_GOOGLE , USB_DEVICE_ID_GOOGLE_TOUCH_ROSE) }, + { .driver_data = MT_CLS_GOOGLE, +HID_DEVICE (BUS_USB ,HID_GROUP_MULTITOUCH_WIN_8 ,USB_VENDOR_ID_GOOGLE , + USB_DEVICE_ID_GOOGLE_WHISKERS) },/* Generic MT device */ { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
drivers/i2c/busses/i2c-ismt.c +17 -0
@@ -82,6 +82,7 @@#define ISMT_DESC_ENTRIES 2/* number of descriptor entries */ #define ISMT_MAX_RETRIES 3/* number of SMBus retries to attempt */ +#define ISMT_LOG_ENTRIES 3/* number of interrupt cause log entries */ /* Hardware Descriptor Constants - Control Field */ #define ISMT_DESC_CWRL 0x01/* Command/Write Length */
@@ -175,6 +176,8 @@ struct ismt_priv {u8 head;/* ring buffer head pointer */ struct completion cmp;/* interrupt completion */ u8 buffer[I2C_SMBUS_BLOCK_MAX +16 ];/* temp R/W data buffer */ +dma_addr_t log_dma; +u32 *log; };static const struct pci_device_id ismt_ids[] = {
@@ -411,6 +414,9 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,memset (desc,0 ,sizeof (struct ismt_desc )); desc->tgtaddr_rw =ISMT_DESC_ADDR_RW (addr, read_write); +/* Always clear the log entries */ +memset (priv->log,0 ,ISMT_LOG_ENTRIES *sizeof (u32)); +/* Initialize common control bits */ if (likely (pci_dev_msi_enabled (priv->pci_dev))) desc->control =ISMT_DESC_INT |ISMT_DESC_FAIR ;
@@ -522,6 +528,9 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,case I2C_SMBUS_BLOCK_PROC_CALL :dev_dbg (dev,"I2C_SMBUS_BLOCK_PROC_CALL\n" ); +if (data->block[0 ] >I2C_SMBUS_BLOCK_MAX ) +return -EINVAL ; + dma_size =I2C_SMBUS_BLOCK_MAX ; desc->tgtaddr_rw =ISMT_DESC_ADDR_RW (addr,1 ); desc->wr_len_cmd = data->block[0 ] +1 ;
@@ -708,6 +717,8 @@ static void ismt_hw_init(struct ismt_priv *priv)/* initialize the Master Descriptor Base Address (MDBA) */ writeq (priv->io_rng_dma, priv->smba +ISMT_MSTR_MDBA ); +writeq (priv->log_dma, priv->smba +ISMT_GR_SMTICL ); +/* initialize the Master Control Register (MCTRL) */ writel (ISMT_MCTRL_MEIE , priv->smba +ISMT_MSTR_MCTRL );
@@ -795,6 +806,12 @@ static int ismt_dev_init(struct ismt_priv *priv) priv->head =0 ;init_completion (&priv->cmp); + priv->log =dmam_alloc_coherent (&priv->pci_dev->dev, +ISMT_LOG_ENTRIES *sizeof (u32), + &priv->log_dma,GFP_KERNEL ); +if (!priv->log) +return -ENOMEM ; +return 0 ; }
drivers/i2c/busses/i2c-thunderx-pcidrv.c +1 -0
@@ -213,6 +213,7 @@ static int thunder_i2c_probe_pci(struct pci_dev *pdev, i2c->adap.bus_recovery_info = &octeon_i2c_recovery_info; i2c->adap.dev.parent = dev; i2c->adap.dev.of_node = pdev->dev.of_node; + i2c->adap.dev.fwnode = dev->fwnode;snprintf (i2c->adap.name,sizeof (i2c->adap.name),"Cavium ThunderX i2c adapter at %s" ,dev_name (dev));i2c_set_adapdata (&i2c->adap, i2c);
drivers/md/dm-crypt.c +11 -3
@@ -3435,6 +3435,11 @@ static int crypt_map(struct dm_target *ti, struct bio *bio)return DM_MAPIO_SUBMITTED ; } +static char hex2asc (unsigned char c) +{ +return c +'0' + ((unsigned )(9 - c) >>4 &0x27 ); +} +static void crypt_status (struct dm_target *ti,status_type_t type,unsigned status_flags,char *result,unsigned maxlen) {
@@ -3453,9 +3458,12 @@ static void crypt_status(struct dm_target *ti, status_type_t type,if (cc->key_size >0 ) {if (cc->key_string)DMEMIT (":%u:%s" , cc->key_size, cc->key_string); -else -for (i =0 ; i < cc->key_size; i++) -DMEMIT ("%02x" , cc->key[i]); +else { +for (i =0 ; i < cc->key_size; i++) { +DMEMIT ("%c%c" ,hex2asc (cc->key[i] >>4 ), +hex2asc (cc->key[i] &0xf )); + } + } }else DMEMIT ("-" );
drivers/md/dm-integrity.c +0 -2
@@ -4478,8 +4478,6 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) }if (should_write_sb) { -int r; -init_journal (ic,0 , ic->journal_sections,0 ); r =dm_integrity_failed (ic);if (unlikely (r)) {
drivers/md/dm-stats.c +8 -0
@@ -225,6 +225,7 @@ void dm_stats_cleanup(struct dm_stats *stats)atomic_read (&shared->in_flight[READ ]), atomic_read(&shared->in_flight[WRITE])); } +cond_resched (); }dm_stat_free (&s->rcu_head); }
@@ -330,6 +331,7 @@ static int dm_stats_create(struct dm_stats *stats, sector_t start, sector_t end,for (ni =0 ; ni < n_entries; ni++) {atomic_set (&s->stat_shared[ni].in_flight[READ ],0 );atomic_set (&s->stat_shared[ni].in_flight[WRITE ],0 ); +cond_resched (); }if (s->n_histogram_entries) {
@@ -342,6 +344,7 @@ static int dm_stats_create(struct dm_stats *stats, sector_t start, sector_t end,for (ni =0 ; ni < n_entries; ni++) { s->stat_shared[ni].tmp.histogram = hi; hi += s->n_histogram_entries +1 ; +cond_resched (); } }
@@ -362,6 +365,7 @@ static int dm_stats_create(struct dm_stats *stats, sector_t start, sector_t end,for (ni =0 ; ni < n_entries; ni++) { p[ni].histogram = hi; hi += s->n_histogram_entries +1 ; +cond_resched (); } } }
@@ -497,6 +501,7 @@ static int dm_stats_list(struct dm_stats *stats, const char *program, }DMEMIT ("\n" ); } +cond_resched (); }mutex_unlock (&stats->mutex);
@@ -774,6 +779,7 @@ static void __dm_stat_clear(struct dm_stat *s, size_t idx_start, size_t idx_end,local_irq_enable (); } } +cond_resched (); } }
@@ -889,6 +895,8 @@ static int dm_stats_print(struct dm_stats *stats, int id,if (unlikely (sz +1 >= maxlen)) goto buffer_overflow; + +cond_resched (); }if (clear)
drivers/md/dm-verity-target.c +1 -0
@@ -1312,6 +1312,7 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)static struct target_type verity_target = { .name ="verity" , + .features =DM_TARGET_IMMUTABLE , .version = {1 ,8 ,0 }, .module =THIS_MODULE , .ctr = verity_ctr,
drivers/md/raid5.c +22 -25
73 lines not on this page · raw message
drivers/media/i2c/imx412.c +4 -4
@@ -1011,7 +1011,7 @@ static int imx412_power_on(struct device *dev)struct imx412 *imx412 =to_imx412 (sd);int ret; -gpiod_set_value_cansleep (imx412->reset_gpio,1 ); +gpiod_set_value_cansleep (imx412->reset_gpio,0 ); ret =clk_prepare_enable (imx412->inclk);if (ret) {
@@ -1024,7 +1024,7 @@ static int imx412_power_on(struct device *dev)return 0 ; error_reset: -gpiod_set_value_cansleep (imx412->reset_gpio,0 ); +gpiod_set_value_cansleep (imx412->reset_gpio,1 );return ret; }
@@ -1040,10 +1040,10 @@ static int imx412_power_off(struct device *dev)struct v4l2_subdev *sd =dev_get_drvdata (dev);struct imx412 *imx412 =to_imx412 (sd); -gpiod_set_value_cansleep (imx412->reset_gpio,0 ); -clk_disable_unprepare (imx412->inclk); +gpiod_set_value_cansleep (imx412->reset_gpio,1 ); +return 0 ; }
drivers/net/ethernet/faraday/ftgmac100.c +5 -0
@@ -1910,6 +1910,11 @@ static int ftgmac100_probe(struct platform_device *pdev)/* AST2400 doesn't have working HW checksum generation */ if (np && (of_device_is_compatible (np,"aspeed,ast2400-mac" ))) netdev->hw_features &= ~NETIF_F_HW_CSUM ; + +/* AST2600 tx checksum with NCSI is broken */ +if (priv->use_ncsi &&of_device_is_compatible (np,"aspeed,ast2600-mac" )) + netdev->hw_features &= ~NETIF_F_HW_CSUM ; +if (np &&of_get_property (np,"no-hw-checksum" ,NULL )) netdev->hw_features &= ~(NETIF_F_HW_CSUM |NETIF_F_RXCSUM ); netdev->features |= netdev->hw_features;
drivers/net/ipa/ipa_endpoint.c +3 -1
@@ -722,13 +722,15 @@ static void ipa_endpoint_init_aggr(struct ipa_endpoint *endpoint)if (endpoint->data->aggregation) {if (!endpoint->toward_ipa) { +u32 buffer_size;bool close_eof;u32 limit; val |=u32_encode_bits (IPA_ENABLE_AGGR ,AGGR_EN_FMASK ); val |=u32_encode_bits (IPA_GENERIC ,AGGR_TYPE_FMASK ); - limit =ipa_aggr_size_kb (IPA_RX_BUFFER_SIZE ); + buffer_size =IPA_RX_BUFFER_SIZE -NET_SKB_PAD ; + limit =ipa_aggr_size_kb (buffer_size); val |=aggr_byte_limit_encoded (version, limit); limit =IPA_AGGR_TIME_LIMIT ;
drivers/nfc/pn533/pn533.c +3 -2
@@ -2789,13 +2789,14 @@ void pn53x_common_clean(struct pn533 *priv) {struct pn533_cmd *cmd, *n; +/* delete the timer before cleanup the worker */ +del_timer_sync (&priv->listen_timer); +flush_delayed_work (&priv->poll_work);destroy_workqueue (priv->wq);skb_queue_purge (&priv->resp_q); -del_timer (&priv->listen_timer); -list_for_each_entry_safe (cmd, n, &priv->cmd_queue, queue) {list_del (&cmd->queue);kfree (cmd);
drivers/pinctrl/sunxi/pinctrl-suniv-f1c100s.c +1 -1
@@ -204,7 +204,7 @@ static const struct sunxi_desc_pin suniv_f1c100s_pins[] = { SUNXI_FUNCTION(0x0, "gpio_in"), SUNXI_FUNCTION(0x1, "gpio_out"), SUNXI_FUNCTION(0x2, "lcd"), /* D20 */ - SUNXI_FUNCTION(0x3, "lvds1"), /* RX */ + SUNXI_FUNCTION(0x3, "uart2"), /* RX */ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)), SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15), SUNXI_FUNCTION(0x0, "gpio_in"),
fs/exfat/balloc.c +6 -2
@@ -148,7 +148,9 @@ int exfat_set_bitmap(struct inode *inode, unsigned int clu, bool sync)struct super_block *sb = inode->i_sb;struct exfat_sb_info *sbi =EXFAT_SB (sb); -WARN_ON (clu <EXFAT_FIRST_CLUSTER ); +if (!is_valid_cluster (sbi, clu)) +return -EINVAL ; + ent_idx =CLUSTER_TO_BITMAP_ENT (clu); i =BITMAP_OFFSET_SECTOR_INDEX (sb, ent_idx); b =BITMAP_OFFSET_BIT_IN_SECTOR (sb, ent_idx);
@@ -166,7 +168,9 @@ void exfat_clear_bitmap(struct inode *inode, unsigned int clu, bool sync)struct exfat_sb_info *sbi =EXFAT_SB (sb);struct exfat_mount_options *opts = &sbi->options; -WARN_ON (clu <EXFAT_FIRST_CLUSTER ); +if (!is_valid_cluster (sbi, clu)) +return ; + ent_idx =CLUSTER_TO_BITMAP_ENT (clu); i =BITMAP_OFFSET_SECTOR_INDEX (sb, ent_idx); b =BITMAP_OFFSET_BIT_IN_SECTOR (sb, ent_idx);
fs/exfat/exfat_fs.h +8 -0
@@ -381,6 +381,14 @@ static inline int exfat_sector_to_cluster(struct exfat_sb_info *sbi,EXFAT_RESERVED_CLUSTERS ; } +static inline bool is_valid_cluster (struct exfat_sb_info *sbi, +unsigned int clus) +{ +if (clus <EXFAT_FIRST_CLUSTER || sbi->num_clusters <= clus) +return false; +return true; +} +/* super.c */ int exfat_set_volume_dirty (struct super_block *sb);int exfat_clear_volume_dirty (struct super_block *sb);
fs/exfat/fatent.c +0 -8
@@ -81,14 +81,6 @@ int exfat_ent_set(struct super_block *sb, unsigned int loc,return 0 ; } -static inline bool is_valid_cluster (struct exfat_sb_info *sbi, -unsigned int clus) -{ -if (clus <EXFAT_FIRST_CLUSTER || sbi->num_clusters <= clus) -return false; -return true; -} -int exfat_ent_get (struct super_block *sb,unsigned int loc,unsigned int *content) {
fs/nfs/internal.h +1 -0
@@ -834,6 +834,7 @@ static inline bool nfs_error_is_fatal_on_server(int err)case 0 :case -ERESTARTSYS :case -EINTR : +case -ENOMEM :return false; }return nfs_error_is_fatal (err);
fs/nfsd/nfs4state.c +4 -8
@@ -7299,16 +7299,12 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp,if (sop->so_is_open_owner || !same_owner_str (sop, owner))continue ; -/* see if there are still any locks associated with it */ - lo =lockowner (sop); -list_for_each_entry (stp, &sop->so_stateids, st_perstateowner) { -if (check_for_locks (stp->st_stid.sc_file, lo)) { - status = nfserr_locks_held; -spin_unlock (&clp->cl_lock); -return status; - } +if (atomic_read (&sop->so_count) !=1 ) { +spin_unlock (&clp->cl_lock); +return nfserr_locks_held; } + lo =lockowner (sop);nfs4_get_stateowner (sop);break ; }
fs/ntfs3/super.c +7 -3
@@ -668,9 +668,11 @@ static u32 format_size_gb(const u64 bytes, u32 *mb)static u32 true_sectors_per_clst (const struct NTFS_BOOT *boot) { -return boot->sectors_per_clusters <=0x80 - ? boot->sectors_per_clusters - : (1u << (0 - boot->sectors_per_clusters)); +if (boot->sectors_per_clusters <=0x80 ) +return boot->sectors_per_clusters; +if (boot->sectors_per_clusters >=0xf4 )/* limit shift to 2MB max */ +return 1U << (0 - boot->sectors_per_clusters); +return -EINVAL ; }/*
@@ -713,6 +715,8 @@ static int ntfs_init_from_boot(struct super_block *sb, u32 sector_size,/* cluster size: 512, 1K, 2K, 4K, ... 2M */ sct_per_clst =true_sectors_per_clst (boot); +if ((int )sct_per_clst <0 ) + goto out;if (!is_power_of_2 (sct_per_clst)) goto out;
fs/pipe.c +19 -14
@@ -652,7 +652,7 @@ pipe_poll(struct file *filp, poll_table *wait)unsigned int head, tail;/* Epoll has some historical nasty semantics, this enables them */ - pipe->poll_usage =1 ; +WRITE_ONCE (pipe->poll_usage, true);/* * Reading pipe state only -- no need for acquiring the semaphore.
@@ -1244,30 +1244,33 @@ unsigned int round_pipe_size(unsigned long size)/* * Resize the pipe ring to a number of slots. +* +* Note the pipe can be reduced in capacity, but only if the current +* occupancy doesn't exceed nr_slots; if it does, EBUSY will be +* returned instead. */ int pipe_resize_ring (struct pipe_inode_info *pipe,unsigned int nr_slots) {struct pipe_buffer *bufs;unsigned int head, tail, mask, n; -/* -* We can shrink the pipe, if arg is greater than the ring occupancy. -* Since we don't expect a lot of shrink+grow operations, just free and -* allocate again like we would do for growing. If the pipe currently -* contains more buffers than arg, then return busy. -*/ - mask = pipe->ring_size -1 ; - head = pipe->head; - tail = pipe->tail; - n =pipe_occupancy (pipe->head, pipe->tail); -if (nr_slots < n) -return -EBUSY ; - bufs =kcalloc (nr_slots,sizeof (*bufs),GFP_KERNEL_ACCOUNT | __GFP_NOWARN);if (unlikely (!bufs))return -ENOMEM ; +spin_lock_irq (&pipe->rd_wait.lock); + mask = pipe->ring_size -1 ; + head = pipe->head; + tail = pipe->tail; + + n =pipe_occupancy (head, tail); +if (nr_slots < n) { +spin_unlock_irq (&pipe->rd_wait.lock); +kfree (bufs); +return -EBUSY ; + } +/* * The pipe array wraps around, so just start the new one at zero * and adjust the indices.
@@ -1299,6 +1302,8 @@ int pipe_resize_ring(struct pipe_inode_info *pipe, unsigned int nr_slots) pipe->tail = tail; pipe->head = head; +spin_unlock_irq (&pipe->rd_wait.lock); +/* This might have made more room for writers */ wake_up_interruptible (&pipe->wr_wait);return 0 ;
include/crypto/drbg.h +7 -3
@@ -105,6 +105,12 @@ struct drbg_test_data {struct drbg_string *testentropy;/* TEST PARAMETER: test entropy */ }; +enum drbg_seed_state { +DRBG_SEED_STATE_UNSEEDED , +DRBG_SEED_STATE_PARTIAL ,/* Seeded with !rng_is_initialized() */ +DRBG_SEED_STATE_FULL , +}; +struct drbg_state {struct mutex drbg_mutex;/* lock around DRBG */ unsigned char *V;/* internal state 10.1.1.1 1a) */
@@ -127,16 +133,14 @@ struct drbg_state {struct crypto_wait ctr_wait;/* CTR mode async wait obj */ struct scatterlist sg_in, sg_out;/* CTR mode SGLs */ -bool seeded;/* DRBG fully seeded? */ +enum drbg_seed_state seeded;/* DRBG fully seeded? */ bool pr;/* Prediction resistance enabled? */ bool fips_primed;/* Continuous test primed? */ unsigned char *prev;/* FIPS 140-2 continuous test value */ -struct work_struct seed_work;/* asynchronous seeding support */ struct crypto_rng *jent;const struct drbg_state_ops *d_ops;const struct drbg_core *core;struct drbg_string test_data; -struct notifier_block random_ready; };static inline __u8 drbg_statelen (struct drbg_state *drbg)
include/linux/pipe_fs_i.h +1 -1
@@ -71,7 +71,7 @@ struct pipe_inode_info {unsigned int files;unsigned int r_counter;unsigned int w_counter; -unsigned int poll_usage; +bool poll_usage;struct page *tmp_page;struct fasync_struct *fasync_readers;struct fasync_struct *fasync_writers;
include/net/netfilter/nf_conntrack_core.h +6 -1
@@ -58,8 +58,13 @@ static inline int nf_conntrack_confirm(struct sk_buff *skb)int ret =NF_ACCEPT ;if (ct) { -if (!nf_ct_is_confirmed (ct)) +if (!nf_ct_is_confirmed (ct)) { ret =__nf_conntrack_confirm (skb); + +if (ret ==NF_ACCEPT ) + ct = (struct nf_conn *)skb_nfct (skb); + } +if (likely (ret ==NF_ACCEPT ))nf_ct_deliver_cached_events (ct); }
kernel/bpf/stackmap.c +0 -1
@@ -119,7 +119,6 @@ static struct bpf_map *stack_map_alloc(union bpf_attr *attr)return ERR_PTR (-E2BIG ); cost = n_buckets *sizeof (struct stack_map_bucket *) +sizeof (*smap); - cost += n_buckets * (value_size +sizeof (struct stack_map_bucket )); smap =bpf_map_area_alloc (cost,bpf_map_attr_numa_node (attr));if (!smap)return ERR_PTR (-ENOMEM );
kernel/bpf/trampoline.c +12 -6
@@ -414,7 +414,7 @@ int bpf_trampoline_link_prog(struct bpf_prog *prog, struct bpf_trampoline *tr) {enum bpf_tramp_prog_type kind;int err =0 ; -int cnt; +int cnt =0 , i; kind =bpf_attach_type_to_tramp (prog);mutex_lock (&tr->mutex);
@@ -425,7 +425,10 @@ int bpf_trampoline_link_prog(struct bpf_prog *prog, struct bpf_trampoline *tr) err = -EBUSY ; goto out; } - cnt = tr->progs_cnt[BPF_TRAMP_FENTRY ] + tr->progs_cnt[BPF_TRAMP_FEXIT ]; + +for (i =0 ; i <BPF_TRAMP_MAX ; i++) + cnt += tr->progs_cnt[i]; +if (kind ==BPF_TRAMP_REPLACE ) {/* Cannot attach extension if fentry/fexit are in use. */ if (cnt) {
@@ -503,16 +506,19 @@ struct bpf_trampoline *bpf_trampoline_get(u64 key,void bpf_trampoline_put (struct bpf_trampoline *tr) { +int i; +if (!tr)return ;mutex_lock (&trampoline_mutex);if (!refcount_dec_and_test (&tr->refcnt)) goto out;WARN_ON_ONCE (mutex_is_locked (&tr->mutex)); -if (WARN_ON_ONCE (!hlist_empty (&tr->progs_hlist[BPF_TRAMP_FENTRY ]))) - goto out; -if (WARN_ON_ONCE (!hlist_empty (&tr->progs_hlist[BPF_TRAMP_FEXIT ]))) - goto out; + +for (i =0 ; i <BPF_TRAMP_MAX ; i++) +if (WARN_ON_ONCE (!hlist_empty (&tr->progs_hlist[i]))) + goto out; +/* This code will be executed even when the last bpf_tramp_image * is alive. All progs are detached from the trampoline and the * trampoline image is patched with jmp into epilogue to skip
kernel/bpf/verifier.c +16 -1
@@ -4587,6 +4587,11 @@ static int check_helper_mem_access(struct bpf_verifier_env *env, int regno,return check_packet_access (env, regno, reg->off, access_size, zero_size_allowed);case PTR_TO_MAP_KEY : +if (meta && meta->raw_mode) { +verbose (env,"R%d cannot write into %s\n" , regno, +reg_type_str (env, reg->type)); +return -EACCES ; + }return check_mem_region_access (env, regno, reg->off, access_size, reg->map_ptr->key_size, false);case PTR_TO_MAP_VALUE :
@@ -4597,13 +4602,23 @@ static int check_helper_mem_access(struct bpf_verifier_env *env, int regno,return check_map_access (env, regno, reg->off, access_size, zero_size_allowed);case PTR_TO_MEM : +if (type_is_rdonly_mem (reg->type)) { +if (meta && meta->raw_mode) { +verbose (env,"R%d cannot write into %s\n" , regno, +reg_type_str (env, reg->type)); +return -EACCES ; + } + }return check_mem_region_access (env, regno, reg->off, access_size, reg->mem_size, zero_size_allowed);case PTR_TO_BUF :if (type_is_rdonly_mem (reg->type)) { -if (meta && meta->raw_mode) +if (meta && meta->raw_mode) { +verbose (env,"R%d cannot write into %s\n" , regno, +reg_type_str (env, reg->type));return -EACCES ; + } buf_info ="rdonly" ; max_access = &env->prog->aux->max_rdonly_access;
lib/Kconfig +2 -0
@@ -121,6 +121,8 @@ config INDIRECT_IOMEM_FALLBACK mmio accesses when the IO memory address is not a registered emulated region. +source "lib/crypto/Kconfig" + config CRC_CCITT tristate "CRC-CCITT functions" help
lib/assoc_array.c +8 -0
@@ -1462,6 +1462,7 @@ int assoc_array_gc(struct assoc_array *array,struct assoc_array_ptr *cursor, *ptr;struct assoc_array_ptr *new_root, *new_parent, **new_ptr_pp;unsigned long nr_leaves_on_tree; +bool retained;int keylen, slot, nr_free, next_slot, i;pr_devel ("-->%s()\n" , __func__);
@@ -1538,6 +1539,7 @@ int assoc_array_gc(struct assoc_array *array, goto descend; } +retry_compress:pr_devel ("-- compress node %p --\n" , new_n);/* Count up the number of empty slots in this node and work out the
@@ -1555,6 +1557,7 @@ int assoc_array_gc(struct assoc_array *array,pr_devel ("free=%d, leaves=%lu\n" , nr_free, new_n->nr_leaves_on_branch);/* See what we can fold in */ + retained = false; next_slot =0 ;for (slot =0 ; slot <ASSOC_ARRAY_FAN_OUT ; slot++) {struct assoc_array_shortcut *s;
@@ -1604,9 +1607,14 @@ int assoc_array_gc(struct assoc_array *array,pr_devel ("[%d] retain node %lu/%d [nx %d]\n" , slot, child->nr_leaves_on_branch, nr_free +1 , next_slot); + retained = true; } } +if (retained && new_n->nr_leaves_on_branch <=ASSOC_ARRAY_FAN_OUT ) { +pr_devel ("internal nodes remain despite enough space, retrying\n" ); + goto retry_compress; + }pr_devel ("after: %lu\n" , new_n->nr_leaves_on_branch); nr_leaves_on_tree = new_n->nr_leaves_on_branch;
lib/crypto/Kconfig +12 -5
@@ -1,5 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 +menu "Crypto library routines" + config CRYPTO_LIB_AES tristate
@@ -31,7 +33,7 @@ config CRYPTO_ARCH_HAVE_LIB_CHACHA config CRYPTO_LIB_CHACHA_GENERIC tristate - select CRYPTO_ALGAPI + select XOR_BLOCKS help This symbol can be depended upon by arch implementations of the ChaCha library interface that require the generic code as a
@@ -40,7 +42,8 @@ config CRYPTO_LIB_CHACHA_GENERIC of CRYPTO_LIB_CHACHA. config CRYPTO_LIB_CHACHA - tristate + tristate "ChaCha library interface" + depends on CRYPTO depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA select CRYPTO_LIB_CHACHA_GENERIC if CRYPTO_ARCH_HAVE_LIB_CHACHA=n help
@@ -65,7 +68,7 @@ config CRYPTO_LIB_CURVE25519_GENERIC of CRYPTO_LIB_CURVE25519. config CRYPTO_LIB_CURVE25519 - tristate + tristate "Curve25519 scalar multiplication library" depends on CRYPTO_ARCH_HAVE_LIB_CURVE25519 || !CRYPTO_ARCH_HAVE_LIB_CURVE25519 select CRYPTO_LIB_CURVE25519_GENERIC if CRYPTO_ARCH_HAVE_LIB_CURVE25519=n help
@@ -100,7 +103,7 @@ config CRYPTO_LIB_POLY1305_GENERIC of CRYPTO_LIB_POLY1305. config CRYPTO_LIB_POLY1305 - tristate + tristate "Poly1305 library interface" depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305 select CRYPTO_LIB_POLY1305_GENERIC if CRYPTO_ARCH_HAVE_LIB_POLY1305=n help
@@ -109,14 +112,18 @@ config CRYPTO_LIB_POLY1305 is available and enabled. config CRYPTO_LIB_CHACHA20POLY1305 - tristate + tristate "ChaCha20-Poly1305 AEAD support (8-byte nonce library version)" depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305 + depends on CRYPTO select CRYPTO_LIB_CHACHA select CRYPTO_LIB_POLY1305 + select CRYPTO_ALGAPI config CRYPTO_LIB_SHA256 tristate config CRYPTO_LIB_SM4 tristate + +endmenu
lib/percpu-refcount.c +1 -0
@@ -76,6 +76,7 @@ int percpu_ref_init(struct percpu_ref *ref, percpu_ref_func_t *release, data =kzalloc (sizeof (*ref->data), gfp);if (!data) {free_percpu ((void __percpu *)ref->percpu_count_ptr); + ref->percpu_count_ptr =0 ;return -ENOMEM ; }
mm/zsmalloc.c +33 -4
@@ -1743,11 +1743,40 @@ static enum fullness_group putback_zspage(struct size_class *class,*/ static void lock_zspage (struct zspage *zspage) { -struct page *page =get_first_page (zspage); +struct page *curr_page, *page; -do { -lock_page (page); - }while ((page =get_next_page (page)) !=NULL ); +/* +* Pages we haven't locked yet can be migrated off the list while we're +* trying to lock them, so we need to be careful and only attempt to +* lock each page under migrate_read_lock(). Otherwise, the page we lock +* may no longer belong to the zspage. This means that we may wait for +* the wrong page to unlock, so we must take a reference to the page +* prior to waiting for it to unlock outside migrate_read_lock(). +*/ +while (1 ) { +migrate_read_lock (zspage); + page =get_first_page (zspage); +if (trylock_page (page)) +break ; +get_page (page); +migrate_read_unlock (zspage); +wait_on_page_locked (page); +put_page (page); + } + + curr_page = page; +while ((page =get_next_page (curr_page))) { +if (trylock_page (page)) { + curr_page = page; + }else { +get_page (page); +migrate_read_unlock (zspage); +wait_on_page_locked (page); +put_page (page); +migrate_read_lock (zspage); + } + } +migrate_read_unlock (zspage); }static int zs_init_fs_context (struct fs_context *fc)
net/core/filter.c +2 -2
@@ -1688,7 +1688,7 @@ BPF_CALL_5(bpf_skb_store_bytes, struct sk_buff *, skb, u32, offset,if (unlikely (flags & ~(BPF_F_RECOMPUTE_CSUM |BPF_F_INVALIDATE_HASH )))return -EINVAL ; -if (unlikely (offset >0xffff )) +if (unlikely (offset >INT_MAX ))return -EFAULT ;if (unlikely (bpf_try_make_writable (skb, offset + len)))return -EFAULT ;
@@ -1723,7 +1723,7 @@ BPF_CALL_4(bpf_skb_load_bytes, const struct sk_buff *, skb, u32, offset, {void *ptr; -if (unlikely (offset >0xffff )) +if (unlikely (offset >INT_MAX )) goto err_clear; ptr =skb_header_pointer (skb, offset, len, to);
net/key/af_key.c +3 -3
@@ -2900,7 +2900,7 @@ static int count_ah_combs(const struct xfrm_tmpl *t)break ;if (!aalg->pfkey_supported)continue ; -if (aalg_tmpl_set (t, aalg)) +if (aalg_tmpl_set (t, aalg) && aalg->available) sz +=sizeof (struct sadb_comb ); }return sz +sizeof (struct sadb_prop );
@@ -2918,7 +2918,7 @@ static int count_esp_combs(const struct xfrm_tmpl *t)if (!ealg->pfkey_supported)continue ; -if (!(ealg_tmpl_set (t, ealg))) +if (!(ealg_tmpl_set (t, ealg) && ealg->available))continue ;for (k =1 ; ; k++) {
@@ -2929,7 +2929,7 @@ static int count_esp_combs(const struct xfrm_tmpl *t)if (!aalg->pfkey_supported)continue ; -if (aalg_tmpl_set (t, aalg)) +if (aalg_tmpl_set (t, aalg) && aalg->available) sz +=sizeof (struct sadb_comb ); } }
net/netfilter/nf_tables_api.c +68 -26
193 lines not on this page · raw message
sound/usb/clock.c +11 -0
@@ -572,6 +572,17 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip,/* continue processing */ } +/* FIXME - TEAC devices require the immediate interface setup */ +if (USB_ID_VENDOR (chip->usb_id) ==0x0644 ) { +bool cur_base_48k = (rate %48000 ==0 ); +bool prev_base_48k = (prev_rate %48000 ==0 ); +if (cur_base_48k != prev_base_48k) { +usb_set_interface (chip->dev, fmt->iface, fmt->altsetting); +if (chip->quirk_flags &QUIRK_FLAG_IFACE_DELAY ) +msleep (50 ); + } + } + validation:/* validate clock after rate change */ if (!uac_clock_source_is_valid (chip, fmt, clock))
sound/usb/pcm.c +11 -6
@@ -439,16 +439,21 @@ static int configure_endpoints(struct snd_usb_audio *chip,/* stop any running stream beforehand */ if (stop_endpoints (subs, false))sync_pending_stops (subs); +if (subs->sync_endpoint) { + err =snd_usb_endpoint_configure (chip, subs->sync_endpoint); +if (err <0 ) +return err; + } err =snd_usb_endpoint_configure (chip, subs->data_endpoint);if (err <0 )return err;snd_usb_set_format_quirk (subs, subs->cur_audiofmt); - } - -if (subs->sync_endpoint) { - err =snd_usb_endpoint_configure (chip, subs->sync_endpoint); -if (err <0 ) -return err; + }else { +if (subs->sync_endpoint) { + err =snd_usb_endpoint_configure (chip, subs->sync_endpoint); +if (err <0 ) +return err; + } }return 0 ;
sound/usb/quirks-table.h +3 -0
@@ -2672,6 +2672,7 @@ YAMAHA_DEVICE(0x7010, "UB99"), .altset_idx = 1, .attributes = 0, .endpoint = 0x82, + .ep_idx = 1, .ep_attr = USB_ENDPOINT_XFER_ISOC, .datainterval = 1, .maxpacksize = 0x0126,
@@ -2875,6 +2876,7 @@ YAMAHA_DEVICE(0x7010, "UB99"), .altset_idx = 1, .attributes = 0x4, .endpoint = 0x81, + .ep_idx = 1, .ep_attr =USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ASYNC, .maxpacksize = 0x130,
@@ -3391,6 +3393,7 @@ YAMAHA_DEVICE(0x7010, "UB99"), .altset_idx = 1, .attributes = 0, .endpoint = 0x03, + .ep_idx = 1, .rates = SNDRV_PCM_RATE_96000, .ep_attr =USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ASYNC,
sound/usb/quirks.c +2 -0
@@ -1822,6 +1822,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = { QUIRK_FLAG_IGNORE_CTL_ERROR),DEVICE_FLG (0x06f8 ,0xd002 ,/* Hercules DJ Console (Macintosh Edition) */ QUIRK_FLAG_IGNORE_CTL_ERROR ), +DEVICE_FLG (0x0711 ,0x5800 ,/* MCT Trigger 5 USB-to-HDMI */ +QUIRK_FLAG_GET_SAMPLE_RATE ),DEVICE_FLG (0x074d ,0x3553 ,/* Outlaw RR2150 (Micronas UAC3553B) */ QUIRK_FLAG_GET_SAMPLE_RATE ), DEVICE_FLG(0x08bb, 0x2702, /* LineX FM Transmitter */