Linux 5.4.265
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.265 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm64/include/asm/pgtable.h | 6 ++ arch/powerpc/kernel/trace/ftrace_64_mprofile.S | 17 ++++- block/blk-throttle.c | 2 drivers/atm/solos-pci.c | 8 +- drivers/hid/hid-asus.c | 25 +++++++- drivers/hid/hid-multitouch.c | 5 + drivers/hid/hid-quirks.c | 1 drivers/md/bcache/bcache.h | 1 drivers/md/bcache/btree.c | 7 ++ drivers/md/bcache/super.c | 4 + drivers/mmc/core/core.c | 2 drivers/mmc/core/mmc_ops.c | 5 + drivers/mmc/core/mmc_ops.h | 2 drivers/net/ethernet/qlogic/qed/qed_cxt.c | 1 drivers/net/ethernet/qualcomm/qca_debug.c | 17 +++-- drivers/net/ethernet/qualcomm/qca_spi.c | 20 ++++++ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 +- drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 8 ++ drivers/net/team/team.c | 4 + drivers/net/usb/aqc111.c | 8 +- drivers/net/usb/qmi_wwan.c | 1 drivers/pci/hotplug/acpiphp_glue.c | 9 +-- drivers/platform/x86/intel_telemetry_core.c | 4 - drivers/soundwire/stream.c | 7 +- fs/afs/rxrpc.c | 2 fs/ext4/mballoc.c | 4 + include/asm-generic/qspinlock.h | 2 include/linux/cred.h | 8 +- include/net/addrconf.h | 12 +++- include/net/if_inet6.h | 4 - kernel/cred.c | 64 +++++++++++----------- kernel/events/core.c | 10 +++ kernel/trace/ring_buffer.c | 2 net/appletalk/ddp.c | 9 +-- net/atm/ioctl.c | 7 +- net/ipv4/tcp_output.c | 6 ++ net/ipv6/addrconf.c | 6 -- net/rose/af_rose.c | 4 + net/vmw_vsock/virtio_transport_common.c | 2 scripts/sign-file.c | 12 ++-- sound/pci/hda/patch_hdmi.c | 2 42 files changed, 219 insertions(+), 109 deletions(-)
Adrian Hunter (1):
mmc: block: Be sure to wait while busy in CQE error recovery
Andrew Halaney (1):
net: stmmac: Handle disabled MDIO busses from devicetree
Andy Shevchenko (1):
platform/x86: intel_telemetry: Fix kernel doc descriptions
Aoba K (1):
HID: multitouch: Add quirk for HONOR GLO-GXXX touchpad
Baokun Li (1):
ext4: prevent the normalized size from exceeding EXT_MAX_BLOCKS
Bjorn Helgaas (1):
Revert "PCI: acpiphp: Reassign resources on bridge if necessary"
Chengfeng Ye (2):
atm: solos-pci: Fix potential deadlock on &cli_queue_lock
atm: solos-pci: Fix potential deadlock on &tx_queue_lock
Coly Li (3):
bcache: avoid oversize memory allocation by small stripe_size
bcache: add code comments for bch_btree_node_get() and __bch_btree_node_alloc()
bcache: avoid NULL checking to c->root in run_cache_set()
David Howells (1):
afs: Fix refcount underflow from error handling race
Denis Benato (2):
HID: hid-asus: reset the backlight brightness level on resume
HID: hid-asus: add const to read-only outgoing usb buffer
Dinghao Liu (1):
qed: Fix a potential use-after-free in qed_cxt_tables_alloc
Dong Chenchen (1):
net: Remove acked SYN flag from packet in the transmit queue correctly
Florent Revest (1):
team: Fix use-after-free when an option instance allocation fails
Greg Kroah-Hartman (1):
Linux 5.4.265
Hyunwoo Kim (3):
atm: Fix Use-After-Free in do_vcc_ioctl net/rose: Fix Use-After-Free in rose_ioctl
appletalk: Fix Use-After-Free in atalk_ioctl
James Houghton (1):
arm64: mm: Always make sw-dirty PTEs hw-dirty in pte_modify
Jens Axboe (1):
cred: switch to using atomic_long_t
Kai Vehmanen (1):
ALSA: hda/hdmi: add force-connect quirks for ASUSTeK Z170 variants
Krzysztof Kozlowski (1):
soundwire: stream: fix NULL pointer dereference for multi_link
Lech Perczak (1):
net: usb: qmi_wwan: claim interface 4 for ZTE MF290
Linus Torvalds (1):
asm-generic: qspinlock: fix queued_spin_value_unlocked() implementation
Maciej Żenczykowski (1):
net: ipv6: support reporting otherwise unknown prefix flags in RTM_NEWPREFIX
Mark Rutland (1):
perf: Fix perf_event_validate_size() lockdep splat
Ming Lei (1):
blk-throttle: fix lockdep warning of "cgroup_mutex or RCU read lock required!"
Naveen N Rao (2):
powerpc/ftrace: Create a dummy stackframe to fix stack unwind powerpc/ftrace: Fix stack teardown in ftrace_no_trace
Nikolay Kuratov (1):
vsock/virtio: Fix unsigned integer wrap around in virtio_transport_has_space()
Oliver Neukum (2):
usb: aqc111: check packet for fixup for true limit
HID: add ALWAYS_POLL quirk for Apple kb
Rasmus Villemoes (1):
net: stmmac: use dev_err_probe() for reporting mdio bus registration failure
Stefan Wahren (3):
qca_debug: Prevent crash on TX ring changes
qca_debug: Fix ethtool -G iface tx behavior
qca_spi: Fix reset behavior
Steven Rostedt (Google) (1):
ring-buffer: Fix memory leak of free page
Yusong Gao (1):
sign-file: Fix incorrect return values check
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 264 +SUBLEVEL = 265 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm64/include/asm/pgtable.h +6 -0
@@ -679,6 +679,12 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)if (pte_hw_dirty (pte)) pte =pte_mkdirty (pte);pte_val (pte) = (pte_val (pte) & ~mask) | (pgprot_val (newprot) & mask); +/* +* If we end up clearing hw dirtiness for a sw-dirty PTE, set hardware +* dirtiness again. +*/ +if (pte_sw_dirty (pte)) + pte =pte_mkdirty (pte);return pte; }
arch/powerpc/kernel/trace/ftrace_64_mprofile.S +13 -4
@@ -36,6 +36,9 @@ _GLOBAL(ftrace_regs_caller) /* Save the original return address in A's stack frame */ std r0,LRSAVE(r1) + /* Create a minimal stack frame for representing B */ + stdu r1, -STACK_FRAME_MIN_SIZE(r1) + /* Create our stack frame + pt_regs */ stdu r1,-SWITCH_FRAME_SIZE(r1)
@@ -52,7 +55,7 @@ _GLOBAL(ftrace_regs_caller) SAVE_10GPRS(22, r1) /* Save previous stack pointer (r1) */ - addi r8, r1, SWITCH_FRAME_SIZE + addi r8, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE std r8, GPR1(r1) /* Load special regs for save below */
@@ -65,6 +68,8 @@ _GLOBAL(ftrace_regs_caller) mflr r7 /* Save it as pt_regs->nip */ std r7, _NIP(r1) + /* Also save it in B's stackframe header for proper unwind */ + std r7, LRSAVE+SWITCH_FRAME_SIZE(r1) /* Save the read LR in pt_regs->link */ std r0, _LINK(r1)
@@ -121,7 +126,7 @@ ftrace_regs_call: ld r2, 24(r1) /* Pop our stack frame */ - addi r1, r1, SWITCH_FRAME_SIZE + addi r1, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE #ifdef CONFIG_LIVEPATCH /* Based on the cmpd above, if the NIP was altered handle livepatch */
@@ -145,7 +150,7 @@ ftrace_no_trace: mflr r3 mtctr r3 REST_GPR(3, r1) - addi r1, r1, SWITCH_FRAME_SIZE + addi r1, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE mtlr r0 bctr
@@ -153,6 +158,9 @@ _GLOBAL(ftrace_caller) /* Save the original return address in A's stack frame */ std r0, LRSAVE(r1) + /* Create a minimal stack frame for representing B */ + stdu r1, -STACK_FRAME_MIN_SIZE(r1) + /* Create our stack frame + pt_regs */ stdu r1, -SWITCH_FRAME_SIZE(r1)
@@ -166,6 +174,7 @@ _GLOBAL(ftrace_caller) /* Get the _mcount() call site out of LR */ mflr r7 std r7, _NIP(r1) + std r7, LRSAVE+SWITCH_FRAME_SIZE(r1) /* Save callee's TOC in the ABI compliant location */ std r2, 24(r1)
@@ -200,7 +209,7 @@ ftrace_call: ld r2, 24(r1) /* Pop our stack frame */ - addi r1, r1, SWITCH_FRAME_SIZE + addi r1, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE /* Reload original LR */ ld r0, LRSAVE(r1)
block/blk-throttle.c +2 -0
@@ -1374,6 +1374,7 @@ static void tg_conf_updated(struct throtl_grp *tg, bool global)tg_bps_limit (tg,READ ),tg_bps_limit (tg,WRITE ), tg_iops_limit(tg, READ), tg_iops_limit(tg, WRITE)); +rcu_read_lock ();/* * Update has_rules[] flags for the updated tg's subtree. A tg is * considered to have rules if either the tg itself or any of its
@@ -1401,6 +1402,7 @@ static void tg_conf_updated(struct throtl_grp *tg, bool global) this_tg->latency_target =max (this_tg->latency_target, parent_tg->latency_target); } +rcu_read_unlock ();/* * We're already holding queue_lock and know @tg is valid. Let's
drivers/atm/solos-pci.c +4 -4
@@ -449,9 +449,9 @@ static ssize_t console_show(struct device *dev, struct device_attribute *attr,struct sk_buff *skb;unsigned int len; -spin_lock (&card->cli_queue_lock); +spin_lock_bh (&card->cli_queue_lock); skb =skb_dequeue (&card->cli_queue[SOLOS_CHAN (atmdev)]); -spin_unlock (&card->cli_queue_lock); +spin_unlock_bh (&card->cli_queue_lock);if (skb ==NULL )return sprintf (buf,"No data.\n" );
@@ -956,14 +956,14 @@ static void pclose(struct atm_vcc *vcc)struct pkt_hdr *header;/* Remove any yet-to-be-transmitted packets from the pending queue */ -spin_lock (&card->tx_queue_lock); +spin_lock_bh (&card->tx_queue_lock); skb_queue_walk_safe(&card->tx_queue[port], skb, tmpskb) {if (SKB_CB (skb)->vcc == vcc) {skb_unlink (skb, &card->tx_queue[port]);solos_pop (vcc, skb); } } -spin_unlock (&card->tx_queue_lock); +spin_unlock_bh (&card->tx_queue_lock); skb =alloc_skb (sizeof (*header),GFP_KERNEL );if (!skb) {
drivers/hid/hid-asus.c +22 -3
@@ -336,7 +336,7 @@ static int asus_raw_event(struct hid_device *hdev,return 0 ; } -static int asus_kbd_set_report (struct hid_device *hdev,u8 *buf,size_t buf_size) +static int asus_kbd_set_report (struct hid_device *hdev,const u8 *buf,size_t buf_size) {unsigned char *dmabuf;int ret;
@@ -355,7 +355,7 @@ static int asus_kbd_set_report(struct hid_device *hdev, u8 *buf, size_t buf_sizestatic int asus_kbd_init (struct hid_device *hdev) { -u8 buf[] = {FEATURE_KBD_REPORT_ID ,0x41 ,0x53 ,0x55 ,0x53 ,0x20 ,0x54 , +const u8 buf[] = {FEATURE_KBD_REPORT_ID ,0x41 ,0x53 ,0x55 ,0x53 ,0x20 ,0x54 ,0x65 ,0x63 ,0x68 ,0x2e ,0x49 ,0x6e ,0x63 ,0x2e ,0x00 };int ret;
@@ -369,7 +369,7 @@ static int asus_kbd_init(struct hid_device *hdev)static int asus_kbd_get_functions (struct hid_device *hdev,unsigned char *kbd_func) { -u8 buf[] = {FEATURE_KBD_REPORT_ID ,0x05 ,0x20 ,0x31 ,0x00 ,0x08 }; +const u8 buf[] = {FEATURE_KBD_REPORT_ID ,0x05 ,0x20 ,0x31 ,0x00 ,0x08 };u8 *readbuf;int ret;
@@ -908,6 +908,24 @@ static int asus_start_multitouch(struct hid_device *hdev)return 0 ; } +static int __maybe_unused asus_resume (struct hid_device *hdev) { +struct asus_drvdata *drvdata =hid_get_drvdata (hdev); +int ret =0 ; + +if (drvdata->kbd_backlight) { +const u8 buf[] = {FEATURE_KBD_REPORT_ID ,0xba ,0xc5 ,0xc4 , + drvdata->kbd_backlight->cdev.brightness }; + ret =asus_kbd_set_report (hdev, buf,sizeof (buf)); +if (ret <0 ) { +hid_err (hdev,"Asus failed to set keyboard backlight: %d\n" , ret); + goto asus_resume_err; + } + } + +asus_resume_err: +return ret; +} +static int __maybe_unused asus_reset_resume (struct hid_device *hdev) {struct asus_drvdata *drvdata =hid_get_drvdata (hdev);
@@ -1185,6 +1203,7 @@ static struct hid_driver asus_driver = { .input_configured = asus_input_configured, #ifdef CONFIG_PM .reset_resume = asus_reset_resume, + .resume = asus_resume, #endif .event = asus_event, .raw_event = asus_raw_event
drivers/hid/hid-multitouch.c +5 -0
@@ -2003,6 +2003,11 @@ static const struct hid_device_id mt_devices[] = { MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT, USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) }, +/* HONOR GLO-GXXX panel */ + { .driver_data = MT_CLS_VTL, +HID_DEVICE (BUS_I2C ,HID_GROUP_MULTITOUCH_WIN_8 , + 0x347d, 0x7853) }, + /* Ilitek dual touch panel */ { .driver_data = MT_CLS_NSMU, MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
drivers/hid/hid-quirks.c +1 -0
@@ -33,6 +33,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_AKAI, USB_DEVICE_ID_AKAI_MPKMINI2), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD), HID_QUIRK_BADPAD }, { HID_USB_DEVICE(USB_VENDOR_ID_AMI, USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_MOUSE), HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM), HID_QUIRK_NOGET }, { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC), HID_QUIRK_NOGET }, { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM), HID_QUIRK_NOGET },
drivers/md/bcache/bcache.h +1 -0
@@ -265,6 +265,7 @@ struct bcache_device {#define BCACHE_DEV_WB_RUNNING 3#define BCACHE_DEV_RATE_DW_RUNNING 4int nr_stripes; +#define BCH_MIN_STRIPE_SZ ((4 << 20) >> SECTOR_SHIFT)unsigned int stripe_size;atomic_t *stripe_sectors_dirty;unsigned long *full_dirty_stripes;
drivers/md/bcache/btree.c +7 -0
@@ -1020,6 +1020,9 @@ static struct btree *mca_alloc(struct cache_set *c, struct btree_op *op,* * The btree node will have either a read or a write lock held, depending on * level and op->lock. +* +* Note: Only error code or btree pointer will be returned, it is unncessary +* for callers to check NULL pointer. */ struct btree *bch_btree_node_get(struct cache_set *c, struct btree_op *op, struct bkey *k, int level, bool write,
@@ -1132,6 +1135,10 @@ static void btree_node_free(struct btree *b)mutex_unlock (&b->c->bucket_lock); } +/* +* Only error code or btree pointer will be returned, it is unncessary for +* callers to check NULL pointer. +*/ struct btree *__bch_btree_node_alloc (struct cache_set *c,struct btree_op *op,int level,bool wait,struct btree *parent)
drivers/md/bcache/super.c +3 -1
@@ -822,6 +822,8 @@ static int bcache_device_init(struct bcache_device *d, unsigned int block_size,if (!d->stripe_size) d->stripe_size =1 <<31 ; +else if (d->stripe_size <BCH_MIN_STRIPE_SZ ) + d->stripe_size =roundup (BCH_MIN_STRIPE_SZ , d->stripe_size); n =DIV_ROUND_UP_ULL (sectors, d->stripe_size);if (!n || n > max_stripes) {
@@ -1906,7 +1908,7 @@ static int run_cache_set(struct cache_set *c) c->root =bch_btree_node_get (c,NULL , k, j->btree_level, true,NULL ); -if (IS_ERR_OR_NULL (c->root)) +if (IS_ERR (c->root)) goto err;list_del_init (&c->root->list);
drivers/mmc/core/core.c +2 -0
@@ -570,6 +570,8 @@ int mmc_cqe_recovery(struct mmc_host *host) cmd.busy_timeout =MMC_CQE_RECOVERY_TIMEOUT ;mmc_wait_for_cmd (host, &cmd,MMC_CMD_RETRIES ); +mmc_poll_for_busy (host->card,MMC_CQE_RECOVERY_TIMEOUT , true, true); +memset (&cmd,0 ,sizeof (cmd)); cmd.opcode =MMC_CMDQ_TASK_MGMT ; cmd.arg =1 ;/* Discard entire queue */
drivers/mmc/core/mmc_ops.c +3 -2
@@ -450,8 +450,8 @@ int mmc_switch_status(struct mmc_card *card)return __mmc_switch_status (card, true); } -static int mmc_poll_for_busy (struct mmc_card *card,unsigned int timeout_ms, -bool send_status,bool retry_crc_err) +int mmc_poll_for_busy (struct mmc_card *card,unsigned int timeout_ms, +bool send_status,bool retry_crc_err) {struct mmc_host *host = card->host;int err;
@@ -504,6 +504,7 @@ static int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms,return 0 ; } +EXPORT_SYMBOL_GPL (mmc_poll_for_busy);/** * __mmc_switch - modify EXT_CSD register
drivers/mmc/core/mmc_ops.h +2 -0
@@ -31,6 +31,8 @@ int mmc_can_ext_csd(struct mmc_card *card);int mmc_get_ext_csd (struct mmc_card *card,u8 **new_ext_csd);int mmc_switch_status (struct mmc_card *card);int __mmc_switch_status (struct mmc_card *card,bool crc_err_fatal); +int mmc_poll_for_busy (struct mmc_card *card,unsigned int timeout_ms, +bool send_status,bool retry_crc_err);int __mmc_switch (struct mmc_card *card,u8 set,u8 index,u8 value,unsigned int timeout_ms,unsigned char timing,bool use_busy_signal,bool send_status,bool retry_crc_err);
drivers/net/ethernet/qlogic/qed/qed_cxt.c +1 -0
@@ -1023,6 +1023,7 @@ static void qed_ilt_shadow_free(struct qed_hwfn *p_hwfn) p_dma->p_virt =NULL ; }kfree (p_mngr->ilt_shadow); + p_mngr->ilt_shadow =NULL ; } static int qed_ilt_blk_alloc(struct qed_hwfn *p_hwfn,
drivers/net/ethernet/qualcomm/qca_debug.c +9 -8
@@ -30,6 +30,8 @@#define QCASPI_MAX_REGS 0x20 +#define QCASPI_RX_MAX_FRAMES 4 +static const u16 qcaspi_spi_regs[] = {SPI_REG_BFR_SIZE ,SPI_REG_WRBUF_SPC_AVA ,
@@ -249,31 +251,30 @@ qcaspi_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring) {struct qcaspi *qca =netdev_priv (dev); - ring->rx_max_pending =4 ; + ring->rx_max_pending =QCASPI_RX_MAX_FRAMES ; ring->tx_max_pending =TX_RING_MAX_LEN ; - ring->rx_pending =4 ; + ring->rx_pending =QCASPI_RX_MAX_FRAMES ; ring->tx_pending = qca->txr.count; }static int qcaspi_set_ringparam (struct net_device *dev,struct ethtool_ringparam *ring) { -const struct net_device_ops *ops = dev->netdev_ops;struct qcaspi *qca =netdev_priv (dev); -if ((ring->rx_pending) || +if (ring->rx_pending !=QCASPI_RX_MAX_FRAMES || (ring->rx_mini_pending) || (ring->rx_jumbo_pending))return -EINVAL ; -if (netif_running (dev)) - ops->ndo_stop (dev); +if (qca->spi_thread) +kthread_park (qca->spi_thread); qca->txr.count =max_t (u32, ring->tx_pending,TX_RING_MIN_LEN ); qca->txr.count =min_t (u16, qca->txr.count,TX_RING_MAX_LEN ); -if (netif_running (dev)) - ops->ndo_open (dev); +if (qca->spi_thread) +kthread_unpark (qca->spi_thread);return 0 ; }
drivers/net/ethernet/qualcomm/qca_spi.c +19 -1
@@ -573,6 +573,18 @@ qcaspi_spi_thread(void *data)netdev_info (qca->net_dev,"SPI thread created\n" );while (!kthread_should_stop ()) {set_current_state (TASK_INTERRUPTIBLE ); +if (kthread_should_park ()) { +netif_tx_disable (qca->net_dev); +netif_carrier_off (qca->net_dev); +qcaspi_flush_tx_ring (qca); +kthread_parkme (); +if (qca->sync ==QCASPI_SYNC_READY ) { +netif_carrier_on (qca->net_dev); +netif_wake_queue (qca->net_dev); + } +continue ; + } +if ((qca->intr_req == qca->intr_svc) && !qca->txr.skb[qca->txr.head])schedule ();
@@ -601,11 +613,17 @@ qcaspi_spi_thread(void *data)if (intr_cause &SPI_INT_CPU_ON ) {qcaspi_qca7k_sync (qca,QCASPI_EVENT_CPUON ); +/* Frame decoding in progress */ +if (qca->frm_handle.state != qca->frm_handle.init) + qca->net_dev->stats.rx_dropped++; + +qcafrm_fsm_init_spi (&qca->frm_handle); + qca->stats.device_reset++; +/* not synced. */ if (qca->sync !=QCASPI_SYNC_READY )continue ; - qca->stats.device_reset++;netif_wake_queue (qca->net_dev);netif_carrier_on (qca->net_dev); }
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +3 -3
@@ -4691,9 +4691,9 @@ int stmmac_dvr_probe(struct device *device,/* MDIO bus Registration */ ret =stmmac_mdio_register (ndev);if (ret <0 ) { -dev_err (priv->device, -"%s: MDIO bus (id: %d) registration failed" , - __func__, priv->plat->bus_id); +dev_err_probe (priv->device, ret, +"%s: MDIO bus (id: %d) registration failed\n" , + __func__, priv->plat->bus_id); goto error_mdio_register; } }
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +6 -2
@@ -358,8 +358,12 @@ int stmmac_mdio_register(struct net_device *ndev) new_bus->parent = priv->device; err =of_mdiobus_register (new_bus, mdio_node); -if (err !=0 ) { -dev_err (dev,"Cannot register the MDIO bus\n" ); +if (err == -ENODEV ) { + err =0 ; +dev_info (dev,"MDIO bus is disabled\n" ); + goto bus_register_fail; + }else if (err) { +dev_err_probe (dev, err,"Cannot register the MDIO bus\n" ); goto bus_register_fail; }
drivers/net/team/team.c +3 -1
@@ -284,8 +284,10 @@ static int __team_options_register(struct team *team,return 0 ; inst_rollback: -for (i--; i >=0 ; i--) +for (i--; i >=0 ; i--) {__team_option_inst_del_option (team, dst_opts[i]); +list_del (&dst_opts[i]->list); + } i = option_count; alloc_rollback:
drivers/net/usb/aqc111.c +4 -4
@@ -1079,17 +1079,17 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)u16 pkt_count =0 ;u64 desc_hdr =0 ;u16 vlan_tag =0 ; -u32 skb_len =0 ; +u32 skb_len;if (!skb) goto err; -if (skb->len ==0 ) + skb_len = skb->len; +if (skb_len <sizeof (desc_hdr)) goto err; - skb_len = skb->len;/* RX Descriptor Header */ -skb_trim (skb, skb->len -sizeof (desc_hdr)); +skb_trim (skb, skb_len -sizeof (desc_hdr)); desc_hdr =le64_to_cpup ((u64 *)skb_tail_pointer (skb));/* Check these packets */
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1247,6 +1247,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x19d2, 0x0168, 4)}, {QMI_FIXED_INTF(0x19d2, 0x0176, 3)}, {QMI_FIXED_INTF(0x19d2, 0x0178, 3)}, + {QMI_FIXED_INTF(0x19d2, 0x0189, 4)}, /* ZTE MF290 */ {QMI_FIXED_INTF(0x19d2, 0x0191, 4)}, /* ZTE EuFi890 */ {QMI_FIXED_INTF(0x19d2, 0x0199, 1)}, /* ZTE MF820S */ {QMI_FIXED_INTF(0x19d2, 0x0200, 1)},
drivers/pci/hotplug/acpiphp_glue.c +3 -6
@@ -510,15 +510,12 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge)if (pass && dev->subordinate) {check_hotplug_bridge (slot, dev);pcibios_resource_survey_bus (dev->subordinate); -if (pci_is_root_bus (bus)) -__pci_bus_size_bridges (dev->subordinate, &add_list); +__pci_bus_size_bridges (dev->subordinate, + &add_list); } } } -if (pci_is_root_bus (bus)) -__pci_bus_assign_resources (bus, &add_list,NULL ); -else -pci_assign_unassigned_bridge_resources (bus->self); +__pci_bus_assign_resources (bus, &add_list,NULL ); }acpiphp_sanitize_bus (bus);
drivers/platform/x86/intel_telemetry_core.c +2 -2
@@ -102,7 +102,7 @@ static const struct telemetry_core_ops telm_defpltops = {/** * telemetry_update_events() - Update telemetry Configuration * @pss_evtconfig: PSS related config. No change if num_evts = 0. -* @pss_evtconfig: IOSS related config. No change if num_evts = 0. +* @ioss_evtconfig: IOSS related config. No change if num_evts = 0. * * This API updates the IOSS & PSS Telemetry configuration. Old config * is overwritten. Call telemetry_reset_events when logging is over
@@ -176,7 +176,7 @@ EXPORT_SYMBOL_GPL(telemetry_reset_events);/** * telemetry_get_eventconfig() - Returns the pss and ioss events enabled * @pss_evtconfig: Pointer to PSS related configuration. -* @pss_evtconfig: Pointer to IOSS related configuration. +* @ioss_evtconfig: Pointer to IOSS related configuration. * @pss_len: Number of u32 elements allocated for pss_evtconfig array * @ioss_len: Number of u32 elements allocated for ioss_evtconfig array *
drivers/soundwire/stream.c +4 -3
@@ -709,14 +709,15 @@ static int sdw_bank_switch(struct sdw_bus *bus, int m_rt_count)* sdw_ml_sync_bank_switch: Multilink register bank switch * * @bus: SDW bus instance +* @multi_link: whether this is a multi-link stream with hardware-based sync * * Caller function should free the buffers on error */ -static int sdw_ml_sync_bank_switch (struct sdw_bus *bus) +static int sdw_ml_sync_bank_switch (struct sdw_bus *bus,bool multi_link) {unsigned long time_left; -if (!bus->multi_link) +if (!multi_link)return 0 ;/* Wait for completion of transfer */
@@ -809,7 +810,7 @@ static int do_bank_switch(struct sdw_stream_runtime *stream) bus->bank_switch_timeout =DEFAULT_BANK_SWITCH_TIMEOUT ;/* Check if bank switch was successful */ - ret =sdw_ml_sync_bank_switch (bus); + ret =sdw_ml_sync_bank_switch (bus, multi_link);if (ret <0 ) {dev_err (bus->dev,"multi link bank switch failed: %d\n" , ret);
fs/afs/rxrpc.c +1 -1
@@ -490,7 +490,7 @@ void afs_make_call(struct afs_addr_cursor *ac, struct afs_call *call, gfp_t gfp)if (call->async) {if (cancel_work_sync (&call->async_work))afs_put_call (call); -afs_put_call (call); +afs_set_call_complete (call, ret,0 ); } ac->error = ret;
fs/ext4/mballoc.c +4 -0
@@ -3182,6 +3182,10 @@ ext4_mb_normalize_request(struct ext4_allocation_context *ac, start =max (start,rounddown (ac->ac_o_ex.fe_logical, (ext4_lblk_t )EXT4_BLOCKS_PER_GROUP (ac->ac_sb))); +/* avoid unnecessary preallocation that may trigger assertions */ +if (start + size >EXT_MAX_BLOCKS ) + size =EXT_MAX_BLOCKS - start; +/* don't cover already allocated blocks in selected range */ if (ar->pleft && start <= ar->lleft) { size -= ar->lleft +1 - start;
include/asm-generic/qspinlock.h +1 -1
@@ -38,7 +38,7 @@ static __always_inline int queued_spin_is_locked(struct qspinlock *lock)*/ static __always_inline int queued_spin_value_unlocked(struct qspinlock lock) { -return !atomic_read (&lock.val); +return !lock.val.counter; }/**
include/linux/cred.h +4 -4
@@ -109,7 +109,7 @@ static inline int groups_search(const struct group_info *group_info, kgid_t grp)* same context as task->real_cred. */ struct cred { -atomic_t usage; +atomic_long_t usage;#ifdef CONFIG_DEBUG_CREDENTIALS atomic_t subscribers;/* number of processes subscribed */ void *put_addr;
@@ -227,7 +227,7 @@ static inline bool cap_ambient_invariant_ok(const struct cred *cred)*/ static inline struct cred *get_new_cred (struct cred *cred) { -atomic_inc (&cred->usage); +atomic_long_inc (&cred->usage);return cred; }
@@ -259,7 +259,7 @@ static inline const struct cred *get_cred_rcu(const struct cred *cred)struct cred *nonconst_cred = (struct cred *) cred;if (!cred)return NULL ; -if (!atomic_inc_not_zero (&nonconst_cred->usage)) +if (!atomic_long_inc_not_zero (&nonconst_cred->usage))return NULL ;validate_creds (cred); nonconst_cred->non_rcu =0 ;
@@ -283,7 +283,7 @@ static inline void put_cred(const struct cred *_cred)if (cred) {validate_creds (cred); -if (atomic_dec_and_test (&(cred)->usage)) +if (atomic_long_dec_and_test (&(cred)->usage))__put_cred (cred); } }
include/net/addrconf.h +10 -2
@@ -31,17 +31,22 @@ struct prefix_info {__u8 length;__u8 prefix_len; +union __packed { +__u8 flags; +struct __packed {#if defined(__BIG_ENDIAN_BITFIELD) - __u8 onlink : 1, +__u8 onlink :1 , autoconf :1 , reserved :6 ;#elif defined(__LITTLE_ENDIAN_BITFIELD) - __u8 reserved : 6, +__u8 reserved :6 , autoconf :1 , onlink :1 ;#else #error "Please fix <asm/byteorder.h>"#endif + }; + };__be32 valid;__be32 prefered;__be32 reserved2;
@@ -49,6 +54,9 @@ struct prefix_info {struct in6_addr prefix; }; +/* rfc4861 4.6.2: IPv6 PIO is 32 bytes in size */ +static_assert (sizeof (struct prefix_info ) ==32 ); +#include <linux/ipv6.h> #include <linux/netdevice.h> #include <net/if_inet6.h>
include/net/if_inet6.h +0 -4
@@ -22,10 +22,6 @@#define IF_RS_SENT 0x10#define IF_READY 0x80000000 -/* prefix flags */ -#define IF_PREFIX_ONLINK 0x01 -#define IF_PREFIX_AUTOCONF 0x02 -enum {INET6_IFADDR_STATE_PREDAD ,INET6_IFADDR_STATE_DAD ,
kernel/cred.c +32 -32
167 lines not on this page · raw message
kernel/events/core.c +10 -0
@@ -1835,6 +1835,16 @@ static bool perf_event_validate_size(struct perf_event *event) group_leader->nr_siblings + 1) > 16*1024)return false; +/* +* When creating a new group leader, group_leader->ctx is initialized +* after the size has been validated, but we cannot safely use +* for_each_sibling_event() until group_leader->ctx is set. A new group +* leader cannot have any siblings yet, so we can safely skip checking +* the non-existent siblings. +*/ +if (event == group_leader) +return true; +for_each_sibling_event (sibling, group_leader) {if (__perf_event_read_size (sibling->attr.read_format, group_leader->nr_siblings +1 ) >16 *1024 )
kernel/trace/ring_buffer.c +2 -0
@@ -1414,6 +1414,8 @@ static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer)free_buffer_page (bpage); } +free_page ((unsigned long )cpu_buffer->free_page); +kfree (cpu_buffer); }
net/appletalk/ddp.c +4 -5
@@ -1803,15 +1803,14 @@ static int atalk_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)break ; }case TIOCINQ : { -/* -* These two are safe on a single CPU system as only -* user tasks fiddle here -*/ -struct sk_buff *skb =skb_peek (&sk->sk_receive_queue); +struct sk_buff *skb;long amount =0 ; +spin_lock_irq (&sk->sk_receive_queue.lock); + skb =skb_peek (&sk->sk_receive_queue);if (skb) amount = skb->len -sizeof (struct ddpehdr ); +spin_unlock_irq (&sk->sk_receive_queue.lock); rc =put_user (amount, (int __user *)argp);break ; }
net/atm/ioctl.c +5 -2
@@ -71,14 +71,17 @@ static int do_vcc_ioctl(struct socket *sock, unsigned int cmd,case SIOCINQ : {struct sk_buff *skb; +int amount;if (sock->state !=SS_CONNECTED ) { error = -EINVAL ; goto done; } +spin_lock_irq (&sk->sk_receive_queue.lock); skb =skb_peek (&sk->sk_receive_queue); - error =put_user (skb ? skb->len :0 , - (int __user *)argp) ? -EFAULT :0 ; + amount = skb ? skb->len :0 ; +spin_unlock_irq (&sk->sk_receive_queue.lock); + error =put_user (amount, (int __user *)argp) ? -EFAULT :0 ; goto done; }case ATM_SETSC :
net/ipv4/tcp_output.c +6 -0
@@ -2945,7 +2945,13 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs)if (skb_still_in_host_queue (sk, skb))return -EBUSY ; +start:if (before (TCP_SKB_CB (skb)->seq, tp->snd_una)) { +if (unlikely (TCP_SKB_CB (skb)->tcp_flags &TCPHDR_SYN )) { +TCP_SKB_CB (skb)->tcp_flags &= ~TCPHDR_SYN ; +TCP_SKB_CB (skb)->seq++; + goto start; + }if (unlikely (before (TCP_SKB_CB (skb)->end_seq, tp->snd_una))) {WARN_ON_ONCE (1 );return -EINVAL ;
net/ipv6/addrconf.c +1 -5
@@ -5977,11 +5977,7 @@ static int inet6_fill_prefix(struct sk_buff *skb, struct inet6_dev *idev, pmsg->prefix_len = pinfo->prefix_len; pmsg->prefix_type = pinfo->type; pmsg->prefix_pad3 =0 ; - pmsg->prefix_flags =0 ; -if (pinfo->onlink) - pmsg->prefix_flags |=IF_PREFIX_ONLINK ; -if (pinfo->autoconf) - pmsg->prefix_flags |=IF_PREFIX_AUTOCONF ; + pmsg->prefix_flags = pinfo->flags;if (nla_put (skb,PREFIX_ADDRESS ,sizeof (pinfo->prefix), &pinfo->prefix)) goto nla_put_failure;
net/rose/af_rose.c +3 -1
@@ -1285,9 +1285,11 @@ static int rose_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)case TIOCINQ : {struct sk_buff *skb;long amount =0L ; -/* These two are safe on a single CPU system as only user tasks fiddle here */ + +spin_lock_irq (&sk->sk_receive_queue.lock);if ((skb =skb_peek (&sk->sk_receive_queue)) !=NULL ) amount = skb->len; +spin_unlock_irq (&sk->sk_receive_queue.lock);return put_user (amount, (unsigned int __user *) argp); }
net/vmw_vsock/virtio_transport_common.c +1 -1
@@ -372,7 +372,7 @@ static s64 virtio_transport_has_space(struct vsock_sock *vsk)struct virtio_vsock_sock *vvs = vsk->trans;s64 bytes; - bytes = vvs->peer_buf_alloc - (vvs->tx_cnt - vvs->peer_fwd_cnt); + bytes = (s64 )vvs->peer_buf_alloc - (vvs->tx_cnt - vvs->peer_fwd_cnt);if (bytes <0 ) bytes =0 ;
scripts/sign-file.c +6 -6
@@ -322,7 +322,7 @@ int main(int argc, char **argv)CMS_NOSMIMECAP | use_keyid | use_signed_attrs), "CMS_add1_signer"); -ERR (CMS_final (cms, bm,NULL ,CMS_NOCERTS |CMS_BINARY ) <0 , +ERR (CMS_final (cms, bm,NULL ,CMS_NOCERTS |CMS_BINARY ) !=1 ,"CMS_final" );#else
@@ -341,10 +341,10 @@ int main(int argc, char **argv) b =BIO_new_file (sig_file_name,"wb" );ERR (!b,"%s" , sig_file_name);#ifndef USE_PKCS7 -ERR (i2d_CMS_bio_stream (b, cms,NULL ,0 ) <0 , +ERR (i2d_CMS_bio_stream (b, cms,NULL ,0 ) !=1 ,"%s" , sig_file_name);#else -ERR (i2d_PKCS7_bio (b, pkcs7) <0 , +ERR (i2d_PKCS7_bio (b, pkcs7) !=1 ,"%s" , sig_file_name);#endif BIO_free (b);
@@ -374,9 +374,9 @@ int main(int argc, char **argv)if (!raw_sig) {#ifndef USE_PKCS7 -ERR (i2d_CMS_bio_stream (bd, cms,NULL ,0 ) <0 ,"%s" , dest_name); +ERR (i2d_CMS_bio_stream (bd, cms,NULL ,0 ) !=1 ,"%s" , dest_name);#else -ERR (i2d_PKCS7_bio (bd, pkcs7) <0 ,"%s" , dest_name); +ERR (i2d_PKCS7_bio (bd, pkcs7) !=1 ,"%s" , dest_name);#endif }else {BIO *b;
@@ -396,7 +396,7 @@ int main(int argc, char **argv)ERR (BIO_write (bd, &sig_info,sizeof (sig_info)) <0 ,"%s" , dest_name);ERR (BIO_write (bd, magic_number,sizeof (magic_number) -1 ) <0 ,"%s" , dest_name); -ERR (BIO_free (bd) <0 ,"%s" , dest_name); +ERR (BIO_free (bd) !=1 ,"%s" , dest_name);/* Finally, if we're signing in place, replace the original. */ if (replace_orig)
sound/pci/hda/patch_hdmi.c +2 -0
@@ -1822,6 +1822,8 @@ static const struct snd_pci_quirk force_connect_list[] = {SND_PCI_QUIRK (0x103c ,0x871a ,"HP" ,1 ),SND_PCI_QUIRK (0x103c ,0x8711 ,"HP" ,1 ),SND_PCI_QUIRK (0x103c ,0x8715 ,"HP" ,1 ), +SND_PCI_QUIRK (0x1043 ,0x86ae ,"ASUS" ,1 ),/* Z170 PRO */ +SND_PCI_QUIRK (0x1043 ,0x86c7 ,"ASUS" ,1 ),/* Z170M PLUS */ SND_PCI_QUIRK(0x1462, 0xec94, "MS-7C94", 1), {} };