Linux 4.19.288
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.288 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/include/asm/sysreg.h | 6 arch/x86/kernel/apic/x2apic_phys.c | 5 arch/x86/purgatory/Makefile | 5 drivers/char/ipmi/ipmi_msghandler.c | 278 ++++++++++++++-------------- drivers/char/ipmi/ipmi_si_intf.c | 2 drivers/char/ipmi/ipmi_ssif.c | 2 drivers/gpu/drm/exynos/exynos_drm_g2d.c | 2 drivers/gpu/drm/exynos/exynos_drm_vidi.c | 2 drivers/gpu/drm/radeon/radeon_gem.c | 4 drivers/hid/wacom_sys.c | 7 drivers/hv/channel_mgmt.c | 18 + drivers/i2c/busses/i2c-imx-lpi2c.c | 4 drivers/media/cec/cec-adap.c | 3 drivers/mmc/host/mtk-sd.c | 2 drivers/mmc/host/mvsdio.c | 8 drivers/mmc/host/omap.c | 2 drivers/mmc/host/omap_hsmmc.c | 6 drivers/mmc/host/sdhci-acpi.c | 2 drivers/mmc/host/usdhi6rol0.c | 6 drivers/net/ethernet/emulex/benet/be_main.c | 4 drivers/net/ethernet/qualcomm/qca_spi.c | 3 drivers/net/ieee802154/mac802154_hwsim.c | 6 drivers/nfc/nfcsim.c | 4 drivers/pci/controller/pci-hyperv.c | 18 + drivers/s390/cio/device.c | 5 drivers/target/iscsi/iscsi_target_nego.c | 4 drivers/tty/serial/lantiq.c | 74 ++++--- drivers/usb/gadget/udc/amd5536udc_pci.c | 3 fs/nilfs2/page.c | 10 - fs/nilfs2/segbuf.c | 6 fs/nilfs2/segment.c | 7 fs/nilfs2/super.c | 23 ++ fs/nilfs2/the_nilfs.c | 44 ++++ include/linux/ipmi_smi.h | 17 - include/linux/rcupdate.h | 18 + kernel/cgroup/cgroup.c | 20 +- net/ipv4/esp4_offload.c | 3 net/ipv6/esp6_offload.c | 3 net/netfilter/nf_tables_api.c | 7 net/netfilter/nfnetlink_osf.c | 1 net/netfilter/xt_osf.c | 1 net/sched/sch_netem.c | 8 sound/soc/codecs/nau8824.c | 24 ++ 44 files changed, 452 insertions(+), 227 deletions(-)
Bernhard Seibold (1):
serial: lantiq: add missing interrupt ack
Chen Aotian (1):
ieee802154: hwsim: Fix possible memory leaks
Clark Wang (1):
i2c: imx-lpi2c: fix type char overflow issue when calculating the clock cycle
Corey Minyard (1):
ipmi: Make the smi watcher be disabled immediately when not needed
Dan Carpenter (1):
usb: gadget: udc: fix NULL dereference in remove()
Denis Arefev (1):
HID: wacom: Add error check to wacom_parse_and_register()
Dexuan Cui (1):
PCI: hv: Fix a race condition bug in hv_pci_query_relations()
Dheeraj Kumar Srivastava (1):
x86/apic: Fix kernel panic when booting with intremap=off and x2apic_phys
Edson Juliano Drosdeck (1):
ASoC: nau8824: Add quirk to active-high jack-detect
Eric Dumazet (1):
sch_netem: acquire qdisc lock in netem_change()
Greg Kroah-Hartman (1):
Linux 4.19.288
Hans Verkuil (1):
media: cec: core: don't set last_initiator if tx in progress
Hauke Mehrtens (1):
serial: lantiq: Do not swap register read/writes
Inki Dae (1):
drm/exynos: vidi: fix a wrong error return
Marc Zyngier (1):
arm64: Add missing Set/Way CMO encodings
Maurizio Lombardi (1):
scsi: target: iscsi: Prevent login threads from racing between each other
Michael Kelley (1):
Drivers: hv: vmbus: Fix vmbus_wait_for_unload() to scan present CPUs
Min Li (2):
drm/exynos: fix race condition UAF in exynos_g2d_exec_ioctl drm/radeon: fix race condition UAF in radeon_gem_set_domain_ioctl
Osama Muhammad (1):
nfcsim.c: Fix error checking for debugfs_create_dir
Pablo Neira Ayuso (2):
netfilter: nf_tables: disallow element updates of bound anonymous sets
netfilter: nfnetlink_osf: fix module autoload
Paul E. McKenney (1):
rcu: Upgrade rcu_swap_protected() to rcu_replace_pointer()
Ricardo Ribalda (1):
x86/purgatory: remove PGO flags
Ross Lagerwall (1):
be2net: Extend xmit workaround to BE3 chip
Ryusuke Konishi (3):
nilfs2: reject devices with insufficient block count
nilfs2: fix buffer corruption due to concurrent device reads
nilfs2: prevent general protection fault in nilfs_clear_dirty_page()
Sebastian Andrzej Siewior (1):
xfrm: Linearize the skb after offloading if needed.
Sergey Shtylyov (6):
mmc: mtk-sd: fix deferred probing
mmc: mvsdio: fix deferred probing
mmc: omap: fix deferred probing
mmc: omap_hsmmc: fix deferred probing
mmc: sdhci-acpi: fix deferred probing
mmc: usdhi60rol0: fix deferred probing
Songjun Wu (2):
serial: lantiq: Change ltq_w32_mask to asc_update_bits
serial: lantiq: Use readl/writel instead of ltq_r32/ltq_w32
Stefan Wahren (1):
net: qca_spi: Avoid high load if QCA7000 is not available
Tony Camuso (1):
ipmi: move message error checking to avoid deadlock
Vineeth Vijayan (1):
s390/cio: unregister device when the only path is gone
Xiu Jianfeng (1):
cgroup: Do not corrupt task iteration when rebinding subsystem
Yangtao Li (1):
mmc: mvsdio: convert to devm_platform_ioremap_resource
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 287 +SUBLEVEL = 288 EXTRAVERSION = NAME = "People's Front"
arch/arm64/include/asm/sysreg.h +6 -0
@@ -98,8 +98,14 @@ (!!x)<<8 | 0x1f)#define SYS_DC_ISW sys_insn(1, 0, 7, 6, 2) +#define SYS_DC_IGSW sys_insn(1, 0, 7, 6, 4) +#define SYS_DC_IGDSW sys_insn(1, 0, 7, 6, 6)#define SYS_DC_CSW sys_insn(1, 0, 7, 10, 2) +#define SYS_DC_CGSW sys_insn(1, 0, 7, 10, 4) +#define SYS_DC_CGDSW sys_insn(1, 0, 7, 10, 6)#define SYS_DC_CISW sys_insn(1, 0, 7, 14, 2) +#define SYS_DC_CIGSW sys_insn(1, 0, 7, 14, 4) +#define SYS_DC_CIGDSW sys_insn(1, 0, 7, 14, 6)#define SYS_OSDTRRX_EL1 sys_reg(2, 0, 0, 0, 2)#define SYS_MDCCINT_EL1 sys_reg(2, 0, 0, 2, 0)
arch/x86/kernel/apic/x2apic_phys.c +4 -1
@@ -102,7 +102,10 @@ static void init_x2apic_ldr(void)static int x2apic_phys_probe (void ) { -if (x2apic_mode && (x2apic_phys ||x2apic_fadt_phys ())) +if (!x2apic_mode) +return 0 ; + +if (x2apic_phys ||x2apic_fadt_phys ())return 1 ;return apic == &apic_x2apic_phys;
arch/x86/purgatory/Makefile +5 -0
@@ -12,6 +12,11 @@ $(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE $(obj)/sha256.o: $(srctree)/lib/sha256.c FORCE $(call if_changed_rule,cc_o_c) +# When profile-guided optimization is enabled, llvm emits two different +# overlapping text sections, which is not supported by kexec. Remove profile +# optimization flags. +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) + LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined -nostdlib -z nodefaultlib targets += purgatory.ro
drivers/char/ipmi/ipmi_msghandler.c +147 -131
464 lines not on this page · raw message
drivers/char/ipmi/ipmi_si_intf.c +1 -1
@@ -1079,7 +1079,7 @@ static void set_need_watch(void *send_info, unsigned int watch_mask)unsigned long flags;int enable; - enable = !!(watch_mask & ~IPMI_WATCH_MASK_INTERNAL ); + enable = !!watch_mask;atomic_set (&smi_info->need_watch, enable);spin_lock_irqsave (&smi_info->si_lock, flags);
drivers/char/ipmi/ipmi_ssif.c +1 -1
@@ -1159,7 +1159,7 @@ static void ssif_set_need_watch(void *send_info, unsigned int watch_mask)if (watch_mask &IPMI_WATCH_MASK_CHECK_MESSAGES ) timeout =SSIF_WATCH_MSG_TIMEOUT ; -else if (watch_mask & ~IPMI_WATCH_MASK_INTERNAL ) +else if (watch_mask) timeout =SSIF_WATCH_WATCHDOG_TIMEOUT ; flags =ipmi_ssif_lock_cond (ssif_info, &oflags);
drivers/gpu/drm/exynos/exynos_drm_g2d.c +1 -1
@@ -1327,7 +1327,7 @@ int exynos_g2d_exec_ioctl(struct drm_device *drm_dev, void *data,/* Let the runqueue know that there is work to do. */ queue_work (g2d->g2d_workq, &g2d->runqueue_work); -if (runqueue_node->async) +if (req->async) goto out;wait_for_completion (&runqueue_node->complete);
drivers/gpu/drm/exynos/exynos_drm_vidi.c +0 -2
@@ -480,8 +480,6 @@ static int vidi_remove(struct platform_device *pdev)if (ctx->raw_edid != (struct edid *)fake_edid_info) {kfree (ctx->raw_edid); ctx->raw_edid =NULL ; - -return -EINVAL ; }component_del (&pdev->dev, &vidi_component_ops);
drivers/gpu/drm/radeon/radeon_gem.c +1 -3
@@ -377,7 +377,6 @@ int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data,struct radeon_device *rdev = dev->dev_private;struct drm_radeon_gem_set_domain *args = data;struct drm_gem_object *gobj; -struct radeon_bo *robj;int r;/* for now if someone requests domain CPU -
@@ -390,13 +389,12 @@ int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data,up_read (&rdev->exclusive_lock);return -ENOENT ; } - robj =gem_to_radeon_bo (gobj); r =radeon_gem_set_domain (gobj, args->read_domains, args->write_domain);drm_gem_object_put_unlocked (gobj);up_read (&rdev->exclusive_lock); - r =radeon_gem_handle_lockup (robj->rdev, r); + r =radeon_gem_handle_lockup (rdev, r);return r; }
drivers/hid/wacom_sys.c +6 -1
@@ -2390,8 +2390,13 @@ static int wacom_parse_and_register(struct wacom *wacom, bool wireless) goto fail_quirks; } -if (features->device_type &WACOM_DEVICETYPE_WL_MONITOR ) +if (features->device_type &WACOM_DEVICETYPE_WL_MONITOR ) { error =hid_hw_open (hdev); +if (error) { +hid_err (hdev,"hw open failed\n" ); + goto fail_quirks; + } + }wacom_set_shared_values (wacom_wac);devres_close_group (&hdev->dev, wacom);
drivers/hv/channel_mgmt.c +16 -2
@@ -813,11 +813,22 @@ static void vmbus_wait_for_unload(void)if (completion_done (&vmbus_connection.unload_event)) goto completed; -for_each_online_cpu (cpu) { +for_each_present_cpu (cpu) {struct hv_per_cpu_context *hv_cpu =per_cpu_ptr (hv_context.cpu_context, cpu); +/* +* In a CoCo VM the synic_message_page is not allocated +* in hv_synic_alloc(). Instead it is set/cleared in +* hv_synic_enable_regs() and hv_synic_disable_regs() +* such that it is set only when the CPU is online. If +* not all present CPUs are online, the message page +* might be NULL, so skip such CPUs. +*/ page_addr = hv_cpu->synic_message_page; +if (!page_addr) +continue ; + msg = (struct hv_message *)page_addr +VMBUS_MESSAGE_SINT ;
@@ -851,11 +862,14 @@ static void vmbus_wait_for_unload(void)* maybe-pending messages on all CPUs to be able to receive new * messages after we reconnect. */ -for_each_online_cpu (cpu) { +for_each_present_cpu (cpu) {struct hv_per_cpu_context *hv_cpu =per_cpu_ptr (hv_context.cpu_context, cpu); page_addr = hv_cpu->synic_message_page; +if (!page_addr) +continue ; + msg = (struct hv_message *)page_addr +VMBUS_MESSAGE_SINT ; msg->header.message_type =HVMSG_NONE ; }
drivers/i2c/busses/i2c-imx-lpi2c.c +2 -2
@@ -206,8 +206,8 @@ static void lpi2c_imx_stop(struct lpi2c_imx_struct *lpi2c_imx)/* CLKLO = I2C_CLK_RATIO * CLKHI, SETHOLD = CLKHI, DATAVD = CLKHI/2 */ static int lpi2c_imx_config (struct lpi2c_imx_struct *lpi2c_imx) { -u8 prescale, filt, sethold, clkhi, clklo, datavd; -unsigned int clk_rate, clk_cycle; +u8 prescale, filt, sethold, datavd; +unsigned int clk_rate, clk_cycle, clkhi, clklo;enum lpi2c_imx_pincfg pincfg;unsigned int temp;
drivers/media/cec/cec-adap.c +2 -1
@@ -1032,7 +1032,8 @@ void cec_received_msg_ts(struct cec_adapter *adap,mutex_lock (&adap->lock);dprintk (2 ,"%s: %*ph\n" , __func__, msg->len, msg->msg); - adap->last_initiator =0xff ; +if (!adap->transmit_in_progress) + adap->last_initiator =0xff ;/* Check if this message was for us (directed or broadcast). */ if (!cec_msg_is_broadcast (msg))
drivers/mmc/host/mtk-sd.c +1 -1
@@ -1912,7 +1912,7 @@ static int msdc_drv_probe(struct platform_device *pdev) host->irq =platform_get_irq (pdev,0 );if (host->irq <0 ) { - ret = -EINVAL ; + ret = host->irq; goto host_free; }
drivers/mmc/host/mvsdio.c +3 -5
@@ -699,17 +699,15 @@ static int mvsd_probe(struct platform_device *pdev)struct mmc_host *mmc =NULL ;struct mvsd_host *host =NULL ;const struct mbus_dram_target_info *dram; -struct resource *r;int ret, irq;if (!np) {dev_err (&pdev->dev,"no DT node\n" );return -ENODEV ; } - r =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); irq =platform_get_irq (pdev,0 ); -if (!r || irq <0 ) -return -ENXIO ; +if (irq <0 ) +return irq; mmc =mmc_alloc_host (sizeof (struct mvsd_host ), &pdev->dev);if (!mmc) {
@@ -761,7 +759,7 @@ static int mvsd_probe(struct platform_device *pdev)spin_lock_init (&host->lock); - host->base =devm_ioremap_resource (&pdev->dev, r); + host->base =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (host->base)) { ret =PTR_ERR (host->base); goto out;
drivers/mmc/host/omap.c +1 -1
@@ -1347,7 +1347,7 @@ static int mmc_omap_probe(struct platform_device *pdev) irq =platform_get_irq (pdev,0 );if (irq <0 ) -return -ENXIO ; +return irq; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); host->virt_base =devm_ioremap_resource (&pdev->dev, res);
drivers/mmc/host/omap_hsmmc.c +4 -2
@@ -2006,9 +2006,11 @@ static int omap_hsmmc_probe(struct platform_device *pdev) } res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - irq =platform_get_irq (pdev,0 ); -if (res ==NULL || irq <0 ) +if (!res)return -ENXIO ; + irq =platform_get_irq (pdev,0 ); +if (irq <0 ) +return irq; base =devm_ioremap_resource (&pdev->dev, res);if (IS_ERR (base))
drivers/mmc/host/sdhci-acpi.c +1 -1
@@ -721,7 +721,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev) host->ops = &sdhci_acpi_ops_dflt; host->irq =platform_get_irq (pdev,0 );if (host->irq <0 ) { - err = -EINVAL ; + err = host->irq; goto err_free; }
drivers/mmc/host/usdhi6rol0.c +4 -2
@@ -1749,8 +1749,10 @@ static int usdhi6_probe(struct platform_device *pdev) irq_cd =platform_get_irq_byname (pdev,"card detect" ); irq_sd =platform_get_irq_byname (pdev,"data" ); irq_sdio =platform_get_irq_byname (pdev,"SDIO" ); -if (irq_sd <0 || irq_sdio <0 ) -return -ENODEV ; +if (irq_sd <0 ) +return irq_sd; +if (irq_sdio <0 ) +return irq_sdio; mmc =mmc_alloc_host (sizeof (struct usdhi6_host ), dev);if (!mmc)
drivers/net/ethernet/emulex/benet/be_main.c +2 -2
@@ -1136,8 +1136,8 @@ static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter, eth_hdr_len =ntohs (skb->protocol) ==ETH_P_8021Q ?VLAN_ETH_HLEN :ETH_HLEN ;if (skb->len <=60 && - (lancer_chip (adapter) ||skb_vlan_tag_present (skb)) && -is_ipv4_pkt (skb)) { + (lancer_chip (adapter) ||BE3_chip (adapter) || +skb_vlan_tag_present (skb)) &&is_ipv4_pkt (skb)) { ip = (struct iphdr *)ip_hdr (skb);pskb_trim (skb, eth_hdr_len +ntohs (ip->tot_len)); }
drivers/net/ethernet/qualcomm/qca_spi.c +1 -2
@@ -553,8 +553,7 @@ qcaspi_spi_thread(void *data)while (!kthread_should_stop ()) {set_current_state (TASK_INTERRUPTIBLE );if ((qca->intr_req == qca->intr_svc) && - (qca->txr.skb[qca->txr.head] ==NULL ) && - (qca->sync ==QCASPI_SYNC_READY )) + !qca->txr.skb[qca->txr.head])schedule ();set_current_state (TASK_RUNNING );
drivers/net/ieee802154/mac802154_hwsim.c +4 -2
@@ -540,7 +540,7 @@ static int hwsim_del_edge_nl(struct sk_buff *msg, struct genl_info *info)static int hwsim_set_edge_lqi (struct sk_buff *msg,struct genl_info *info) {struct nlattr *edge_attrs[MAC802154_HWSIM_EDGE_ATTR_MAX +1 ]; -struct hwsim_edge_info *einfo; +struct hwsim_edge_info *einfo, *einfo_old;struct hwsim_phy *phy_v0;struct hwsim_edge *e;u32 v0, v1;
@@ -580,8 +580,10 @@ static int hwsim_set_edge_lqi(struct sk_buff *msg, struct genl_info *info)list_for_each_entry_rcu (e, &phy_v0->edges, list) {if (e->endpoint->idx == v1) { einfo->lqi = lqi; -rcu_assign_pointer (e->info, einfo); + einfo_old =rcu_replace_pointer (e->info, einfo, +lockdep_is_held (&hwsim_phys_lock));rcu_read_unlock (); +kfree_rcu (einfo_old, rcu);mutex_unlock (&hwsim_phys_lock);return 0 ; }
drivers/nfc/nfcsim.c +0 -4
@@ -345,10 +345,6 @@ static struct dentry *nfcsim_debugfs_root;static void nfcsim_debugfs_init (void ) { nfcsim_debugfs_root =debugfs_create_dir ("nfcsim" ,NULL ); - -if (!nfcsim_debugfs_root) -pr_err ("Could not create debugfs entry\n" ); - }static void nfcsim_debugfs_remove (void )
drivers/pci/controller/pci-hyperv.c +18 -0
@@ -2445,6 +2445,24 @@ static int hv_pci_query_relations(struct hv_device *hdev)if (!ret) ret =wait_for_response (hdev, &comp); +/* +* In the case of fast device addition/removal, it's possible that +* vmbus_sendpacket() or wait_for_response() returns -ENODEV but we +* already got a PCI_BUS_RELATIONS* message from the host and the +* channel callback already scheduled a work to hbus->wq, which can be +* running pci_devices_present_work() -> survey_child_resources() -> +* complete(&hbus->survey_event), even after hv_pci_query_relations() +* exits and the stack variable 'comp' is no longer valid; as a result, +* a hang or a page fault may happen when the complete() calls +* raw_spin_lock_irqsave(). Flush hbus->wq before we exit from +* hv_pci_query_relations() to avoid the issues. Note: if 'ret' is +* -ENODEV, there can't be any more work item scheduled to hbus->wq +* after the flush_workqueue(): see vmbus_onoffer_rescind() -> +* vmbus_reset_channel_cb(), vmbus_rescind_cleanup() -> +* channel->rescind = true. +*/ +flush_workqueue (hbus->wq); +return ret; }
drivers/s390/cio/device.c +4 -1
@@ -1353,6 +1353,7 @@ void ccw_device_set_notoper(struct ccw_device *cdev)enum io_sch_action {IO_SCH_UNREG ,IO_SCH_ORPH_UNREG , +IO_SCH_UNREG_CDEV ,IO_SCH_ATTACH ,IO_SCH_UNREG_ATTACH ,IO_SCH_ORPH_ATTACH ,
@@ -1385,7 +1386,7 @@ static enum io_sch_action sch_get_action(struct subchannel *sch) }if ((sch->schib.pmcw.pam & sch->opm) ==0 ) {if (ccw_device_notify (cdev,CIO_NO_PATH ) !=NOTIFY_OK ) -return IO_SCH_UNREG ; +return IO_SCH_UNREG_CDEV ;return IO_SCH_DISC ; }if (device_is_disconnected (cdev))
@@ -1447,6 +1448,7 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process)case IO_SCH_ORPH_ATTACH :ccw_device_set_disconnected (cdev);break ; +case IO_SCH_UNREG_CDEV :case IO_SCH_UNREG_ATTACH :case IO_SCH_UNREG :if (!cdev)
@@ -1480,6 +1482,7 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process)if (rc) goto out;break ; +case IO_SCH_UNREG_CDEV :case IO_SCH_UNREG_ATTACH :spin_lock_irqsave (sch->lock, flags);if (cdev->private->flags.resuming) {
drivers/target/iscsi/iscsi_target_nego.c +3 -1
@@ -1072,6 +1072,7 @@ int iscsi_target_locate_portal(iscsi_target_set_sock_callbacks (conn); login->np = np; + conn->tpg =NULL ; login_req = (struct iscsi_login_req *) login->req; payload_length =ntoh24 (login_req->dlength);
@@ -1141,7 +1142,6 @@ int iscsi_target_locate_portal(*/ sessiontype =strncmp (s_buf,DISCOVERY ,9 );if (!sessiontype) { - conn->tpg = iscsit_global->discovery_tpg;if (!login->leading_connection) goto get_target;
@@ -1158,9 +1158,11 @@ int iscsi_target_locate_portal(* Serialize access across the discovery struct iscsi_portal_group to * process login attempt. */ + conn->tpg = iscsit_global->discovery_tpg;if (iscsit_access_np (np, conn->tpg) <0 ) {iscsit_tx_login_rsp (conn,ISCSI_STATUS_CLS_TARGET_ERR ,ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE ); + conn->tpg =NULL ; ret =-1 ; goto out; }
drivers/tty/serial/lantiq.c +42 -32
206 lines not on this page · raw message
drivers/usb/gadget/udc/amd5536udc_pci.c +3 -0
@@ -171,6 +171,9 @@ static int udc_pci_probe( retval = -ENODEV ; goto err_probe; } + + udc = dev; +return 0 ; err_probe:
fs/nilfs2/page.c +9 -1
@@ -372,7 +372,15 @@ void nilfs_clear_dirty_pages(struct address_space *mapping, bool silent)struct page *page = pvec.pages[i];lock_page (page); -nilfs_clear_dirty_page (page, silent); + +/* +* This page may have been removed from the address +* space by truncation or invalidation when the lock +* was acquired. Skip processing in that case. +*/ +if (likely (page->mapping == mapping)) +nilfs_clear_dirty_page (page, silent); +unlock_page (page); }pagevec_release (&pvec);
fs/nilfs2/segbuf.c +6 -0
@@ -101,6 +101,12 @@ int nilfs_segbuf_extend_segsum(struct nilfs_segment_buffer *segbuf)if (unlikely (!bh))return -ENOMEM ; +lock_buffer (bh); +if (!buffer_uptodate (bh)) { +memset (bh->b_data,0 , bh->b_size); +set_buffer_uptodate (bh); + } +unlock_buffer (bh);nilfs_segbuf_add_segsum_buffer (segbuf, bh);return 0 ; }
fs/nilfs2/segment.c +7 -0
@@ -984,10 +984,13 @@ static void nilfs_segctor_fill_in_super_root(struct nilfs_sc_info *sci,unsigned int isz, srsz; bh_sr =NILFS_LAST_SEGBUF (&sci->sc_segbufs)->sb_super_root; + +lock_buffer (bh_sr); raw_sr = (struct nilfs_super_root *)bh_sr->b_data; isz = nilfs->ns_inode_size; srsz =NILFS_SR_BYTES (isz); + raw_sr->sr_sum =0 ;/* Ensure initialization within this update */ raw_sr->sr_bytes =cpu_to_le16 (srsz); raw_sr->sr_nongc_ctime = cpu_to_le64(nilfs_doing_gc() ?
@@ -1001,6 +1004,8 @@ static void nilfs_segctor_fill_in_super_root(struct nilfs_sc_info *sci,nilfs_write_inode_common (nilfs->ns_sufile, (void *)raw_sr +NILFS_SR_SUFILE_OFFSET (isz),1 );memset ((void *)raw_sr + srsz,0 , nilfs->ns_blocksize - srsz); +set_buffer_uptodate (bh_sr); +unlock_buffer (bh_sr); }static void nilfs_redirty_inodes (struct list_head *head)
@@ -1778,6 +1783,7 @@ static void nilfs_abort_logs(struct list_head *logs, int err)list_for_each_entry (segbuf, logs, sb_list) {list_for_each_entry (bh, &segbuf->sb_segsum_buffers, b_assoc_buffers) { +clear_buffer_uptodate (bh);if (bh->b_page != bd_page) {if (bd_page)end_page_writeback (bd_page);
@@ -1789,6 +1795,7 @@ static void nilfs_abort_logs(struct list_head *logs, int err) b_assoc_buffers) {clear_buffer_async_write (bh);if (bh == segbuf->sb_super_root) { +clear_buffer_uptodate (bh);if (bh->b_page != bd_page) {end_page_writeback (bd_page); bd_page = bh->b_page;
fs/nilfs2/super.c +22 -1
@@ -374,10 +374,31 @@ static int nilfs_move_2nd_super(struct super_block *sb, loff_t sb2off) goto out; } nsbp = (void *)nsbh->b_data + offset; -memset (nsbp,0 , nilfs->ns_blocksize); +lock_buffer (nsbh);if (sb2i >=0 ) { +/* +* The position of the second superblock only changes by 4KiB, +* which is larger than the maximum superblock data size +* (= 1KiB), so there is no need to use memmove() to allow +* overlap between source and destination. +*/ memcpy (nsbp, nilfs->ns_sbp[sb2i], nilfs->ns_sbsize); + +/* +* Zero fill after copy to avoid overwriting in case of move +* within the same block. +*/ +memset (nsbh->b_data,0 , offset); +memset ((void *)nsbp + nilfs->ns_sbsize,0 , + nsbh->b_size - offset - nilfs->ns_sbsize); + }else { +memset (nsbh->b_data,0 , nsbh->b_size); + } +set_buffer_uptodate (nsbh); +unlock_buffer (nsbh); + +if (sb2i >=0 ) {brelse (nilfs->ns_sbh[sb2i]); nilfs->ns_sbh[sb2i] = nsbh; nilfs->ns_sbp[sb2i] = nsbp;
fs/nilfs2/the_nilfs.c +43 -1
62 lines not on this page · raw message
include/linux/ipmi_smi.h +4 -13
@@ -32,14 +32,11 @@ typedef struct ipmi_smi *ipmi_smi_t;/* * Flags for set_check_watch() below. Tells if the SMI should be -* waiting for watchdog timeouts, commands and/or messages. There is -* also an internal flag for the message handler, SMIs should ignore -* it. +* waiting for watchdog timeouts, commands and/or messages. */ -#define IPMI_WATCH_MASK_INTERNAL (1 << 0) -#define IPMI_WATCH_MASK_CHECK_MESSAGES (1 << 1) -#define IPMI_WATCH_MASK_CHECK_WATCHDOG (1 << 2) -#define IPMI_WATCH_MASK_CHECK_COMMANDS (1 << 3) +#define IPMI_WATCH_MASK_CHECK_MESSAGES (1 << 0) +#define IPMI_WATCH_MASK_CHECK_WATCHDOG (1 << 1) +#define IPMI_WATCH_MASK_CHECK_COMMANDS (1 << 2)/* * Messages to/from the lower layer. The smi interface will take one
@@ -66,12 +63,6 @@ struct ipmi_smi_msg {int rsp_size;unsigned char rsp[IPMI_MAX_MSG_LENGTH ]; -/* -* There should be a response message coming back in the BMC -* message queue. -*/ -bool needs_response; -/* * Will be called when the system is done with the message * (presumably to free it).
include/linux/rcupdate.h +18 -0
@@ -410,6 +410,24 @@ static inline void rcu_preempt_sleep_check(void) { } _r_a_p__v; \ }) +/** +* rcu_replace_pointer() - replace an RCU pointer, returning its old value +* @rcu_ptr: RCU pointer, whose old value is returned +* @ptr: regular pointer +* @c: the lockdep conditions under which the dereference will take place +* +* Perform a replacement, where @rcu_ptr is an RCU-annotated +* pointer and @c is the lockdep argument that is passed to the +* rcu_dereference_protected() call used to read that pointer. The old +* value of @rcu_ptr is returned, and @rcu_ptr is set to @ptr. +*/ +#define rcu_replace_pointer (rcu_ptr, ptr, c) \ +({ \ + typeof(ptr) __tmp = rcu_dereference_protected((rcu_ptr), (c)); \ + rcu_assign_pointer((rcu_ptr), (ptr)); \ + __tmp; \ +}) +/** * rcu_swap_protected() - swap an RCU and a regular pointer * @rcu_ptr: RCU pointer
kernel/cgroup/cgroup.c +17 -3
@@ -1652,7 +1652,7 @@ int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask) {struct cgroup *dcgrp = &dst_root->cgrp;struct cgroup_subsys *ss; -int ssid, i, ret; +int ssid, ret;u16 dfl_disable_ss_mask =0 ;lockdep_assert_held (&cgroup_mutex);
@@ -1696,7 +1696,8 @@ int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask)struct cgroup_root *src_root = ss->root;struct cgroup *scgrp = &src_root->cgrp;struct cgroup_subsys_state *css =cgroup_css (scgrp, ss); -struct css_set *cset; +struct css_set *cset, *cset_pos; +struct css_task_iter *it;WARN_ON (!css ||cgroup_css (dcgrp, ss));
@@ -1714,9 +1715,22 @@ int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask) css->cgroup = dcgrp;spin_lock_irq (&css_set_lock); -hash_for_each (css_set_table, i, cset, hlist) +WARN_ON (!list_empty (&dcgrp->e_csets[ss->id])); +list_for_each_entry_safe (cset, cset_pos, &scgrp->e_csets[ss->id], + e_cset_node[ss->id]) {list_move_tail (&cset->e_cset_node[ss->id], &dcgrp->e_csets[ss->id]); +/* +* all css_sets of scgrp together in same order to dcgrp, +* patch in-flight iterators to preserve correct iteration. +* since the iterator is always advanced right away and +* finished when it->cset_pos meets it->cset_head, so only +* update it->cset_head is enough here. +*/ +list_for_each_entry (it, &cset->task_iters, iters_node) +if (it->cset_head == &scgrp->e_csets[ss->id]) + it->cset_head = &dcgrp->e_csets[ss->id]; + }spin_unlock_irq (&css_set_lock);/* default hierarchy doesn't enable controllers by default */
net/ipv4/esp4_offload.c +3 -0
@@ -237,6 +237,9 @@ static int esp_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_features_secpath_reset (skb); +if (skb_needs_linearize (skb, skb->dev->features) && +__skb_linearize (skb)) +return -ENOMEM ;return 0 ; }
net/ipv6/esp6_offload.c +3 -0
@@ -272,6 +272,9 @@ static int esp6_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_featuressecpath_reset (skb); +if (skb_needs_linearize (skb, skb->dev->features) && +__skb_linearize (skb)) +return -ENOMEM ;return 0 ; }
net/netfilter/nf_tables_api.c +5 -2
@@ -4640,7 +4640,8 @@ static int nf_tables_newsetelem(struct net *net, struct sock *nlsk,if (IS_ERR (set))return PTR_ERR (set); -if (!list_empty (&set->bindings) && set->flags &NFT_SET_CONSTANT ) +if (!list_empty (&set->bindings) && + (set->flags & (NFT_SET_CONSTANT |NFT_SET_ANONYMOUS )))return -EBUSY ;nla_for_each_nested (attr, nla[NFTA_SET_ELEM_LIST_ELEMENTS ], rem) {
@@ -4823,7 +4824,9 @@ static int nf_tables_delsetelem(struct net *net, struct sock *nlsk, set =nft_set_lookup (ctx.table, nla[NFTA_SET_ELEM_LIST_SET ], genmask);if (IS_ERR (set))return PTR_ERR (set); -if (!list_empty (&set->bindings) && set->flags &NFT_SET_CONSTANT ) + +if (!list_empty (&set->bindings) && + (set->flags & (NFT_SET_CONSTANT |NFT_SET_ANONYMOUS )))return -EBUSY ;if (nla[NFTA_SET_ELEM_LIST_ELEMENTS ] ==NULL ) {
net/netfilter/nfnetlink_osf.c +1 -0
@@ -442,3 +442,4 @@ module_init(nfnl_osf_init);module_exit (nfnl_osf_fini);MODULE_LICENSE ("GPL" ); +MODULE_ALIAS_NFNL_SUBSYS (NFNL_SUBSYS_OSF );
net/netfilter/xt_osf.c +0 -1
@@ -90,4 +90,3 @@ MODULE_AUTHOR("Evgeniy Polyakov <[email protected]>");MODULE_DESCRIPTION ("Passive OS fingerprint matching." );MODULE_ALIAS ("ipt_osf" );MODULE_ALIAS ("ip6t_osf" ); -MODULE_ALIAS_NFNL_SUBSYS (NFNL_SUBSYS_OSF );
net/sched/sch_netem.c +6 -2
@@ -943,6 +943,7 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt,if (ret <0 )return ret; +sch_tree_lock (sch);/* backup q->clg and q->loss_model */ old_clg = q->clg; old_loss_model = q->loss_model;
@@ -951,7 +952,7 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt, ret =get_loss_clg (q, tb[TCA_NETEM_LOSS ]);if (ret) { q->loss_model = old_loss_model; -return ret; + goto unlock; } }else { q->loss_model =CLG_RANDOM ;
@@ -1018,6 +1019,8 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt,/* capping jitter to the range acceptable by tabledist() */ q->jitter =min_t (s64,abs (q->jitter),INT_MAX ); +unlock: +sch_tree_unlock (sch);return ret; get_table_failure:
@@ -1027,7 +1030,8 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt,*/ q->clg = old_clg; q->loss_model = old_loss_model; -return ret; + + goto unlock; } static int netem_init(struct Qdisc *sch, struct nlattr *opt,
sound/soc/codecs/nau8824.c +24 -0
@@ -1899,6 +1899,30 @@ static const struct dmi_system_id nau8824_quirk_table[] = { }, .driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH), }, + { + /* Positivo CW14Q01P */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"), + DMI_MATCH(DMI_BOARD_NAME, "CW14Q01P"), + }, + .driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH), + }, + { + /* Positivo K1424G */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"), + DMI_MATCH(DMI_BOARD_NAME, "K1424G"), + }, + .driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH), + }, + { + /* Positivo N14ZP74G */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"), + DMI_MATCH(DMI_BOARD_NAME, "N14ZP74G"), + }, + .driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH), + }, {} };