Linux 4.19.194
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.194 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.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/kvm/sys_regs.c | 42 ++-- arch/x86/include/asm/apic.h | 1 arch/x86/kernel/apic/apic.c | 1 arch/x86/kernel/apic/vector.c | 20 + arch/x86/kvm/svm.c | 8 drivers/acpi/bus.c | 42 +--- drivers/firmware/efi/cper.c | 4 drivers/firmware/efi/memattr.c | 5 drivers/hid/hid-multitouch.c | 10 drivers/hid/i2c-hid/i2c-hid-core.c | 4 drivers/hid/usbhid/hid-pidff.c | 1 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 1 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 3 drivers/net/usb/cdc_ncm.c | 12 + drivers/usb/dwc2/core_intr.c | 4 drivers/vfio/pci/Kconfig | 1 drivers/vfio/pci/vfio_pci_config.c | 2 drivers/vfio/platform/vfio_platform_common.c | 2 drivers/xen/xen-pciback/vpci.c | 14 - fs/btrfs/extent-tree.c | 12 - fs/btrfs/file-item.c | 10 fs/btrfs/inode.c | 12 + fs/btrfs/tree-log.c | 13 - fs/ext4/extents.c | 43 ++-- fs/ocfs2/file.c | 55 ++++- include/linux/perf_event.h | 5 include/linux/usb/usbnet.h | 2 include/net/caif/caif_dev.h | 2 include/net/caif/cfcnfg.h | 2 include/net/caif/cfserl.h | 1 include/uapi/linux/bpf.h | 14 + init/main.c | 2 kernel/bpf/syscall.c | 7 kernel/bpf/verifier.c | 3 kernel/events/core.c | 62 +++--- kernel/sched/fair.c | 7 mm/hugetlb.c | 14 + net/bluetooth/hci_core.c | 7 net/bluetooth/hci_sock.c | 4 net/caif/caif_dev.c | 13 - net/caif/caif_usb.c | 14 + net/caif/cfcnfg.c | 16 + net/caif/cfserl.c | 5 net/ieee802154/nl-mac.c | 4 net/ieee802154/nl-phy.c | 4 net/netfilter/ipvs/ip_vs_ctl.c | 2 net/netfilter/nfnetlink_cthelper.c | 8 net/nfc/llcp_sock.c | 2 net/tipc/bearer.c | 94 ++++++--- net/wireless/core.h | 2 net/wireless/nl80211.c | 7 net/wireless/util.c | 39 +++ samples/vfio-mdev/mdpy-fb.c | 13 - sound/core/timer.c | 3 sound/pci/hda/patch_realtek.c | 1 sound/usb/mixer_quirks.c | 2 tools/include/uapi/linux/bpf.h | 14 + tools/lib/bpf/bpf.c | 8 tools/lib/bpf/bpf.h | 2 tools/testing/selftests/bpf/test_align.c | 4 tools/testing/selftests/bpf/test_verifier.c | 224 +++++++++++++++------- 62 files changed, 663 insertions(+), 274 deletions(-)
Ahelenia Ziemiańska (1):
HID: multitouch: require Finger field to mark Win8 reports as MT
Anand Jain (1):
btrfs: fix unmountable seed device after fstrim
Anant Thazhemadam (1):
nl80211: validate key indexes for cfg80211_registered_device
Arnd Bergmann (1):
HID: i2c-hid: fix format string mismatch
Björn Töpel (2):
selftests/bpf: add "any alignment" annotation for some tests selftests/bpf: Avoid running unprivileged tests with alignment requirements
Carlos M (1):
ALSA: hda: Fix for mute key LED for HP Pavilion 15-CK0xx
Cheng Jian (1):
sched/fair: Optimize select_idle_cpu
Daniel Borkmann (2):
bpf: fix test suite to enable all unpriv program types
bpf: test make sure to run unpriv test cases in test_verifier
David S. Miller (4):
bpf: Add BPF_F_ANY_ALIGNMENT.
bpf: Adjust F_NEEDS_EFFICIENT_UNALIGNED_ACCESS handling in test_verifier.c
bpf: Make more use of 'any' alignment in test_verifier.c
bpf: Apply F_NEEDS_EFFICIENT_UNALIGNED_ACCESS to more ACCEPT test cases.
Erik Schmauss (1):
ACPI: probe ECDT before loading AML tables regardless of module-level code flag
Grant Grundler (1):
net: usb: cdc_ncm: don't spew notifications
Greg Kroah-Hartman (1):
Linux 4.19.194
Heiner Kallweit (1):
efi: Allow EFI_MEMORY_XP and EFI_MEMORY_RO both to be cleared
Hoang Le (2):
tipc: add extack messages for bearer/media failure
tipc: fix unique bearer names sanity check
Ian Rogers (1):
perf/cgroups: Don't rotate events for cgroups unnecessarily
Jan Beulich (1):
xen-pciback: redo VF placement in the virtual topology
Joe Stringer (1):
selftests/bpf: Generalize dummy program types
Josef Bacik (4):
btrfs: mark ordered extent and inode with error if we fail to finish
btrfs: fix error handling in btrfs_del_csums
btrfs: return errors from btrfs_del_csums in cleanup_ref_head
btrfs: fixup error handling in fixup_inode_link_counts
Julian Anastasov (1):
ipvs: ignore IP_VS_SVC_F_HASHED flag when adding service
Junxiao Bi (1):
ocfs2: fix data corruption by fallocate
Krzysztof Kozlowski (1):
nfc: fix NULL ptr dereference in llcp_sock_getname() after failed connect
Lin Ma (2):
Bluetooth: fix the erroneous flush_work() order
Bluetooth: use correct lock to prevent UAF of hdev object
Magnus Karlsson (1):
ixgbevf: add correct exception tracing for XDP
Marc Zyngier (1):
KVM: arm64: Fix debug register indexing
Mark Rutland (1):
pid: take a reference when initializing cad_pid
Max Gurtovoy (1):
vfio/platform: fix module_put call in error flow
Michael Chan (1):
bnxt_en: Remove the setting of dev_port.
Mina Almasry (1):
mm, hugetlb: fix simple resv_huge_pages underflow on UFFDIO_COPY
Pablo Neira Ayuso (1):
netfilter: nfnetlink_cthelper: hit EBUSY on updates if size mismatches
Pavel Skripkin (4):
net: caif: added cfserl_release function
net: caif: add proper error handling
net: caif: fix memory leak in caif_device_notify
net: caif: fix memory leak in cfusbl_device_notify
Phil Elwell (1):
usb: dwc2: Fix build in periphal-only mode
Pierre-Louis Bossart (1):
ALSA: usb: update old-style static const declaration
Rafael J. Wysocki (1):
ACPI: EC: Look for ECDT EC after calling acpi_load_tables()
Randy Dunlap (1):
vfio/pci: zap_vma_ptes() needs MMU
Rasmus Villemoes (1):
efi: cper: fix snprintf() use in cper_dimm_err_location()
Sean Christopherson (1):
KVM: SVM: Truncate GPR value for DR and CR accesses in !64-bit mode
Song Liu (1):
perf/core: Fix corner case in perf_rotate_context()
Takashi Iwai (1):
ALSA: timer: Fix master timer notification
Thomas Gleixner (1):
x86/apic: Mark _all_ legacy interrupts when IO/APIC is missing
Wei Yongjun (2):
samples: vfio-mdev: fix error handing in mdpy_fb_probe()
ieee802154: fix error return code in ieee802154_llsec_getparams()
Ye Bin (1):
ext4: fix bug on in ext4_es_cache_extent as ext4_split_extent_at failed
Zhen Lei (3):
vfio/pci: Fix error return code in vfio_ecap_init()
HID: pidff: fix error return code in hid_pidff_init()
ieee802154: fix error return code in ieee802154_add_iface()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 193 +SUBLEVEL = 194 EXTRAVERSION = NAME = "People's Front"
arch/arm64/kvm/sys_regs.c +21 -21
162 lines not on this page · raw message
arch/x86/include/asm/apic.h +1 -0
@@ -172,6 +172,7 @@ static inline int apic_is_clustered_box(void)extern int setup_APIC_eilvt (u8 lvt_off,u8 vector,u8 msg_type,u8 mask);extern void lapic_assign_system_vectors (void );extern void lapic_assign_legacy_vector (unsigned int isairq,bool replace); +extern void lapic_update_legacy_vectors (void );extern void lapic_online (void );extern void lapic_offline (void );
arch/x86/kernel/apic/apic.c +1 -0
@@ -2507,6 +2507,7 @@ void __init apic_bsp_setup(bool upmode)end_local_APIC_setup ();irq_remap_enable_fault_handling ();setup_IO_APIC (); +lapic_update_legacy_vectors (); }#ifdef CONFIG_UP_LATE_INIT
arch/x86/kernel/apic/vector.c +20 -0
@@ -682,6 +682,26 @@ void lapic_assign_legacy_vector(unsigned int irq, bool replace)irq_matrix_assign_system (vector_matrix,ISA_IRQ_VECTOR (irq), replace); } +void __init lapic_update_legacy_vectors (void ) +{ +unsigned int i; + +if (IS_ENABLED (CONFIG_X86_IO_APIC ) && nr_ioapics >0 ) +return ; + +/* +* If the IO/APIC is disabled via config, kernel command line or +* lack of enumeration then all legacy interrupts are routed +* through the PIC. Make sure that they are marked as legacy +* vectors. PIC_CASCADE_IRQ has already been marked in +* lapic_assign_system_vectors(). +*/ +for (i =0 ; i <nr_legacy_irqs (); i++) { +if (i !=PIC_CASCADE_IR ) +lapic_assign_legacy_vector (i, true); + } +} +void __init lapic_assign_system_vectors (void ) {unsigned int i, vector =0 ;
arch/x86/kvm/svm.c +4 -4
@@ -4033,7 +4033,7 @@ static int cr_interception(struct vcpu_svm *svm) err =0 ;if (cr >=16 ) {/* mov to cr */ cr -=16 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);switch (cr) {case 0 :if (!check_selective_cr0_intercepted (svm, val))
@@ -4078,7 +4078,7 @@ static int cr_interception(struct vcpu_svm *svm)kvm_queue_exception (&svm->vcpu,UD_VECTOR );return 1 ; } -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }return kvm_complete_insn_gp (&svm->vcpu, err); }
@@ -4108,13 +4108,13 @@ static int dr_interception(struct vcpu_svm *svm)if (dr >=16 ) {/* mov to DRn */ if (!kvm_require_dr (&svm->vcpu, dr -16 ))return 1 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);kvm_set_dr (&svm->vcpu, dr -16 , val); }else {if (!kvm_require_dr (&svm->vcpu, dr))return 1 ;kvm_get_dr (&svm->vcpu, dr, &val); -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }return kvm_skip_emulated_instruction (&svm->vcpu);
drivers/acpi/bus.c +15 -27
57 lines not on this page · raw message
drivers/firmware/efi/cper.c +1 -3
@@ -275,8 +275,7 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg)if (!msg || !(mem->validation_bits &CPER_MEM_VALID_MODULE_HANDLE ))return 0 ; - n =0 ; - len =CPER_REC_LEN -1 ; + len =CPER_REC_LEN ;dmi_memdev_name (mem->mem_dev_handle, &bank, &device);if (bank && device) n =snprintf (msg, len,"DIMM location: %s %s " , bank, device);
@@ -285,7 +284,6 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg)"DIMM location: not present. DMI handle: 0x%.4x " , mem->mem_dev_handle); - msg[n] ='\0' ;return n; }
drivers/firmware/efi/memattr.c +0 -5
@@ -69,11 +69,6 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out)return false; } -if (!(in->attribute & (EFI_MEMORY_RO |EFI_MEMORY_XP ))) { -pr_warn ("Entry attributes invalid: RO and XP bits both cleared\n" ); -return false; - } -if (PAGE_SIZE >EFI_PAGE_SIZE && (!PAGE_ALIGNED (in->phys_addr) || !PAGE_ALIGNED (in->num_pages <<EFI_PAGE_SHIFT ))) {
drivers/hid/hid-multitouch.c +7 -3
@@ -588,9 +588,13 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,if (!(HID_MAIN_ITEM_VARIABLE & field->flags))continue ; -for (n =0 ; n < field->report_count; n++) { -if (field->usage[n].hid ==HID_DG_CONTACTID ) - rdata->is_mt_collection = true; +if (field->logical ==HID_DG_FINGER || td->hdev->group !=HID_GROUP_MULTITOUCH_WIN_8 ) { +for (n =0 ; n < field->report_count; n++) { +if (field->usage[n].hid ==HID_DG_CONTACTID ) { + rdata->is_mt_collection = true; +break ; + } + } } }
drivers/hid/i2c-hid/i2c-hid-core.c +2 -2
@@ -1160,8 +1160,8 @@ static int i2c_hid_probe(struct i2c_client *client, hid->vendor =le16_to_cpu (ihid->hdesc.wVendorID); hid->product =le16_to_cpu (ihid->hdesc.wProductID); -snprintf (hid->name,sizeof (hid->name),"%s %04hX:%04hX" , - client->name, hid->vendor, hid->product); +snprintf (hid->name,sizeof (hid->name),"%s %04X:%04X" , + client->name, (u16 )hid->vendor, (u16 )hid->product);strlcpy (hid->phys,dev_name (&client->dev),sizeof (hid->phys)); ihid->quirks =i2c_hid_lookup_quirk (hid->vendor, hid->product);
drivers/hid/usbhid/hid-pidff.c +1 -0
@@ -1304,6 +1304,7 @@ int hid_pidff_init(struct hid_device *hid)if (pidff->pool[PID_DEVICE_MANAGED_POOL ].value && pidff->pool[PID_DEVICE_MANAGED_POOL ].value[0 ] ==0 ) { + error = -EPERM ;hid_notice (hid,"device does not support device managed pool\n" ); goto fail;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +0 -1
@@ -5252,7 +5252,6 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) pf->fw_fid =le16_to_cpu (resp->fid); pf->port_id =le16_to_cpu (resp->port_id); - bp->dev->dev_port = pf->port_id;memcpy (pf->mac_addr, resp->mac_address,ETH_ALEN ); pf->first_vf_id =le16_to_cpu (resp->first_vf_id); pf->max_vfs =le16_to_cpu (resp->max_vfs);
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +3 -0
@@ -1071,11 +1071,14 @@ static struct sk_buff *ixgbevf_run_xdp(struct ixgbevf_adapter *adapter,case XDP_TX : xdp_ring = adapter->xdp_ring[rx_ring->queue_index]; result =ixgbevf_xmit_xdp_ring (xdp_ring, xdp); +if (result ==IXGBEVF_XDP_CONSUMED ) + goto out_failure;break ;default :bpf_warn_invalid_xdp_action (act);/* fallthrough */ case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act);/* fallthrough -- handle aborts by dropping packet */ case XDP_DROP :
drivers/net/usb/cdc_ncm.c +11 -1
@@ -1590,6 +1590,15 @@ cdc_ncm_speed_change(struct usbnet *dev,uint32_t rx_speed =le32_to_cpu (data->DLBitRRate);uint32_t tx_speed =le32_to_cpu (data->ULBitRate); +/* if the speed hasn't changed, don't report it. +* RTL8156 shipped before 2021 sends notification about every 32ms. +*/ +if (dev->rx_speed == rx_speed && dev->tx_speed == tx_speed) +return ; + + dev->rx_speed = rx_speed; + dev->tx_speed = tx_speed; +/* * Currently the USB-NET API does not support reporting the actual * device speed. Do print it instead.
@@ -1633,7 +1642,8 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)* USB_CDC_NOTIFY_NETWORK_CONNECTION notification shall be * sent by device after USB_CDC_NOTIFY_SPEED_CHANGE. */ -usbnet_link_change (dev, !!event->wValue,0 ); +if (netif_carrier_ok (dev->net) != !!event->wValue) +usbnet_link_change (dev, !!event->wValue,0 );break ;case USB_CDC_NOTIFY_SPEED_CHANGE :
drivers/usb/dwc2/core_intr.c +4 -0
@@ -700,7 +700,11 @@ static inline void dwc_handle_gpwrdn_disc_det(struct dwc2_hsotg *hsotg,dwc2_writel (hsotg, gpwrdn_tmp,GPWRDN ); hsotg->hibernated =0 ; + +#if IS_ENABLED (CONFIG_USB_DWC2_HOST ) || \ +IS_ENABLED (CONFIG_USB_DWC2_DUAL_ROLE ) hsotg->bus_suspended =0 ; +#endif if (gpwrdn &GPWRDN_IDSTS ) { hsotg->op_state =OTG_STATE_B_PERIPHERAL ;
drivers/vfio/pci/Kconfig +1 -0
@@ -1,6 +1,7 @@ config VFIO_PCI tristate "VFIO support for PCI devices" depends on VFIO && PCI && EVENTFD + depends on MMU select VFIO_VIRQFD select IRQ_BYPASS_MANAGER help
drivers/vfio/pci/vfio_pci_config.c +1 -1
@@ -1579,7 +1579,7 @@ static int vfio_ecap_init(struct vfio_pci_device *vdev)if (len ==0xFF ) { len =vfio_ext_cap_len (vdev, ecap, epos);if (len <0 ) -return ret; +return len; } }
drivers/vfio/platform/vfio_platform_common.c +1 -1
@@ -295,7 +295,7 @@ static int vfio_platform_open(void *device_data)vfio_platform_regions_cleanup (vdev); err_reg:mutex_unlock (&driver_lock); -module_put (THIS_MODULE ); +module_put (vdev->parent_module);return ret; }
drivers/xen/xen-pciback/vpci.c +8 -6
@@ -69,7 +69,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, struct pci_dev *dev, int devid, publish_pci_dev_cb publish_cb) { - int err = 0, slot, func = -1; + int err = 0, slot, func = PCI_FUNC(dev->devfn);struct pci_dev_entry *t, *dev_entry;struct vpci_dev_data *vpci_dev = pdev->pci_dev_data;
@@ -94,23 +94,26 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,/* * Keep multi-function devices together on the virtual PCI bus, except -* virtual functions. +* that we want to keep virtual functions at func 0 on their own. They +* aren't multi-function devices and hence their presence at func 0 +* may cause guests to not scan the other functions. */ -if (!dev->is_virtfn) { +if (!dev->is_virtfn || func) {for (slot =0 ; slot <PCI_SLOT_MAX ; slot++) {if (list_empty (&vpci_dev->dev_list[slot]))continue ; t =list_entry (list_first (&vpci_dev->dev_list[slot]), struct pci_dev_entry, list); +if (t->dev->is_virtfn && !PCI_FUNC (t->dev->devfn)) +continue ;if (match_slot (dev, t->dev)) {pr_info ("vpci: %s: assign to virtual slot %d func %d\n" ,pci_name (dev), slot, -PCI_FUNC (dev->devfn)); + func);list_add_tail (&dev_entry->list, &vpci_dev->dev_list[slot]); - func =PCI_FUNC (dev->devfn); goto unlock; } }
@@ -123,7 +126,6 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, pci_name(dev), slot);list_add_tail (&dev_entry->list, &vpci_dev->dev_list[slot]); - func = dev->is_virtfn ?0 :PCI_FUNC (dev->devfn); goto unlock; } }
fs/btrfs/extent-tree.c +8 -4
@@ -1984,16 +1984,20 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,for (i =0 ; i < bbio->num_stripes; i++, stripe++) {u64 bytes;struct request_queue *req_q; +struct btrfs_device *device = stripe->dev; -if (!stripe->dev->bdev) { +if (!device->bdev) {ASSERT (btrfs_test_opt (fs_info,DEGRADED ));continue ; } - req_q =bdev_get_queue (stripe->dev->bdev); + req_q =bdev_get_queue (device->bdev);if (!blk_queue_discard (req_q))continue ; - ret =btrfs_issue_discard (stripe->dev->bdev, +if (!test_bit (BTRFS_DEV_STATE_WRITEABLE , &device->dev_state)) +continue ; + + ret =btrfs_issue_discard (device->bdev, stripe->physical, stripe->length, &bytes);
@@ -2501,7 +2505,7 @@ static int cleanup_ref_head(struct btrfs_trans_handle *trans, head->qgroup_reserved);btrfs_delayed_ref_unlock (head);btrfs_put_delayed_ref_head (head); -return 0 ; +return ret; }/*
fs/btrfs/file-item.c +5 -5
@@ -586,7 +586,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans,u64 end_byte = bytenr + len;u64 csum_end;struct extent_buffer *leaf; -int ret; +int ret =0 ;u16 csum_size =btrfs_super_csum_size (fs_info->super_copy);int blocksize_bits = fs_info->sb->s_blocksize_bits;
@@ -605,6 +605,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, path->leave_spinning =1 ; ret =btrfs_search_slot (trans, root, &key, path,-1 ,1 );if (ret >0 ) { + ret =0 ;if (path->slots[0 ] ==0 )break ; path->slots[0 ]--;
@@ -661,7 +662,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, ret =btrfs_del_items (trans, root, path, path->slots[0 ], del_nr);if (ret) - goto out; +break ;if (key.offset == bytenr)break ; }else if (key.offset < bytenr && csum_end > end_byte) {
@@ -705,8 +706,9 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, ret =btrfs_split_item (trans, root, path, &key, offset);if (ret && ret != -EAGAIN ) {btrfs_abort_transaction (trans, ret); - goto out; +break ; } + ret =0 ; key.offset = end_byte -1 ; }else {
@@ -716,8 +718,6 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, }btrfs_release_path (path); } - ret =0 ; -out:btrfs_free_path (path);return ret; }
fs/btrfs/inode.c +12 -0
@@ -3162,6 +3162,18 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)if (ret || truncated) {u64 start, end; +/* +* If we failed to finish this ordered extent for any reason we +* need to make sure BTRFS_ORDERED_IOERR is set on the ordered +* extent, and mark the inode with the error if it wasn't +* already set. Any error during writeback would have already +* set the mapping error, so we need to set it if we're the ones +* marking this ordered extent as failed. +*/ +if (ret && !test_and_set_bit (BTRFS_ORDERED_IOERR , + &ordered_extent->flags)) +mapping_set_error (ordered_extent->inode->i_mapping, -EIO ); +if (truncated) start = ordered_extent->file_offset + logical_len;else
fs/btrfs/tree-log.c +7 -6
@@ -1699,6 +1699,7 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,break ;if (ret ==1 ) { + ret =0 ;if (path->slots[0 ] ==0 )break ; path->slots[0 ]--;
@@ -1711,17 +1712,19 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, ret =btrfs_del_item (trans, root, path);if (ret) - goto out; +break ;btrfs_release_path (path); inode =read_one_inode (root, key.offset); -if (!inode) -return -EIO ; +if (!inode) { + ret = -EIO ; +break ; + } ret =fixup_inode_link_count (trans, root, inode);iput (inode);if (ret) - goto out; +break ;/* * fixup on a directory may create new entries,
@@ -1730,8 +1733,6 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,*/ key.offset = (u64)-1 ; } - ret =0 ; -out:btrfs_release_path (path);return ret; }
fs/ext4/extents.c +23 -20
60 lines not on this page · raw message
fs/ocfs2/file.c +50 -5
91 lines not on this page · raw message
include/linux/perf_event.h +5 -0
@@ -747,6 +747,11 @@ struct perf_event_context {int nr_stat;int nr_freq;int rotate_disable; +/* +* Set when nr_events != nr_active, except tolerant to events not +* necessary to be active due to scheduling constraints, such as cgroups. +*/ +int rotate_necessary;atomic_t refcount;struct task_struct *task;
include/linux/usb/usbnet.h +2 -0
@@ -83,6 +83,8 @@ struct usbnet {# define EVENT_LINK_CHANGE 11# define EVENT_SET_RX_MODE 12# define EVENT_NO_IP_ALIGN 13 +u32 rx_speed;/* in bps - NOT Mbps */ +u32 tx_speed;/* in bps - NOT Mbps */ };static inline struct usb_driver *driver_of (struct usb_interface *intf)
include/net/caif/caif_dev.h +1 -1
@@ -119,7 +119,7 @@ void caif_free_client(struct cflayer *adap_layer);* The link_support layer is used to add any Link Layer specific * framing. */ -void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, +int caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, struct cflayer *link_support, int head_room, struct cflayer **layer, int (**rcv_func)( struct sk_buff *, struct net_device *,
include/net/caif/cfcnfg.h +1 -1
@@ -62,7 +62,7 @@ void cfcnfg_remove(struct cfcnfg *cfg);* @fcs: Specify if checksum is used in CAIF Framing Layer. * @head_room: Head space needed by link specific protocol. */ -void +int cfcnfg_add_phy_layer(struct cfcnfg *cnfg, struct net_device *dev, struct cflayer *phy_layer, enum cfcnfg_phy_preference pref,
include/net/caif/cfserl.h +1 -0
@@ -9,4 +9,5 @@#include <net/caif/caif_layer.h> struct cflayer *cfserl_create (int instance,bool use_stx); +void cfserl_release (struct cflayer *layer);#endif
include/uapi/linux/bpf.h +14 -0
@@ -228,6 +228,20 @@ enum bpf_attach_type {*/ #define BPF_F_STRICT_ALIGNMENT (1U << 0) +/* If BPF_F_ANY_ALIGNMENT is used in BPF_PROF_LOAD command, the +* verifier will allow any alignment whatsoever. On platforms +* with strict alignment requirements for loads ands stores (such +* as sparc and mips) the verifier validates that all loads and +* stores provably follow this requirement. This flag turns that +* checking and enforcement off. +* +* It is mostly used for testing when we want to validate the +* context and memory access aspects of the verifier, but because +* of an unaligned access the alignment check would trigger before +* the one we are interested in. +*/ +#define BPF_F_ANY_ALIGNMENT (1U << 1) +/* when bpf_ldimm64->src_reg == BPF_PSEUDO_MAP_FD, bpf_ldimm64->imm == fd */ #define BPF_PSEUDO_MAP_FD 1
init/main.c +1 -1
@@ -1124,7 +1124,7 @@ static noinline void __init kernel_init_freeable(void)*/ set_mems_allowed (node_states[N_MEMORY ]); - cad_pid =task_pid (current); + cad_pid =get_pid (task_pid (current));smp_prepare_cpus (setup_max_cpus);
kernel/bpf/syscall.c +6 -1
@@ -1367,9 +1367,14 @@ static int bpf_prog_load(union bpf_attr *attr)if (CHECK_ATTR (BPF_PROG_LOAD ))return -EINVAL ; -if (attr->prog_flags & ~BPF_F_STRICT_ALIGNMENT ) +if (attr->prog_flags & ~(BPF_F_STRICT_ALIGNMENT |BPF_F_ANY_ALIGNMENT ))return -EINVAL ; +if (!IS_ENABLED (CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS ) && + (attr->prog_flags &BPF_F_ANY_ALIGNMENT ) && + !capable (CAP_SYS_ADMIN )) +return -EPERM ; +/* copy eBPF program license from user space */ if (strncpy_from_user (license,u64_to_user_ptr (attr->license),sizeof (license) -1 ) <0 )
kernel/bpf/verifier.c +3 -0
@@ -6440,6 +6440,9 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr)if (!IS_ENABLED (CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS )) env->strict_alignment = true; +if (attr->prog_flags &BPF_F_ANY_ALIGNMENT ) + env->strict_alignment = false; + ret =replace_map_fd_with_map_ptr (env);if (ret <0 ) goto skip_full_check;
kernel/events/core.c +38 -24
113 lines not on this page · raw message
kernel/sched/fair.c +4 -3
@@ -6154,6 +6154,7 @@ static inline int select_idle_smt(struct task_struct *p, struct sched_domain *sd*/ static int select_idle_cpu (struct task_struct *p,struct sched_domain *sd,int target) { +struct cpumask *cpus =this_cpu_cpumask_var_ptr (select_idle_mask);struct sched_domain *this_sd;u64 avg_cost, avg_idle;u64 time, cost;
@@ -6184,11 +6185,11 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t time =local_clock (); -for_each_cpu_wrap (cpu,sched_domain_span (sd), target) { +cpumask_and (cpus,sched_domain_span (sd), &p->cpus_allowed); + +for_each_cpu_wrap (cpu, cpus, target) {if (!--nr)return -1 ; -if (!cpumask_test_cpu (cpu, &p->cpus_allowed)) -continue ;if (available_idle_cpu (cpu))break ; }
mm/hugetlb.c +12 -2
@@ -4154,10 +4154,20 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,struct page *page;if (!*pagep) { - ret = -ENOMEM ; +/* If a page already exists, then it's UFFDIO_COPY for +* a non-missing case. Return -EEXIST. +*/ +if (vm_shared && +hugetlbfs_pagecache_present (h, dst_vma, dst_addr)) { + ret = -EEXIST ; + goto out; + } + page =alloc_huge_page (dst_vma, dst_addr,0 ); -if (IS_ERR (page)) +if (IS_ERR (page)) { + ret = -ENOMEM ; goto out; + } ret = copy_huge_page_from_user(page, (const void __user *) src_addr,
net/bluetooth/hci_core.c +6 -1
@@ -1498,8 +1498,13 @@ static int hci_dev_do_open(struct hci_dev *hdev) }else {/* Init failed, cleanup */ flush_work (&hdev->tx_work); -flush_work (&hdev->cmd_work); + +/* Since hci_rx_work() is possible to awake new cmd_work +* it should be flushed first to avoid unexpected call of +* hci_cmd_work() +*/ flush_work (&hdev->rx_work); +flush_work (&hdev->cmd_work);skb_queue_purge (&hdev->cmd_q);skb_queue_purge (&hdev->rx_q);
net/bluetooth/hci_sock.c +2 -2
@@ -755,7 +755,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event)/* Detach sockets from device */ read_lock (&hci_sk_list.lock);sk_for_each (sk, &hci_sk_list.head) { -bh_lock_sock_nested (sk); +lock_sock (sk);if (hci_pi (sk)->hdev == hdev) {hci_pi (sk)->hdev =NULL ; sk->sk_err =EPIPE ;
@@ -764,7 +764,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event)hci_dev_put (hdev); } -bh_unlock_sock (sk); +release_sock (sk); }read_unlock (&hci_sk_list.lock); }
net/caif/caif_dev.c +9 -4
@@ -303,7 +303,7 @@ static void dev_flowctrl(struct net_device *dev, int on)caifd_put (caifd); } -void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, +int caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, struct cflayer *link_support, int head_room, struct cflayer **layer, int (**rcv_func)(struct sk_buff *, struct net_device *,
@@ -314,11 +314,12 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev,enum cfcnfg_phy_preference pref;struct cfcnfg *cfg =get_cfcnfg (dev_net (dev));struct caif_device_entry_list *caifdevs; +int res; caifdevs =caif_device_list (dev_net (dev)); caifd =caif_device_alloc (dev);if (!caifd) -return ; +return -ENOMEM ; *layer = &caifd->layer;spin_lock_init (&caifd->flow_lock);
@@ -339,7 +340,7 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev,strlcpy (caifd->layer.name, dev->name,sizeof (caifd->layer.name)); caifd->layer.transmit = transmit; - cfcnfg_add_phy_layer(cfg, + res = cfcnfg_add_phy_layer(cfg, dev, &caifd->layer, pref,
@@ -349,6 +350,7 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev,mutex_unlock (&caifdevs->lock);if (rcv_func) *rcv_func = receive; +return res; }EXPORT_SYMBOL (caif_enroll_dev);
@@ -363,6 +365,7 @@ static int caif_device_notify(struct notifier_block *me, unsigned long what,struct cflayer *layer, *link_support;int head_room =0 ;struct caif_device_entry_list *caifdevs; +int res; cfg =get_cfcnfg (dev_net (dev)); caifdevs =caif_device_list (dev_net (dev));
@@ -388,8 +391,10 @@ static int caif_device_notify(struct notifier_block *me, unsigned long what,break ; } } -caif_enroll_dev (dev, caifdev, link_support, head_room, + res =caif_enroll_dev (dev, caifdev, link_support, head_room, &layer,NULL ); +if (res) +cfserl_release (link_support); caifdev->flowctrl = dev_flowctrl;break ;
net/caif/caif_usb.c +13 -1
@@ -116,6 +116,11 @@ static struct cflayer *cfusbl_create(int phyid, u8 ethaddr[ETH_ALEN],return (struct cflayer *) this; } +static void cfusbl_release (struct cflayer *layer) +{ +kfree (layer); +} +static struct packet_type caif_usb_type__read_mostly = { .type =cpu_to_be16 (ETH_P_802_EX1 ), };
@@ -128,6 +133,7 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,struct cflayer *layer, *link_support;struct usbnet *usbnet;struct usb_device *usbdev; +int res;/* Check whether we have a NCM device, and find its VID/PID. */ if (!(dev->dev.parent && dev->dev.parent->driver &&
@@ -170,8 +176,11 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,if (dev->num_tx_queues >1 )pr_warn ("USB device uses more than one tx queue\n" ); -caif_enroll_dev (dev, &common, link_support,CFUSB_MAX_HEADLEN , + res =caif_enroll_dev (dev, &common, link_support,CFUSB_MAX_HEADLEN , &layer, &caif_usb_type.func); +if (res) + goto err; +if (!pack_added)dev_add_pack (&caif_usb_type); pack_added = true;
@@ -179,6 +188,9 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,strlcpy (layer->name, dev->name,sizeof (layer->name));return 0 ; +err: +cfusbl_release (link_support); +return res; }static struct notifier_block caif_device_notifier = {
net/caif/cfcnfg.c +11 -5
@@ -450,7 +450,7 @@ cfcnfg_linkup_rsp(struct cflayer *layer, u8 channel_id, enum cfctrl_srv serv,rcu_read_unlock (); } -void +int cfcnfg_add_phy_layer(struct cfcnfg *cnfg, struct net_device *dev, struct cflayer *phy_layer, enum cfcnfg_phy_preference pref,
@@ -459,7 +459,7 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, {struct cflayer *frml;struct cfcnfg_phyinfo *phyinfo =NULL ; -int i; +int i, res =0 ;u8 phyid;mutex_lock (&cnfg->lock);
@@ -473,12 +473,15 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, goto got_phyid; }pr_warn ("Too many CAIF Link Layers (max 6)\n" ); + res = -EEXIST ; goto out; got_phyid: phyinfo =kzalloc (sizeof (struct cfcnfg_phyinfo ),GFP_ATOMIC ); -if (!phyinfo) +if (!phyinfo) { + res = -ENOMEM ; goto out_err; + } phy_layer->id = phyid; phyinfo->pref = pref;
@@ -492,8 +495,10 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, frml =cffrml_create (phyid, fcs); -if (!frml) +if (!frml) { + res = -ENOMEM ; goto out_err; + } phyinfo->frm_layer = frml;layer_set_up (frml, cnfg->mux);
@@ -511,11 +516,12 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg,list_add_rcu (&phyinfo->node, &cnfg->phys); out:mutex_unlock (&cnfg->lock); -return ; +return res; out_err:kfree (phyinfo);mutex_unlock (&cnfg->lock); +return res; }EXPORT_SYMBOL (cfcnfg_add_phy_layer);
net/caif/cfserl.c +5 -0
@@ -31,6 +31,11 @@ static int cfserl_transmit(struct cflayer *layr, struct cfpkt *pkt);static void cfserl_ctrlcmd (struct cflayer *layr,enum caif_ctrlcmd ctrl,int phyid); +void cfserl_release (struct cflayer *layer) +{ +kfree (layer); +} +struct cflayer *cfserl_create (int instance,bool use_stx) {struct cfserl *this =kzalloc (sizeof (struct cfserl ),GFP_ATOMIC );
net/ieee802154/nl-mac.c +3 -1
@@ -688,8 +688,10 @@ int ieee802154_llsec_getparams(struct sk_buff *skb, struct genl_info *info)nla_put_u8 (msg,IEEE802154_ATTR_LLSEC_SECLEVEL , params.out_level) ||nla_put_u32 (msg,IEEE802154_ATTR_LLSEC_FRAME_COUNTER ,be32_to_cpu (params.frame_counter)) || - ieee802154_llsec_fill_key_id(msg, ¶ms.out_key)) + ieee802154_llsec_fill_key_id(msg, ¶ms.out_key)) { + rc = -ENOBUFS; goto out_free; + }dev_put (dev);
net/ieee802154/nl-phy.c +3 -1
@@ -249,8 +249,10 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info) }if (nla_put_string (msg,IEEE802154_ATTR_PHY_NAME ,wpan_phy_name (phy)) || -nla_put_string (msg,IEEE802154_ATTR_DEV_NAME , dev->name)) +nla_put_string (msg,IEEE802154_ATTR_DEV_NAME , dev->name)) { + rc = -EMSGSIZE ; goto nla_put_failure; + }dev_put (dev);wpan_phy_put (phy);
net/netfilter/ipvs/ip_vs_ctl.c +1 -1
@@ -1269,7 +1269,7 @@ ip_vs_add_service(struct netns_ipvs *ipvs, struct ip_vs_service_user_kern *u,ip_vs_addr_copy (svc->af, &svc->addr, &u->addr); svc->port = u->port; svc->fwmark = u->fwmark; - svc->flags = u->flags; + svc->flags = u->flags & ~IP_VS_SVC_F_HASHED ; svc->timeout = u->timeout *HZ ; svc->netmask = u->netmask; svc->ipvs = ipvs;
net/netfilter/nfnetlink_cthelper.c +6 -2
@@ -381,10 +381,14 @@ static int nfnl_cthelper_update(const struct nlattr * const tb[], struct nf_conntrack_helper *helper) { + u32 size;int ret; -if (tb[NFCTH_PRIV_DATA_LEN ]) -return -EBUSY ; +if (tb[NFCTH_PRIV_DATA_LEN ]) { + size =ntohl (nla_get_be32 (tb[NFCTH_PRIV_DATA_LEN ])); +if (size != helper->data_len) +return -EBUSY ; + }if (tb[NFCTH_POLICY ]) { ret =nfnl_cthelper_update_policy (helper, tb[NFCTH_POLICY ]);
net/nfc/llcp_sock.c +2 -0
@@ -122,6 +122,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)if (!llcp_sock->service_name) {nfc_llcp_local_put (llcp_sock->local); llcp_sock->local =NULL ; + llcp_sock->dev =NULL ; ret = -ENOMEM ; goto put_dev; }
@@ -131,6 +132,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) llcp_sock->local =NULL ;kfree (llcp_sock->service_name); llcp_sock->service_name =NULL ; + llcp_sock->dev =NULL ; ret = -EADDRINUSE ; goto put_dev; }
net/tipc/bearer.c +66 -28
212 lines not on this page · raw message
net/wireless/core.h +2 -0
@@ -404,6 +404,8 @@ void cfg80211_sme_abandon_assoc(struct wireless_dev *wdev);/* internal helpers */ bool cfg80211_supported_cipher_suite (struct wiphy *wiphy,u32 cipher); +bool cfg80211_valid_key_idx (struct cfg80211_registered_device *rdev, +int key_idx,bool pairwise);int cfg80211_validate_key_settings (struct cfg80211_registered_device *rdev,struct key_params *params,int key_idx,bool pairwise,const u8 *mac_addr);
net/wireless/nl80211.c +4 -3
@@ -3624,9 +3624,6 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info)if (err)return err; -if (key.idx <0 ) -return -EINVAL ; -if (info->attrs[NL80211_ATTR_MAC ]) mac_addr =nla_data (info->attrs[NL80211_ATTR_MAC ]);
@@ -3642,6 +3639,10 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info) key.type != NL80211_KEYTYPE_GROUP)return -EINVAL ; +if (!cfg80211_valid_key_idx (rdev, key.idx, + key.type ==NL80211_KEYTYPE_PAIRWISE )) +return -EINVAL ; +if (!rdev->ops->del_key)return -EOPNOTSUPP ;
net/wireless/util.c +38 -1
@@ -214,11 +214,48 @@ bool cfg80211_supported_cipher_suite(struct wiphy *wiphy, u32 cipher)return false; } +static bool +cfg80211_igtk_cipher_supported (struct cfg80211_registered_device *rdev) +{ +struct wiphy *wiphy = &rdev->wiphy; +int i; + +for (i =0 ; i < wiphy->n_cipher_suites; i++) { +switch (wiphy->cipher_suites[i]) { +case WLAN_CIPHER_SUITE_AES_CMAC : +case WLAN_CIPHER_SUITE_BIP_CMAC_256 : +case WLAN_CIPHER_SUITE_BIP_GMAC_128 : +case WLAN_CIPHER_SUITE_BIP_GMAC_256 : +return true; + } + } + +return false; +} + +bool cfg80211_valid_key_idx (struct cfg80211_registered_device *rdev, +int key_idx,bool pairwise) +{ +int max_key_idx; + +if (pairwise) + max_key_idx =3 ; +else if (cfg80211_igtk_cipher_supported (rdev)) + max_key_idx =5 ; +else + max_key_idx =3 ; + +if (key_idx <0 || key_idx > max_key_idx) +return false; + +return true; +} +int cfg80211_validate_key_settings (struct cfg80211_registered_device *rdev,struct key_params *params,int key_idx,bool pairwise,const u8 *mac_addr) { -if (key_idx <0 || key_idx >5 ) +if (!cfg80211_valid_key_idx (rdev, key_idx, pairwise))return -EINVAL ;if (!pairwise && mac_addr && !(rdev->wiphy.flags &WIPHY_FLAG_IBSS_RSN ))
samples/vfio-mdev/mdpy-fb.c +9 -4
@@ -117,22 +117,27 @@ static int mdpy_fb_probe(struct pci_dev *pdev,if (format !=DRM_FORMAT_XRGB8888 ) {pci_err (pdev,"format mismatch (0x%x != 0x%x)\n" , format,DRM_FORMAT_XRGB8888 ); -return -EINVAL ; + ret = -EINVAL ; + goto err_release_regions; }if (width <100 || width >10000 ) {pci_err (pdev,"width (%d) out of range\n" , width); -return -EINVAL ; + ret = -EINVAL ; + goto err_release_regions; }if (height <100 || height >10000 ) {pci_err (pdev,"height (%d) out of range\n" , height); -return -EINVAL ; + ret = -EINVAL ; + goto err_release_regions; }pci_info (pdev,"mdpy found: %dx%d framebuffer\n" , width, height); info =framebuffer_alloc (sizeof (struct mdpy_fb_par ), &pdev->dev); -if (!info) +if (!info) { + ret = -ENOMEM ; goto err_release_regions; + }pci_set_drvdata (pdev, info); par = info->par;
sound/core/timer.c +2 -1
@@ -500,9 +500,10 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event)return ;if (timer->hw.flags &SNDRV_TIMER_HW_SLAVE )return ; + event +=10 ;/* convert to SNDRV_TIMER_EVENT_MXXX */ list_for_each_entry (ts, &ti->slave_active_head, active_list)if (ts->ccallback) - ts->ccallback (ts, event +100 , &tstamp, resolution); + ts->ccallback (ts, event, &tstamp, resolution); }/* start/continue a master timer */
sound/pci/hda/patch_realtek.c +1 -0
@@ -7095,6 +7095,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x82bf ,"HP G3 mini" ,ALC221_FIXUP_HP_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x103c ,0x82c0 ,"HP G3 mini premium" ,ALC221_FIXUP_HP_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x103c ,0x83b9 ,"HP Spectre x360" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ), +SND_PCI_QUIRK (0x103c ,0x841c ,"HP Pavilion 15-CK0xx" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ),SND_PCI_QUIRK (0x103c ,0x8497 ,"HP Envy x360" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ),SND_PCI_QUIRK (0x103c ,0x84e7 ,"HP Pavilion 15" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ), SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_LED),
sound/usb/mixer_quirks.c +1 -1
@@ -1708,7 +1708,7 @@ static struct snd_kcontrol_new snd_microii_mixer_spdif[] = {static int snd_microii_controls_create (struct usb_mixer_interface *mixer) {int err, i; -const static usb_mixer_elem_resume_func_t resume_funcs[] = { +static const usb_mixer_elem_resume_func_t resume_funcs[] = { snd_microii_spdif_default_update,NULL , snd_microii_spdif_switch_update
tools/include/uapi/linux/bpf.h +14 -0
@@ -226,6 +226,20 @@ enum bpf_attach_type {*/ #define BPF_F_STRICT_ALIGNMENT (1U << 0) +/* If BPF_F_ANY_ALIGNMENT is used in BPF_PROF_LOAD command, the +* verifier will allow any alignment whatsoever. On platforms +* with strict alignment requirements for loads ands stores (such +* as sparc and mips) the verifier validates that all loads and +* stores provably follow this requirement. This flag turns that +* checking and enforcement off. +* +* It is mostly used for testing when we want to validate the +* context and memory access aspects of the verifier, but because +* of an unaligned access the alignment check would trigger before +* the one we are interested in. +*/ +#define BPF_F_ANY_ALIGNMENT (1U << 1) +/* when bpf_ldimm64->src_reg == BPF_PSEUDO_MAP_FD, bpf_ldimm64->imm == fd */ #define BPF_PSEUDO_MAP_FD 1
tools/lib/bpf/bpf.c +4 -4
@@ -261,9 +261,9 @@ int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns, }int bpf_verify_program (enum bpf_prog_type type,const struct bpf_insn *insns, -size_t insns_cnt,int strict_alignment, -const char *license,__u32 kern_version, -char *log_buf,size_t log_buf_sz,int log_level) +size_t insns_cnt,__u32 prog_flags,const char *license, +__u32 kern_version,char *log_buf,size_t log_buf_sz, +int log_level) {union bpf_attr attr;
@@ -277,7 +277,7 @@ int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns, attr.log_level = log_level; log_buf[0 ] =0 ; attr.kern_version = kern_version; - attr.prog_flags = strict_alignment ?BPF_F_STRICT_ALIGNMENT :0 ; + attr.prog_flags = prog_flags;return sys_bpf_prog_load (&attr,sizeof (attr)); }
tools/lib/bpf/bpf.h +1 -1
@@ -79,7 +79,7 @@ int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns, __u32 kern_version, char *log_buf, size_t log_buf_sz);int bpf_verify_program (enum bpf_prog_type type,const struct bpf_insn *insns, -size_t insns_cnt,int strict_alignment, +size_t insns_cnt,__u32 prog_flags,const char *license,__u32 kern_version,char *log_buf,size_t log_buf_sz,int log_level);
tools/testing/selftests/bpf/test_align.c +2 -2
@@ -620,8 +620,8 @@ static int do_test_single(struct bpf_align_test *test) prog_len =probe_filter_length (prog); fd_prog =bpf_verify_program (prog_type ? :BPF_PROG_TYPE_SOCKET_FILTER , - prog, prog_len,1 ,"GPL" ,0 , - bpf_vlog,sizeof (bpf_vlog),2 ); + prog, prog_len,BPF_F_STRICT_ALIGNMENT , +"GPL" ,0 , bpf_vlog,sizeof (bpf_vlog),2 );if (fd_prog <0 && test->result !=REJECT ) {printf ("Failed to load program.\n" );printf ("%s" , bpf_vlog);
tools/testing/selftests/bpf/test_verifier.c +162 -62
725 lines not on this page · raw message
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 4.19.194 kernel.
All users of the 4.19 kernel series must upgrade.
Quoted 9 lines
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-4.19.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=summarythanks,
greg k-h
Tested on arm64 and x86 for 4.19.194,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-4.19.y
Version: 4.19.194
Commit: 9a2dc0e6c531d595bcdf2c66d0be131679bd02df
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8858
passed: 8858
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8858
passed: 8858
failed: 0
timeout: 0
--------------------------------------------------------------------