Linux 4.19.179
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.179 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
------------
Documentation/devicetree/bindings/net/btusb.txt | 2 Documentation/filesystems/sysfs.txt | 8 - Makefile | 2 arch/arm/xen/p2m.c | 35 +++++ arch/arm64/include/asm/atomic_ll_sc.h | 108 +++++++++-------- arch/arm64/include/asm/atomic_lse.h | 46 +++---- arch/arm64/include/asm/cmpxchg.h | 116 +++++++++--------- arch/arm64/kernel/module.lds | 6 arch/mips/vdso/Makefile | 5 arch/parisc/kernel/irq.c | 4 arch/x86/kernel/module.c | 1 arch/x86/kernel/reboot.c | 9 + arch/x86/tools/relocs.c | 12 + arch/x86/xen/p2m.c | 44 ++++++- crypto/tcrypt.c | 20 +-- drivers/block/zram/zram_drv.c | 2 drivers/bluetooth/hci_h5.c | 5 drivers/gpu/drm/amd/display/dc/core/dc_link.c | 5 drivers/gpu/drm/virtio/virtgpu_vq.c | 6 drivers/media/rc/mceusb.c | 9 + drivers/media/usb/uvc/uvc_driver.c | 7 - drivers/media/v4l2-core/v4l2-ioctl.c | 19 +-- drivers/net/usb/qmi_wwan.c | 1 drivers/net/wireless/ath/ath10k/mac.c | 15 -- drivers/net/wireless/rsi/rsi_91x_hal.c | 3 drivers/net/wireless/rsi/rsi_91x_sdio.c | 6 drivers/net/wireless/rsi/rsi_91x_sdio_ops.c | 52 ++------ drivers/net/wireless/rsi/rsi_sdio.h | 8 - drivers/net/wireless/ti/wl12xx/main.c | 3 drivers/net/wireless/ti/wlcore/main.c | 15 -- drivers/net/wireless/ti/wlcore/wlcore.h | 3 drivers/net/xen-netback/netback.c | 12 + drivers/pci/pci.c | 9 + drivers/s390/virtio/virtio_ccw.c | 4 drivers/scsi/libiscsi.c | 148 ++++++++++++------------ drivers/scsi/scsi_transport_iscsi.c | 38 ++++-- drivers/staging/fwserial/fwserial.c | 2 drivers/staging/most/sound/sound.c | 2 drivers/tty/vt/consolemap.c | 2 drivers/video/fbdev/udlfb.c | 1 fs/btrfs/transaction.c | 11 - fs/f2fs/namei.c | 8 + fs/f2fs/segment.h | 4 fs/jfs/jfs_filsys.h | 1 fs/jfs/jfs_mount.c | 10 + fs/sysfs/file.c | 55 ++++++++ fs/xfs/xfs_iops.c | 2 include/linux/sysfs.h | 16 ++ include/linux/zsmalloc.h | 2 mm/hugetlb.c | 28 ++-- mm/page_io.c | 11 - mm/swapfile.c | 2 mm/zsmalloc.c | 17 +- net/bluetooth/amp.c | 3 net/bridge/br_sysfs_if.c | 9 - net/core/pktgen.c | 2 net/core/skbuff.c | 14 ++ security/smack/smackfs.c | 21 +++ sound/pci/hda/patch_realtek.c | 2 sound/soc/intel/boards/bytcr_rt5640.c | 37 ++++++ 60 files changed, 651 insertions(+), 399 deletions(-)
Andrew Murray (1):
arm64: Use correct ll/sc atomic constraints
Ard Biesheuvel (1):
crypto: tcrypt - avoid signed overflow in byte count
Chao Yu (1):
f2fs: fix to set/clear I_LINKABLE under i_lock
Chris Leech (2):
scsi: iscsi: Ensure sysfs attributes are limited to PAGE_SIZE
scsi: iscsi: Verify lengths on passthrough PDUs
Christian Gromm (1):
staging: most: sound: add sanity check for function argument
Claire Chang (1):
Bluetooth: hci_h5: Set HCI_QUIRK_SIMULTANEOUS_DISCOVERY for btrtl
Cornelia Huck (1):
virtio/s390: implement virtio-ccw revision 2 correctly
Di Zhu (1):
pktgen: fix misuse of BUG_ON() in pktgen_thread_worker()
Dinghao Liu (1):
staging: fwserial: Fix error handling in fwserial_create
Eckhart Mohr (1):
ALSA: hda/realtek: Add quirk for Clevo NH55RZQ
Fangrui Song (1):
x86/build: Treat R_386_PLT32 relocation as R_386_PC32
Geert Uytterhoeven (1):
dt-bindings: net: btusb: DT fix s/interrupt-name/interrupt-names/
Gopal Tiwari (1):
Bluetooth: Fix null pointer dereference in amp_read_loc_assoc_final_data
Greg Kroah-Hartman (1):
Linux 4.19.179
Hans de Goede (3):
ASoC: Intel: bytcr_rt5640: Add quirk for the Estar Beauty HD MID 7316R tablet
ASoC: Intel: bytcr_rt5640: Add quirk for the Voyo Winpad A15 tablet
ASoC: Intel: bytcr_rt5640: Add quirk for the Acer One S1002 tablet
Heiner Kallweit (1):
x86/reboot: Add Zotac ZBOX CI327 nano PCI reboot quirk
Jaegeuk Kim (1):
f2fs: handle unallocated section and zone on pinned/atgc
Jan Beulich (2):
Xen/gnttab: handle p2m update errors on a per-slot basis
xen-netback: respect gnttab_map_refs()'s return value
Jens Axboe (1):
swap: fix swapfile read/write offset
Jiri Slaby (1):
vt/consolemap: do font sum unsigned
Joe Perches (1):
sysfs: Add sysfs_emit and sysfs_emit_at to format sysfs output
John David Anglin (1):
parisc: Bump 64-bit IRQ stack size to 64 KB
Josef Bacik (1):
btrfs: fix error handling in commit_fs_roots
Lech Perczak (1):
net: usb: qmi_wwan: support ZTE P685M modem
Lee Duncan (1):
scsi: iscsi: Restrict sessions and handles to admin capabilities
Li Xinhai (1):
mm/hugetlb.c: fix unnecessary address expansion of pmd sharing
Marco Elver (1):
net: fix up truesize of cloned skb in skb_prepare_for_shift()
Marek Vasut (2):
rsi: Fix TX EAPOL packet handling against iwlwifi AP
rsi: Move card interrupt handling to RX thread
Miaoqing Pan (1):
ath10k: fix wmi mgmt tx queue full due to race condition
Mike Kravetz (1):
hugetlb: fix update_and_free_page contig page struct assumption
Nathan Chancellor (1):
MIPS: VDSO: Use CLANG_FLAGS instead of filtering out '--target='
Nicholas Kazlauskas (1):
drm/amd/display: Guard against NULL pointer deref when get_i2c_info fails
Nirmoy Das (1):
PCI: Add a REBAR size quirk for Sapphire RX 5600 XT Pulse
Randy Dunlap (1):
JFS: more checks for invalid superblock
Ricardo Ribalda (1):
media: uvcvideo: Allow entities with no pads
Rokudo Yan (1):
zsmalloc: account the number of compacted pages correctly
Sabyrzhan Tasbolatov (1):
smackfs: restrict bytes count in smackfs write functions
Sakari Ailus (1):
media: v4l: ioctl: Fix memory leak in video_usercopy
Sean Young (1):
media: mceusb: sanity check for prescaler value
Sergey Senozhatsky (1):
drm/virtio: use kvmalloc for large allocations
Shaoying Xu (1):
arm64 module: set plt* section addresses to 0x0
Takashi Iwai (1):
ALSA: hda/realtek: Apply dual codec quirks for MSI Godlike X570 board
Tony Lindgren (1):
wlcore: Fix command execute failure 19 for wl12xx
Vladimir Oltean (1):
net: bridge: use switchdev for port flags set through sysfs too
Will Deacon (2):
arm64: Avoid redundant type conversions in xchg() and cmpxchg()
arm64: cmpxchg: Use "K" instead of "L" for ll/sc immediate constraint
Yumei Huang (1):
xfs: Fix assert failure in xfs_setattr_size()
Zqiang (1):
udlfb: Fix memory leak in dlfb_usb_probe
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/net/btusb.txt +1 -1
@@ -35,7 +35,7 @@ Following example uses irq pin number 3 of gpio0 for out of band wake-on-bt: compatible = "usb1286,204e"; reg = <1>; interrupt-parent = <&gpio0>; - interrupt-name = "wakeup"; + interrupt-names = "wakeup"; interrupts = <3 IRQ_TYPE_LEVEL_LOW>; }; };
Documentation/filesystems/sysfs.txt +3 -5
@@ -211,12 +211,10 @@ Other notes: is 4096. - show() methods should return the number of bytes printed into the - buffer. This is the return value of scnprintf(). + buffer. -- show() must not use snprintf() when formatting the value to be - returned to user space. If you can guarantee that an overflow - will never happen you can use sprintf() otherwise you must use - scnprintf(). +- show() should only use sysfs_emit() or sysfs_emit_at() when formatting + the value to be returned to user space. - store() should return the number of bytes used from the buffer. If the entire buffer has been used, just return the count argument.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 178 +SUBLEVEL = 179 EXTRAVERSION = NAME = "People's Front"
arch/arm/xen/p2m.c +31 -4
@@ -91,12 +91,39 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops,int i;for (i =0 ; i < count; i++) { +struct gnttab_unmap_grant_ref unmap; +int rc; +if (map_ops[i].status)continue ; -if (unlikely (!set_phys_to_machine (map_ops[i].host_addr >>XEN_PAGE_SHIFT , - map_ops[i].dev_bus_addr >>XEN_PAGE_SHIFT ))) { -return -ENOMEM ; - } +if (likely (set_phys_to_machine (map_ops[i].host_addr >>XEN_PAGE_SHIFT , + map_ops[i].dev_bus_addr >>XEN_PAGE_SHIFT ))) +continue ; + +/* +* Signal an error for this slot. This in turn requires +* immediate unmapping. +*/ + map_ops[i].status = GNTST_general_error; + unmap.host_addr = map_ops[i].host_addr, + unmap.handle = map_ops[i].handle; + map_ops[i].handle = ~0 ; +if (map_ops[i].flags & GNTMAP_device_map) + unmap.dev_bus_addr = map_ops[i].dev_bus_addr; +else + unmap.dev_bus_addr =0 ; + +/* +* Pre-populate the status field, to be recognizable in +* the log message below. +*/ + unmap.status =1 ; + + rc =HYPERVISOR_grant_table_op (GNTTABOP_unmap_grant_ref, + &unmap,1 ); +if (rc || unmap.status != GNTST_okay) +pr_err_once ("gnttab unmap failed: rc=%d st=%d\n" , + rc, unmap.status); }return 0 ;
arch/arm64/include/asm/atomic_ll_sc.h +57 -51
219 lines not on this page · raw message
arch/arm64/include/asm/atomic_lse.h +23 -23
69 lines not on this page · raw message
arch/arm64/include/asm/cmpxchg.h +58 -58
169 lines not on this page · raw message
arch/arm64/kernel/module.lds +3 -3
@@ -1,5 +1,5 @@ SECTIONS { - .plt (NOLOAD) : { BYTE(0) } - .init.plt (NOLOAD) : { BYTE(0) } - .text.ftrace_trampoline (NOLOAD) : { BYTE(0) } + .plt 0 (NOLOAD) : { BYTE(0) } + .init.plt 0 (NOLOAD) : { BYTE(0) } + .text.ftrace_trampoline 0 (NOLOAD) : { BYTE(0) } }
arch/mips/vdso/Makefile +1 -4
@@ -10,12 +10,9 @@ ccflags-vdso := \ $(filter -march=%,$(KBUILD_CFLAGS)) \ $(filter -m%-float,$(KBUILD_CFLAGS)) \ $(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \ + $(CLANG_FLAGS) \ -D__VDSO__ -ifeq ($(cc-name),clang) -ccflags-vdso += $(filter --target=%,$(KBUILD_CFLAGS)) -endif - cflags-vdso := $(ccflags-vdso) \ $(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \ -O2 -g -fPIC -fno-strict-aliasing -fno-common -fno-builtin -G 0 \
arch/parisc/kernel/irq.c +4 -0
@@ -380,7 +380,11 @@ static inline int eirr_to_irq(unsigned long eirr)/* * IRQ STACK - used for irq handler */ +#ifdef CONFIG_64BIT +#define IRQ_STACK_SIZE (4096 << 4)/* 64k irq stack size */ +#else #define IRQ_STACK_SIZE (4096 << 3)/* 32k irq stack size */ +#endif union irq_stack_union {unsigned long stack[IRQ_STACK_SIZE /sizeof (unsigned long )];
arch/x86/kernel/module.c +1 -0
@@ -126,6 +126,7 @@ int apply_relocate(Elf32_Shdr *sechdrs, *location += sym->st_value;break ;case R_386_PC32 : +case R_386_PLT32 :/* Add the value, subtract its position */ *location += sym->st_value - (uint32_t )location;break ;
arch/x86/kernel/reboot.c +9 -0
@@ -477,6 +477,15 @@ static const struct dmi_system_id reboot_dmi_table[] __initconst = { }, }, + {/* PCIe Wifi card isn't detected after reboot otherwise */ + .callback = set_pci_reboot, + .ident = "Zotac ZBOX CI327 nano", + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"NA" ), + DMI_MATCH(DMI_PRODUCT_NAME, "ZBOX-CI327NANO-GS-01"), + }, + }, + /* Sony */ { /* Handle problems with rebooting on Sony VGN-Z540N */ .callback = set_bios_reboot,
arch/x86/tools/relocs.c +8 -4
@@ -841,9 +841,11 @@ static int do_reloc32(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,case R_386_PC32 :case R_386_PC16 :case R_386_PC8 : +case R_386_PLT32 :/* -* NONE can be ignored and PC relative relocations don't -* need to be adjusted. +* NONE can be ignored and PC relative relocations don't need +* to be adjusted. Because sym must be defined, R_386_PLT32 can +* be treated the same way as R_386_PC32. */ break ;
@@ -884,9 +886,11 @@ static int do_reloc_real(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,case R_386_PC32 :case R_386_PC16 :case R_386_PC8 : +case R_386_PLT32 :/* -* NONE can be ignored and PC relative relocations don't -* need to be adjusted. +* NONE can be ignored and PC relative relocations don't need +* to be adjusted. Because sym must be defined, R_386_PLT32 can +* be treated the same way as R_386_PC32. */ break ;
arch/x86/xen/p2m.c +41 -3
57 lines not on this page · raw message
crypto/tcrypt.c +10 -10
@@ -202,8 +202,8 @@ static int test_mb_aead_jiffies(struct test_mb_aead_data *data, int enc, goto out; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount * num_mb, secs, (long )bcount * blen * num_mb); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount * num_mb, secs, (u64 )bcount * blen * num_mb); out:kfree (rc);
@@ -472,8 +472,8 @@ static int test_aead_jiffies(struct aead_request *req, int enc,return ret; } -printk ("%d operations in %d seconds (%ld bytes)\n" , - bcount, secs, (long )bcount * blen); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount, secs, (u64 )bcount * blen);return 0 ; }
@@ -763,8 +763,8 @@ static int test_mb_ahash_jiffies(struct test_mb_ahash_data *data, int blen, goto out; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount * num_mb, secs, (long )bcount * blen * num_mb); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount * num_mb, secs, (u64 )bcount * blen * num_mb); out:kfree (rc);
@@ -1200,8 +1200,8 @@ static int test_mb_acipher_jiffies(struct test_mb_skcipher_data *data, int enc, goto out; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount * num_mb, secs, (long )bcount * blen * num_mb); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount * num_mb, secs, (u64 )bcount * blen * num_mb); out:kfree (rc);
@@ -1438,8 +1438,8 @@ static int test_acipher_jiffies(struct skcipher_request *req, int enc,return ret; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount, secs, (long )bcount * blen); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount, secs, (u64 )bcount * blen);return 0 ; }
drivers/block/zram/zram_drv.c +1 -1
@@ -873,7 +873,7 @@ static ssize_t mm_stat_show(struct device *dev, zram->limit_pages <<PAGE_SHIFT , max_used <<PAGE_SHIFT , (u64 )atomic64_read (&zram->stats.same_pages), - pool_stats.pages_compacted, +atomic_long_read (&pool_stats.pages_compacted), (u64)atomic64_read(&zram->stats.huge_pages));up_read (&zram->init_lock);
drivers/bluetooth/hci_h5.c +5 -0
@@ -885,6 +885,11 @@ static int h5_btrtl_setup(struct h5 *h5)/* Give the device some time before the hci-core sends it a reset */ usleep_range (10000 ,20000 ); +/* Enable controller to do both LE scan and BR/EDR inquiry +* simultaneously. +*/ +set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &h5->hu->hdev->quirks); + out_free:btrtl_free (btrtl_dev);
drivers/gpu/drm/amd/display/dc/core/dc_link.c +5 -0
@@ -1124,6 +1124,11 @@ static bool construct( goto ddc_create_fail; } +if (!link->ddc->ddc_pin) { +DC_ERROR ("Failed to get I2C info for connector!\n" ); + goto ddc_create_fail; + } + link->ddc_hw_inst =dal_ddc_get_line (dal_ddc_service_get_ddc_pin (link->ddc));
drivers/gpu/drm/virtio/virtgpu_vq.c +3 -3
@@ -868,9 +868,9 @@ int virtio_gpu_object_attach(struct virtio_gpu_device *vgdev, }/* gets freed when the ring has consumed it */ - ents =kmalloc_array (obj->pages->nents, -sizeof (struct virtio_gpu_mem_entry ), -GFP_KERNEL ); + ents =kvmalloc_array (obj->pages->nents, +sizeof (struct virtio_gpu_mem_entry ), +GFP_KERNEL );if (!ents) {DRM_ERROR ("failed to allocate ent list\n" );return -ENOMEM ;
drivers/media/rc/mceusb.c +8 -1
@@ -685,11 +685,18 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, u8 *buf, int buf_len, data[0], data[1]);break ;case MCE_RSP_EQIRCFS : +if (!data[0 ] && !data[1 ]) { +dev_dbg (dev,"%s: no carrier" , inout); +break ; + } +// prescaler should make sense +if (data[0 ] >8 ) +break ; period =DIV_ROUND_CLOSEST ((1U << data[0 ] *2 ) * (data[1 ] +1 ),10 );if (!period)break ; - carrier = (1000 *1000 ) / period; + carrier =USEC_PER_SEC / period;dev_dbg (dev,"%s carrier of %u Hz (period %uus)" , inout, carrier, period);break ;
drivers/media/usb/uvc/uvc_driver.c +5 -2
@@ -940,7 +940,10 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u8 id,unsigned int i; extra_size =roundup (extra_size,sizeof (*entity->pads)); - num_inputs = (type &UVC_TERM_OUTPUT ) ? num_pads : num_pads -1 ; +if (num_pads) + num_inputs = type &UVC_TERM_OUTPUT ? num_pads : num_pads -1 ; +else + num_inputs =0 ; size =sizeof (*entity) + extra_size +sizeof (*entity->pads) * num_pads + num_inputs; entity =kzalloc (size,GFP_KERNEL );
@@ -956,7 +959,7 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u8 id,for (i =0 ; i < num_inputs; ++i) entity->pads[i].flags =MEDIA_PAD_FL_SINK ; -if (!UVC_ENTITY_IS_OTERM (entity)) +if (!UVC_ENTITY_IS_OTERM (entity) && num_pads) entity->pads[num_pads-1 ].flags =MEDIA_PAD_FL_SOURCE ; entity->bNrInPins = num_inputs;
drivers/media/v4l2-core/v4l2-ioctl.c +7 -12
@@ -2939,7 +2939,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg, v4l2_kioctl func) {char sbuf[128 ]; -void *mbuf =NULL ; +void *mbuf =NULL , *array_buf =NULL ;void *parg = (void *)arg;long err = -EINVAL ;bool has_array_args;
@@ -2998,20 +2998,14 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg, has_array_args = err;if (has_array_args) { -/* -* When adding new types of array args, make sure that the -* parent argument to ioctl (which contains the pointer to the -* array) fits into sbuf (so that mbuf will still remain -* unused up to here). -*/ - mbuf =kvmalloc (array_size,GFP_KERNEL ); + array_buf =kvmalloc (array_size,GFP_KERNEL ); err = -ENOMEM ; -if (NULL == mbuf) +if (array_buf ==NULL ) goto out_array_args; err = -EFAULT ; -if (copy_from_user (mbuf, user_ptr, array_size)) +if (copy_from_user (array_buf, user_ptr, array_size)) goto out_array_args; - *kernel_ptr = mbuf; + *kernel_ptr = array_buf; }/* Handles IOCTL */
@@ -3030,7 +3024,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,if (has_array_args) { *kernel_ptr = (void __force *)user_ptr; -if (copy_to_user (user_ptr, mbuf, array_size)) +if (copy_to_user (user_ptr, array_buf, array_size)) err = -EFAULT ; goto out_array_args; }
@@ -3052,6 +3046,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg, } out: +kvfree (array_buf);kvfree (mbuf);return err; }
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1217,6 +1217,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x19d2, 0x1255, 4)}, {QMI_FIXED_INTF(0x19d2, 0x1256, 4)}, {QMI_FIXED_INTF(0x19d2, 0x1270, 5)}, /* ZTE MF667 */ + {QMI_FIXED_INTF(0x19d2, 0x1275, 3)}, /* ZTE P685M */ {QMI_FIXED_INTF(0x19d2, 0x1401, 2)}, {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ {QMI_FIXED_INTF(0x19d2, 0x1424, 2)},
drivers/net/wireless/ath/ath10k/mac.c +4 -11
@@ -3567,23 +3567,16 @@ bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar)static int ath10k_mac_tx_wmi_mgmt (struct ath10k *ar,struct sk_buff *skb) {struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue; -int ret =0 ; - -spin_lock_bh (&ar->data_lock); -if (skb_queue_len (q) ==ATH10K_MAX_NUM_MGMT_PENDING ) { +if (skb_queue_len_lockless (q) >=ATH10K_MAX_NUM_MGMT_PENDING ) {ath10k_warn (ar,"wmi mgmt tx queue is full\n" ); - ret = -ENOSPC ; - goto unlock; +return -ENOSPC ; } -__skb_queue_tail (q, skb); +skb_queue_tail (q, skb);ieee80211_queue_work (ar->hw, &ar->wmi_mgmt_tx_work); -unlock: -spin_unlock_bh (&ar->data_lock); - -return ret; +return 0 ; } static enum ath10k_mac_tx_path
drivers/net/wireless/rsi/rsi_91x_hal.c +2 -1
@@ -238,7 +238,8 @@ int rsi_prepare_data_desc(struct rsi_common *common, struct sk_buff *skb)rsi_set_len_qno (&data_desc->len_qno, (skb->len -FRAME_DESC_SZ ),RSI_WIFI_MGMT_Q ); -if ((skb->len - header_size) ==EAPOL4_PACKET_LEN ) { +if (((skb->len - header_size) ==EAPOL4_PACKET_LEN ) || + ((skb->len - header_size) ==EAPOL4_PACKET_LEN -2 )) { data_desc->misc_flags |=RSI_DESC_REQUIRE_CFM_TO_HOST ; xtend_desc->confirm_frame_type =EAPOL4_CONFIRM ;
drivers/net/wireless/rsi/rsi_91x_sdio.c +1 -5
@@ -153,9 +153,7 @@ static void rsi_handle_interrupt(struct sdio_func *function)if (adapter->priv->fsm_state ==FSM_FW_NOT_LOADED )return ; - dev->sdio_irq_task = current; -rsi_interrupt_handler (adapter); - dev->sdio_irq_task =NULL ; +rsi_set_event (&dev->rx_thread.event); }/**
@@ -973,8 +971,6 @@ static int rsi_probe(struct sdio_func *pfunction,rsi_dbg (ERR_ZONE ,"%s: Unable to init rx thrd\n" , __func__); goto fail_kill_thread; } -skb_queue_head_init (&sdev->rx_q.head); - sdev->rx_q.num_rx_pkts =0 ;sdio_claim_host (pfunction);if (sdio_claim_irq (pfunction, rsi_handle_interrupt)) {
drivers/net/wireless/rsi/rsi_91x_sdio_ops.c +13 -39
96 lines not on this page · raw message
drivers/net/wireless/rsi/rsi_sdio.h +1 -7
@@ -110,11 +110,6 @@ struct receive_info {u32 buf_available_counter; }; -struct rsi_sdio_rx_q { -u8 num_rx_pkts; -struct sk_buff_head head; -}; -struct rsi_91x_sdiodev {struct sdio_func *pfunction;struct task_struct *sdio_irq_task;
@@ -127,11 +122,10 @@ struct rsi_91x_sdiodev {u16 tx_blk_size;u8 write_fail;bool buff_status_updated; -struct rsi_sdio_rx_q rx_q;struct rsi_thread rx_thread; +u8 pktbuffer[8192 ]__aligned(4) ; }; -void rsi_interrupt_handler (struct rsi_hw *adapter);int rsi_init_sdio_slave_regs (struct rsi_hw *adapter);int rsi_sdio_read_register (struct rsi_hw *adapter,u32 addr,u8 *data);int rsi_sdio_host_intf_read_pkt (struct rsi_hw *adapter,u8 *pkt,u32 length);
drivers/net/wireless/ti/wl12xx/main.c +0 -3
@@ -649,7 +649,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |=WLCORE_QUIRK_LEGACY_NVS |WLCORE_QUIRK_DUAL_PROBE_TMPL |WLCORE_QUIRK_TKIP_HEADER_SPACE | -WLCORE_QUIRK_START_STA_FAILS |WLCORE_QUIRK_AP_ZERO_SESSION_ID ; wl->sr_fw_name =WL127X_FW_NAME_SINGLE ; wl->mr_fw_name =WL127X_FW_NAME_MULTI ;
@@ -673,7 +672,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |=WLCORE_QUIRK_LEGACY_NVS |WLCORE_QUIRK_DUAL_PROBE_TMPL |WLCORE_QUIRK_TKIP_HEADER_SPACE | -WLCORE_QUIRK_START_STA_FAILS |WLCORE_QUIRK_AP_ZERO_SESSION_ID ; wl->plt_fw_name =WL127X_PLT_FW_NAME ; wl->sr_fw_name =WL127X_FW_NAME_SINGLE ;
@@ -702,7 +700,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |=WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN |WLCORE_QUIRK_DUAL_PROBE_TMPL |WLCORE_QUIRK_TKIP_HEADER_SPACE | -WLCORE_QUIRK_START_STA_FAILS |WLCORE_QUIRK_AP_ZERO_SESSION_ID ; wlcore_set_min_fw_ver(wl, WL128X_CHIP_VER,
drivers/net/wireless/ti/wlcore/main.c +1 -14
@@ -2875,21 +2875,8 @@ static int wlcore_join(struct wl1271 *wl, struct wl12xx_vif *wlvif)if (is_ibss) ret =wl12xx_cmd_role_start_ibss (wl, wlvif); -else { -if (wl->quirks &WLCORE_QUIRK_START_STA_FAILS ) { -/* -* TODO: this is an ugly workaround for wl12xx fw -* bug - we are not able to tx/rx after the first -* start_sta, so make dummy start+stop calls, -* and then call start_sta again. -* this should be fixed in the fw. -*/ -wl12xx_cmd_role_start_sta (wl, wlvif); -wl12xx_cmd_role_stop_sta (wl, wlvif); - } - +else ret =wl12xx_cmd_role_start_sta (wl, wlvif); - }return ret; }
drivers/net/wireless/ti/wlcore/wlcore.h +0 -3
@@ -559,9 +559,6 @@ wlcore_set_min_fw_ver(struct wl1271 *wl, unsigned int chip,/* Each RX/TX transaction requires an end-of-transaction transfer */ #define WLCORE_QUIRK_END_OF_TRANSACTION BIT(0) -/* the first start_role(sta) sometimes doesn't work on wl12xx */ -#define WLCORE_QUIRK_START_STA_FAILS BIT(1) -/* wl127x and SPI don't support SDIO block size alignment */ #define WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN BIT(2)
drivers/net/xen-netback/netback.c +11 -1
@@ -1326,11 +1326,21 @@ int xenvif_tx_action(struct xenvif_queue *queue, int budget)return 0 ;gnttab_batch_copy (queue->tx_copy_ops, nr_cops); -if (nr_mops !=0 ) +if (nr_mops !=0 ) { ret =gnttab_map_refs (queue->tx_map_ops,NULL , queue->pages_to_map, nr_mops); +if (ret) { +unsigned int i; + +netdev_err (queue->vif->dev,"Map fail: nr %u ret %d\n" , + nr_mops, ret); +for (i =0 ; i < nr_mops; ++i) +WARN_ON_ONCE (queue->tx_map_ops[i].status == + GNTST_okay); + } + } work_done =xenvif_tx_submit (queue);
drivers/pci/pci.c +8 -1
@@ -3361,7 +3361,14 @@ u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar)return 0 ;pci_read_config_dword (pdev, pos +PCI_REBAR_CAP , &cap); -return (cap &PCI_REBAR_CAP_SIZES ) >>4 ; + cap &=PCI_REBAR_CAP_SIZES ; + +/* Sapphire RX 5600 XT Pulse has an invalid cap dword for BAR 0 */ +if (pdev->vendor ==PCI_VENDOR_ID_ATI && pdev->device ==0x731f && + bar ==0 && cap ==0x7000 ) + cap =0x3f000 ; + +return cap >>4 ; }/**
drivers/s390/virtio/virtio_ccw.c +2 -2
@@ -103,7 +103,7 @@ struct virtio_rev_info { };/* the highest virtio-ccw revision we support */ -#define VIRTIO_CCW_REV_MAX 1 +#define VIRTIO_CCW_REV_MAX 2struct virtio_ccw_vq_info {struct virtqueue *vq;
@@ -911,7 +911,7 @@ static u8 virtio_ccw_get_status(struct virtio_device *vdev)u8 old_status = *vcdev->status;struct ccw1 *ccw; -if (vcdev->revision <1 ) +if (vcdev->revision <2 )return *vcdev->status; ccw =kzalloc (sizeof (*ccw),GFP_DMA |GFP_KERNEL );
drivers/scsi/libiscsi.c +74 -74
316 lines not on this page · raw message
drivers/scsi/scsi_transport_iscsi.c +30 -8
@@ -119,7 +119,11 @@ show_transport_handle(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_internal *priv =dev_to_iscsi_internal (dev); -return sprintf (buf,"%llu\n" , (unsigned long long )iscsi_handle (priv->iscsi_transport)); + +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ; +return sysfs_emit (buf,"%llu\n" , + (unsigned long long )iscsi_handle (priv->iscsi_transport)); } static DEVICE_ATTR(handle, S_IRUGO, show_transport_handle, NULL);
@@ -129,7 +133,7 @@ show_transport_##name(struct device *dev, \ struct device_attribute *attr,char *buf) \ { \ struct iscsi_internal *priv = dev_to_iscsi_internal(dev); \ -return sprintf (buf, format"\n" , priv->iscsi_transport->name); \ +return sysfs_emit (buf, format"\n" , priv->iscsi_transport->name);\ } \ static DEVICE_ATTR(name, S_IRUGO, show_transport_##name, NULL);
@@ -170,7 +174,7 @@ static ssize_t show_ep_handle(struct device *dev, struct device_attribute *attr, char *buf) { struct iscsi_endpoint *ep = iscsi_dev_to_endpoint(dev); -return sprintf (buf,"%llu\n" , (unsigned long long ) ep->id); +return sysfs_emit (buf,"%llu\n" , (unsigned long long ) ep->id); } static ISCSI_ATTR(ep, handle, S_IRUGO, show_ep_handle, NULL);
@@ -2763,6 +2767,9 @@ iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev)struct iscsi_cls_session *session;int err =0 , value =0 ; +if (ev->u.set_param.len >PAGE_SIZE ) +return -EINVAL ; + session =iscsi_session_lookup (ev->u.set_param.sid); conn =iscsi_conn_lookup (ev->u.set_param.sid, ev->u.set_param.cid);if (!conn || !session)
@@ -2910,6 +2917,9 @@ iscsi_set_host_param(struct iscsi_transport *transport,if (!transport->set_host_param)return -ENOSYS ; +if (ev->u.set_host_param.len >PAGE_SIZE ) +return -EINVAL ; + shost =scsi_host_lookup (ev->u.set_host_param.host_no);if (!shost) { printk(KERN_ERR "set_host_param could not find host no %u\n",
@@ -3497,6 +3507,7 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group) {int err =0 ;u32 portid; +u32 pdu_len;struct iscsi_uevent *ev =nlmsg_data (nlh);struct iscsi_transport *transport =NULL ;struct iscsi_internal *priv;
@@ -3504,6 +3515,9 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group)struct iscsi_cls_conn *conn;struct iscsi_endpoint *ep =NULL ; +if (!netlink_capable (skb,CAP_SYS_ADMIN )) +return -EPERM ; +if (nlh->nlmsg_type ==ISCSI_UEVENT_PATH_UPDATE ) *group =ISCSI_NL_GRP_UIP ;else
@@ -3611,6 +3625,14 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group) err = -EINVAL ;break ;case ISCSI_UEVENT_SEND_PDU : + pdu_len = nlh->nlmsg_len -sizeof (*nlh) -sizeof (*ev); + +if ((ev->u.send_pdu.hdr_size > pdu_len) || + (ev->u.send_pdu.data_size > (pdu_len - ev->u.send_pdu.hdr_size))) { + err = -EINVAL ; +break ; + } + conn =iscsi_conn_lookup (ev->u.send_pdu.sid, ev->u.send_pdu.cid);if (conn) ev->r.retcode = transport->send_pdu(conn,
@@ -4017,7 +4039,7 @@ show_priv_session_state(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_cls_session *session =iscsi_dev_to_session (dev->parent); -return sprintf (buf,"%s\n" ,iscsi_session_state_name (session->state)); +return sysfs_emit (buf,"%s\n" ,iscsi_session_state_name (session->state)); } static ISCSI_CLASS_ATTR(priv_sess, state, S_IRUGO, show_priv_session_state, NULL);
@@ -4026,7 +4048,7 @@ show_priv_session_creator(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_cls_session *session =iscsi_dev_to_session (dev->parent); -return sprintf (buf,"%d\n" , session->creator); +return sysfs_emit (buf,"%d\n" , session->creator); } static ISCSI_CLASS_ATTR(priv_sess, creator, S_IRUGO, show_priv_session_creator, NULL);
@@ -4035,7 +4057,7 @@ show_priv_session_target_id(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_cls_session *session =iscsi_dev_to_session (dev->parent); -return sprintf (buf,"%d\n" , session->target_id); +return sysfs_emit (buf,"%d\n" , session->target_id); } static ISCSI_CLASS_ATTR(priv_sess, target_id, S_IRUGO, show_priv_session_target_id, NULL);
@@ -4048,8 +4070,8 @@ show_priv_session_##field(struct device *dev, \struct iscsi_cls_session *session = \iscsi_dev_to_session (dev->parent); \if (session->field ==-1 ) \ -return sprintf (buf,"off\n" ); \ -return sprintf (buf, format"\n" , session->field); \ +return sysfs_emit (buf,"off\n" ); \ +return sysfs_emit (buf, format"\n" , session->field); \ }#define iscsi_priv_session_attr_store (field) \
drivers/staging/fwserial/fwserial.c +2 -0
@@ -2219,6 +2219,7 @@ static int fwserial_create(struct fw_unit *unit) err =fw_core_add_address_handler (&port->rx_handler, &fw_high_memory_region);if (err) { +tty_port_destroy (&port->port);kfree (port); goto free_ports; }
@@ -2301,6 +2302,7 @@ static int fwserial_create(struct fw_unit *unit) free_ports:for (--i; i >=0 ; --i) { +fw_core_remove_address_handler (&serial->ports[i]->rx_handler);tty_port_destroy (&serial->ports[i]->port);kfree (serial->ports[i]); }
drivers/staging/most/sound/sound.c +2 -0
@@ -86,6 +86,8 @@ static void swap_copy24(u8 *dest, const u8 *source, unsigned int bytes) {unsigned int i =0 ; +if (bytes <2 ) +return ;while (i < bytes -2 ) { dest[i] = source[i +2 ]; dest[i +1 ] = source[i +1 ];
drivers/tty/vt/consolemap.c +1 -1
@@ -495,7 +495,7 @@ con_insert_unipair(struct uni_pagedir *p, u_short unicode, u_short fontpos) p2[unicode &0x3f ] = fontpos; - p->sum += (fontpos <<20 ) + unicode; + p->sum += (fontpos <<20U ) + unicode;return 0 ; }
drivers/video/fbdev/udlfb.c +1 -0
@@ -1020,6 +1020,7 @@ static void dlfb_ops_destroy(struct fb_info *info) }vfree (dlfb->backing_buffer);kfree (dlfb->edid); +dlfb_free_urb_list (dlfb);usb_put_dev (dlfb->udev);kfree (dlfb);
fs/btrfs/transaction.c +6 -5
@@ -1249,7 +1249,6 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans)struct btrfs_root *gang[8 ];int i;int ret; -int err =0 ;spin_lock (&fs_info->fs_roots_radix_lock);while (1 ) {
@@ -1261,6 +1260,8 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans)break ;for (i =0 ; i < ret; i++) {struct btrfs_root *root = gang[i]; +int ret2; +radix_tree_tag_clear (&fs_info->fs_roots_radix, (unsigned long )root->root_key.objectid,BTRFS_ROOT_TRANS_TAG );
@@ -1282,17 +1283,17 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) root->node); } - err =btrfs_update_root (trans, fs_info->tree_root, + ret2 =btrfs_update_root (trans, fs_info->tree_root, &root->root_key, &root->root_item); +if (ret2) +return ret2;spin_lock (&fs_info->fs_roots_radix_lock); -if (err) -break ;btrfs_qgroup_free_meta_all_pertrans (root); } }spin_unlock (&fs_info->fs_roots_radix_lock); -return err; +return 0 ; }/*
fs/f2fs/namei.c +8 -0
@@ -772,7 +772,11 @@ static int __f2fs_tmpfile(struct inode *dir, struct dentry *dentry,if (whiteout) {f2fs_i_links_write (inode, false); + +spin_lock (&inode->i_lock); inode->i_state |=I_LINKABLE ; +spin_unlock (&inode->i_lock); + *whiteout = inode; }else {d_tmpfile (dentry, inode);
@@ -966,7 +970,11 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry, err =f2fs_add_link (old_dentry, whiteout);if (err) goto put_out_dir; + +spin_lock (&whiteout->i_lock); whiteout->i_state &= ~I_LINKABLE ; +spin_unlock (&whiteout->i_lock); +iput (whiteout); }
fs/f2fs/segment.h +2 -2
@@ -91,11 +91,11 @@#define BLKS_PER_SEC (sbi) \ ((sbi)->segs_per_sec * (sbi)->blocks_per_seg)#define GET_SEC_FROM_SEG (sbi, segno) \ - ((segno) / (sbi)->segs_per_sec) + (((segno) == -1) ? -1: (segno) / (sbi)->segs_per_sec)#define GET_SEG_FROM_SEC (sbi, secno) \ ((secno) * (sbi)->segs_per_sec)#define GET_ZONE_FROM_SEC (sbi, secno) \ - ((secno) / (sbi)->secs_per_zone) + (((secno) == -1) ? -1: (secno) / (sbi)->secs_per_zone)#define GET_ZONE_FROM_SEG (sbi, segno) \ GET_ZONE_FROM_SEC(sbi, GET_SEC_FROM_SEG(sbi, segno))
fs/jfs/jfs_filsys.h +1 -0
@@ -281,5 +281,6 @@* fsck() must be run to repair */ #define FM_EXTENDFS 0x00000008/* file system extendfs() in progress */ +#define FM_STATE_MAX 0x0000000f/* max value of s_state */ #endif /* _H_JFS_FILSYS */
fs/jfs/jfs_mount.c +10 -0
@@ -49,6 +49,7 @@#include <linux/fs.h> #include <linux/buffer_head.h> +#include <linux/log2.h> #include "jfs_incore.h" #include "jfs_filsys.h"
@@ -378,6 +379,15 @@ static int chkSuper(struct super_block *sb) sbi->bsize = bsize; sbi->l2bsize =le16_to_cpu (j_sb->s_l2bsize); +/* check some fields for possible corruption */ +if (sbi->l2bsize !=ilog2 ((u32 )bsize) || + j_sb->pad !=0 || +le32_to_cpu (j_sb->s_state) >FM_STATE_MAX ) { + rc = -EINVAL ; +jfs_err ("jfs_mount: Mount Failure: superblock is corrupt!" ); + goto out; + } +/* * For now, ignore s_pbsize, l2bfactor. All I/O going through buffer * cache.
fs/sysfs/file.c +55 -0
64 lines not on this page · raw message
fs/xfs/xfs_iops.c +1 -1
@@ -849,7 +849,7 @@ xfs_setattr_size(ASSERT (xfs_isilocked (ip,XFS_MMAPLOCK_EXCL ));ASSERT (S_ISREG (inode->i_mode));ASSERT ((iattr->ia_valid & (ATTR_UID |ATTR_GID |ATTR_ATIME |ATTR_ATIME_SET | -ATTR_MTIME_SET |ATTR_KILL_PRIV |ATTR_TIMES_SET )) ==0 ); +ATTR_MTIME_SET |ATTR_TIMES_SET )) ==0 ); oldsize = inode->i_size; newsize = iattr->ia_size;
include/linux/sysfs.h +16 -0
@@ -299,6 +299,11 @@ static inline void sysfs_enable_ns(struct kernfs_node *kn)return kernfs_enable_ns (kn); } +__printf(2, 3) +int sysfs_emit(char *buf, const char *fmt, ...); +__printf(3, 4) +int sysfs_emit_at (char *buf,int at,const char *fmt, ...); +#else /* CONFIG_SYSFS */ static inline int sysfs_create_dir_ns (struct kobject *kobj,const void *ns)
@@ -505,6 +510,17 @@ static inline void sysfs_enable_ns(struct kernfs_node *kn) { } +__printf(2, 3) +static inline int sysfs_emit (char *buf,const char *fmt, ...) +{ +return 0 ; +} + +__printf(3, 4) +static inline int sysfs_emit_at (char *buf,int at,const char *fmt, ...) +{ +return 0 ; +}#endif /* CONFIG_SYSFS */ static inline int __must_check sysfs_create_file(struct kobject *kobj,
include/linux/zsmalloc.h +1 -1
@@ -36,7 +36,7 @@ enum zs_mapmode {struct zs_pool_stats {/* How many pages were migrated (freed) */ -unsigned long pages_compacted; +atomic_long_t pages_compacted; };struct zs_pool ;
mm/hugetlb.c +16 -12
@@ -1171,14 +1171,16 @@ static inline void destroy_compound_gigantic_page(struct page *page,static void update_and_free_page (struct hstate *h,struct page *page) {int i; +struct page *subpage = page;if (hstate_is_gigantic (h) && !gigantic_page_supported ())return ; h->nr_huge_pages--; h->nr_huge_pages_node[page_to_nid (page)]--; -for (i =0 ; i <pages_per_huge_page (h); i++) { - page[i].flags &= ~(1 << PG_locked |1 << PG_error | +for (i =0 ; i <pages_per_huge_page (h); + i++, subpage =mem_map_next (subpage, page, i)) { + subpage->flags &= ~(1 << PG_locked |1 << PG_error |1 << PG_referenced |1 << PG_dirty |1 << PG_active |1 << PG_private |1 << PG_writeback);
@@ -4704,21 +4706,23 @@ static bool vma_shareable(struct vm_area_struct *vma, unsigned long addr)void adjust_range_if_pmd_sharing_possible (struct vm_area_struct *vma,unsigned long *start,unsigned long *end) { -unsigned long a_start, a_end; +unsigned long v_start =ALIGN (vma->vm_start,PUD_SIZE ), + v_end =ALIGN_DOWN (vma->vm_end,PUD_SIZE ); -if (!(vma->vm_flags &VM_MAYSHARE )) +/* +* vma need span at least one aligned PUD size and the start,end range +* must at least partialy within it. +*/ +if (!(vma->vm_flags &VM_MAYSHARE ) || !(v_end > v_start) || + (*end <= v_start) || (*start >= v_end))return ;/* Extend the range to be PUD aligned for a worst case scenario */ - a_start =ALIGN_DOWN (*start,PUD_SIZE ); - a_end =ALIGN (*end,PUD_SIZE ); +if (*start > v_start) + *start =ALIGN_DOWN (*start,PUD_SIZE ); -/* -* Intersect the range with the vma range, since pmd sharing won't be -* across vma after all -*/ - *start =max (vma->vm_start, a_start); - *end =min (vma->vm_end, a_end); +if (*end < v_end) + *end =ALIGN (*end,PUD_SIZE ); }/*
mm/page_io.c +3 -8
@@ -38,7 +38,6 @@ static struct bio *get_swap_bio(gfp_t gfp_flags, bio->bi_iter.bi_sector =map_swap_page (page, &bdev);bio_set_dev (bio, bdev); - bio->bi_iter.bi_sector <<=PAGE_SHIFT -9 ; bio->bi_end_io = end_io;for (i =0 ; i < nr; i++)
@@ -262,11 +261,6 @@ int swap_writepage(struct page *page, struct writeback_control *wbc)return ret; } -static sector_t swap_page_sector (struct page *page) -{ -return (sector_t )__page_file_index (page) << (PAGE_SHIFT -9 ); -} -static inline void count_swpout_vm_event (struct page *page) {#ifdef CONFIG_TRANSPARENT_HUGEPAGE
@@ -325,7 +319,8 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc,return ret; } - ret =bdev_write_page (sis->bdev,swap_page_sector (page), page, wbc); + ret =bdev_write_page (sis->bdev,map_swap_page (page, &sis->bdev), + page, wbc);if (!ret) {count_swpout_vm_event (page);return 0 ;
@@ -376,7 +371,7 @@ int swap_readpage(struct page *page, bool synchronous)return ret; } - ret =bdev_read_page (sis->bdev,swap_page_sector (page), page); + ret =bdev_read_page (sis->bdev,map_swap_page (page, &sis->bdev), page);if (!ret) {if (trylock_page (page)) {swap_slot_free_notify (page);
mm/swapfile.c +1 -1
@@ -2305,7 +2305,7 @@ sector_t map_swap_page(struct page *page, struct block_device **bdev) {swp_entry_t entry; entry.val =page_private (page); -return map_swap_entry (entry, bdev); +return map_swap_entry (entry, bdev) << (PAGE_SHIFT -9 ); }/*
mm/zsmalloc.c +11 -6
@@ -2285,11 +2285,13 @@ static unsigned long zs_can_compact(struct size_class *class)return obj_wasted * class->pages_per_zspage; } -static void __zs_compact (struct zs_pool *pool,struct size_class *class) +static unsigned long __zs_compact (struct zs_pool *pool, +struct size_class *class) {struct zs_compact_control cc;struct zspage *src_zspage;struct zspage *dst_zspage =NULL ; +unsigned long pages_freed =0 ;spin_lock (&class->lock);while ((src_zspage =isolate_zspage (class, true))) {
@@ -2319,7 +2321,7 @@ static void __zs_compact(struct zs_pool *pool, struct size_class *class)putback_zspage (class, dst_zspage);if (putback_zspage (class, src_zspage) ==ZS_EMPTY ) {free_zspage (pool, class, src_zspage); - pool->stats.pages_compacted += class->pages_per_zspage; + pages_freed += class->pages_per_zspage; }spin_unlock (&class->lock);cond_resched ();
@@ -2330,12 +2332,15 @@ static void __zs_compact(struct zs_pool *pool, struct size_class *class)putback_zspage (class, src_zspage);spin_unlock (&class->lock); + +return pages_freed; }unsigned long zs_compact (struct zs_pool *pool) {int i;struct size_class *class; +unsigned long pages_freed =0 ;for (i =ZS_SIZE_CLASSES -1 ; i >=0 ; i--) { class = pool->size_class[i];
@@ -2343,10 +2348,11 @@ unsigned long zs_compact(struct zs_pool *pool)continue ;if (class->index != i)continue ; -__zs_compact (pool, class); + pages_freed +=__zs_compact (pool, class); } +atomic_long_add (pages_freed, &pool->stats.pages_compacted); -return pool->stats.pages_compacted; +return pages_freed; }EXPORT_SYMBOL_GPL (zs_compact);
@@ -2363,13 +2369,12 @@ static unsigned long zs_shrinker_scan(struct shrinker *shrinker, struct zs_pool *pool = container_of(shrinker, struct zs_pool, shrinker); - pages_freed = pool->stats.pages_compacted;/* * Compact classes and calculate compaction delta. * Can run concurrently with a manually triggered * (by user) compaction. */ - pages_freed =zs_compact (pool) - pages_freed; + pages_freed =zs_compact (pool);return pages_freed ? pages_freed :SHRINK_STOP ; }
net/bluetooth/amp.c +3 -0
@@ -305,6 +305,9 @@ void amp_read_loc_assoc_final_data(struct hci_dev *hdev,struct hci_request req;int err; +if (!mgr) +return ; + cp.phy_handle = hcon->handle; cp.len_so_far =cpu_to_le16 (0 ); cp.max_len =cpu_to_le16 (hdev->amp_assoc_size);
net/bridge/br_sysfs_if.c +6 -3
@@ -59,9 +59,8 @@ static BRPORT_ATTR(_name, 0644, \static int store_flag (struct net_bridge_port *p,unsigned long v,unsigned long mask) { -unsigned long flags; - - flags = p->flags; +unsigned long flags = p->flags; +int err;if (v) flags |= mask;
@@ -69,6 +68,10 @@ static int store_flag(struct net_bridge_port *p, unsigned long v, flags &= ~mask;if (flags != p->flags) { + err =br_switchdev_set_port_flag (p, flags, mask); +if (err) +return err; + p->flags = flags;br_port_flags_change (p, mask); }
net/core/pktgen.c +1 -1
@@ -3471,7 +3471,7 @@ static int pktgen_thread_worker(void *arg)struct pktgen_dev *pkt_dev =NULL ;int cpu = t->cpu; -BUG_ON (smp_processor_id () != cpu); +WARN_ON (smp_processor_id () != cpu);init_waitqueue_head (&t->queue);complete (&t->start_done);
net/core/skbuff.c +13 -1
@@ -3092,7 +3092,19 @@ EXPORT_SYMBOL(skb_split);*/ static int skb_prepare_for_shift (struct sk_buff *skb) { -return skb_cloned (skb) &&pskb_expand_head (skb,0 ,0 ,GFP_ATOMIC ); +int ret =0 ; + +if (skb_cloned (skb)) { +/* Save and restore truesize: pskb_expand_head() may reallocate +* memory where ksize(kmalloc(S)) != ksize(kmalloc(S)), but we +* cannot change truesize at this point. +*/ +unsigned int save_truesize = skb->truesize; + + ret =pskb_expand_head (skb,0 ,0 ,GFP_ATOMIC ); + skb->truesize = save_truesize; + } +return ret; }/**
security/smack/smackfs.c +19 -2
@@ -1191,7 +1191,7 @@ static ssize_t smk_write_net4addr(struct file *file, const char __user *buf,return -EPERM ;if (*ppos !=0 )return -EINVAL ; -if (count <SMK_NETLBLADDRMIN ) +if (count <SMK_NETLBLADDRMIN || count >PAGE_SIZE -1 )return -EINVAL ; data =memdup_user_nul (buf, count);
@@ -1451,7 +1451,7 @@ static ssize_t smk_write_net6addr(struct file *file, const char __user *buf,return -EPERM ;if (*ppos !=0 )return -EINVAL ; -if (count <SMK_NETLBLADDRMIN ) +if (count <SMK_NETLBLADDRMIN || count >PAGE_SIZE -1 )return -EINVAL ; data =memdup_user_nul (buf, count);
@@ -1858,6 +1858,10 @@ static ssize_t smk_write_ambient(struct file *file, const char __user *buf,if (!smack_privileged (CAP_MAC_ADMIN ))return -EPERM ; +/* Enough data must be present */ +if (count ==0 || count >PAGE_SIZE ) +return -EINVAL ; + data =memdup_user_nul (buf, count);if (IS_ERR (data))return PTR_ERR (data);
@@ -2029,6 +2033,9 @@ static ssize_t smk_write_onlycap(struct file *file, const char __user *buf,if (!smack_privileged (CAP_MAC_ADMIN ))return -EPERM ; +if (count >PAGE_SIZE ) +return -EINVAL ; + data =memdup_user_nul (buf, count);if (IS_ERR (data))return PTR_ERR (data);
@@ -2116,6 +2123,9 @@ static ssize_t smk_write_unconfined(struct file *file, const char __user *buf,if (!smack_privileged (CAP_MAC_ADMIN ))return -EPERM ; +if (count >PAGE_SIZE ) +return -EINVAL ; + data =memdup_user_nul (buf, count);if (IS_ERR (data))return PTR_ERR (data);
@@ -2669,6 +2679,10 @@ static ssize_t smk_write_syslog(struct file *file, const char __user *buf,if (!smack_privileged (CAP_MAC_ADMIN ))return -EPERM ; +/* Enough data must be present */ +if (count ==0 || count >PAGE_SIZE ) +return -EINVAL ; + data =memdup_user_nul (buf, count);if (IS_ERR (data))return PTR_ERR (data);
@@ -2761,10 +2775,13 @@ static ssize_t smk_write_relabel_self(struct file *file, const char __user *buf,return -EPERM ;/* +* No partial write. * Enough data must be present. */ if (*ppos !=0 )return -EINVAL ; +if (count ==0 || count >PAGE_SIZE ) +return -EINVAL ; data =memdup_user_nul (buf, count);if (IS_ERR (data))
sound/pci/hda/patch_realtek.c +2 -0
@@ -2507,6 +2507,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {SND_PCI_QUIRK (0x1462 ,0x1276 ,"MSI-GL73" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x1293 ,"MSI-GP65" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x7350 ,"MSI-7350" ,ALC889_FIXUP_CD ), +SND_PCI_QUIRK (0x1462 ,0xcc34 ,"MSI Godlike X570" ,ALC1220_FIXUP_GB_DUAL_CODECS ),SND_PCI_QUIRK (0x1462 ,0xda57 ,"MSI Z270-Gaming" ,ALC1220_FIXUP_GB_DUAL_CODECS ),SND_PCI_QUIRK_VENDOR (0x1462 ,"MSI" ,ALC882_FIXUP_GPIO3 ), SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
@@ -7179,6 +7180,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1558 ,0x8551 ,"System76 Gazelle (gaze14)" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x8560 ,"System76 Gazelle (gaze14)" ,ALC269_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1558 ,0x8561 ,"System76 Gazelle (gaze14)" ,ALC269_FIXUP_HEADSET_MIC ), +SND_PCI_QUIRK (0x1558 ,0x8562 ,"Clevo NH[5|7][0-9]RZ[Q]" ,ALC269_FIXUP_DMIC ),SND_PCI_QUIRK (0x1558 ,0x8668 ,"Clevo NP50B[BE]" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x8680 ,"Clevo NJ50LU" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ), SND_PCI_QUIRK(0x1558, 0x8686, "Clevo NH50[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
sound/soc/intel/boards/bytcr_rt5640.c +37 -0
@@ -409,6 +409,19 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {BYT_RT5640_SSP0_AIF1 | BYT_RT5640_MCLK_EN), }, + { /* Acer One 10 S1002 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Acer" ), + DMI_MATCH(DMI_PRODUCT_NAME, "One S1002"), + }, + .driver_data = (void *)(BYT_RT5640_IN1_MAP | +BYT_RT5640_JD_SRC_JD2_IN4N | +BYT_RT5640_OVCD_TH_2000UA | +BYT_RT5640_OVCD_SF_0P75 | +BYT_RT5640_DIFF_MIC | +BYT_RT5640_SSP0_AIF2 | + BYT_RT5640_MCLK_EN), + }, { .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
@@ -510,6 +523,16 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {BYT_RT5640_MONO_SPEAKER | BYT_RT5640_MCLK_EN), }, + { /* Estar Beauty HD MID 7316R */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Estar" ), + DMI_MATCH(DMI_PRODUCT_NAME, "eSTAR BEAUTY HD Intel Quad core"), + }, + .driver_data = (void *)(BYTCR_INPUT_DEFAULTS | +BYT_RT5640_MONO_SPEAKER | +BYT_RT5640_SSP0_AIF1 | + BYT_RT5640_MCLK_EN), + }, { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
@@ -746,6 +769,20 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {BYT_RT5640_SSP0_AIF2 | BYT_RT5640_MCLK_EN), }, + { /* Voyo Winpad A15 */ + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"AMI Corporation" ), +DMI_MATCH (DMI_BOARD_NAME ,"Aptio CRB" ), +/* Above strings are too generic, also match on BIOS date */ + DMI_MATCH(DMI_BIOS_DATE, "11/20/2014"), + }, + .driver_data = (void *)(BYT_RT5640_IN1_MAP | +BYT_RT5640_JD_SRC_JD2_IN4N | +BYT_RT5640_OVCD_TH_2000UA | +BYT_RT5640_OVCD_SF_0P75 | +BYT_RT5640_DIFF_MIC | + BYT_RT5640_MCLK_EN), + }, { /* Catch-all for generic Insyde tablets, must be last */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),