1. 16 May, 2018 40 commits
    • Hans de Goede's avatar
      Bluetooth: btusb: Only check needs_reset_resume DMI table for QCA rome chipsets · 4aa9ef8a
      Hans de Goede authored
      commit fc549102 upstream.
      
      Jeremy Cline correctly points out in rhbz#1514836 that a device where the
      QCA rome chipset needs the USB_QUIRK_RESET_RESUME quirk, may also ship
      with a different wifi/bt chipset in some configurations.
      
      If that is the case then we are needlessly penalizing those other chipsets
      with a reset-resume quirk, typically causing 0.4W extra power use because
      this disables runtime-pm.
      
      This commit moves the DMI table check to a btusb_check_needs_reset_resume()
      helper (so that we can easily also call it for other chipsets) and calls
      this new helper only for QCA_ROME chipsets for now.
      
      BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
      Cc: stable@vger.kernel.org
      Cc: Jeremy Cline <jcline@redhat.com>
      Suggested-by: default avatarJeremy Cline <jcline@redhat.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4aa9ef8a
    • Hans de Goede's avatar
      Bluetooth: btusb: Add Dell XPS 13 9360 to btusb_needs_reset_resume_table · 4fcd0333
      Hans de Goede authored
      commit 596b07a9 upstream.
      
      The Dell XPS 13 9360 uses a QCA Rome chip which needs to be reset
      (and have its firmware reloaded) for bluetooth to work after
      suspend/resume.
      
      BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
      Cc: stable@vger.kernel.org
      Cc: Garrett LeSage <glesage@redhat.com>
      Reported-and-tested-by: default avatarGarrett LeSage <glesage@redhat.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4fcd0333
    • Hans de Goede's avatar
      Revert "Bluetooth: btusb: Fix quirk for Atheros 1525/QCA6174" · 9ddc1d27
      Hans de Goede authored
      commit 544a5916 upstream.
      
      Commit f44cb4b1 ("Bluetooth: btusb: Fix quirk for Atheros
      1525/QCA6174") is causing bluetooth to no longer work for several
      people, see: https://bugzilla.redhat.com/show_bug.cgi?id=1568911
      
      So lets revert it for now and try to find another solution for
      devices which need the modified quirk.
      
      Cc: stable@vger.kernel.org
      Cc: Takashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9ddc1d27
    • Rafael J. Wysocki's avatar
      cpufreq: schedutil: Avoid using invalid next_freq · 99e9acc2
      Rafael J. Wysocki authored
      commit 97739501 upstream.
      
      If the next_freq field of struct sugov_policy is set to UINT_MAX,
      it shouldn't be used for updating the CPU frequency (this is a
      special "invalid" value), but after commit b7eaf1aa (cpufreq:
      schedutil: Avoid reducing frequency of busy CPUs prematurely) it
      may be passed as the new frequency to sugov_update_commit() in
      sugov_update_single().
      
      Fix that by adding an extra check for the special UINT_MAX value
      of next_freq to sugov_update_single().
      
      Fixes: b7eaf1aa (cpufreq: schedutil: Avoid reducing frequency of busy CPUs prematurely)
      Reported-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
      Cc: 4.12+ <stable@vger.kernel.org> # 4.12+
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      99e9acc2
    • Rafael J. Wysocki's avatar
      PCI / PM: Check device_may_wakeup() in pci_enable_wake() · 64a03d3b
      Rafael J. Wysocki authored
      commit cfcadfaa upstream.
      
      Commit 0847684c (PCI / PM: Simplify device wakeup settings code)
      went too far and dropped the device_may_wakeup() check from
      pci_enable_wake() which causes wakeup to be enabled during system
      suspend, hibernation or shutdown for some PCI devices that are not
      allowed by user space to wake up the system from sleep (or power off).
      
      As a result of this, excessive power is drawn by some of the affected
      systems while in sleep states or off.
      
      Restore the device_may_wakeup() check in pci_enable_wake(), but make
      sure that the PCI bus type's runtime suspend callback will not call
      device_may_wakeup() which is about system wakeup from sleep and not
      about device wakeup from runtime suspend.
      
      Fixes: 0847684c (PCI / PM: Simplify device wakeup settings code)
      Reported-by: default avatarJoseph Salisbury <joseph.salisbury@canonical.com>
      Cc: 4.13+ <stable@vger.kernel.org> # 4.13+
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      64a03d3b
    • Kai Heng Feng's avatar
      PCI / PM: Always check PME wakeup capability for runtime wakeup support · 89d5c4eb
      Kai Heng Feng authored
      commit 8feaec33 upstream.
      
      USB controller ASM1042 stops working after commit de3ef1eb (PM /
      core: Drop run_wake flag from struct dev_pm_info).
      
      The device in question is not power managed by platform firmware,
      furthermore, it only supports PME# from D3cold:
      Capabilities: [78] Power Management version 3
             Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA PME(D0-,D1-,D2-,D3hot-,D3cold+)
             Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
      
      Before commit de3ef1eb, the device never gets runtime suspended.
      After that commit, the device gets runtime suspended to D3hot, which can
      not generate any PME#.
      
      usb_hcd_pci_probe() unconditionally calls device_wakeup_enable(), hence
      device_can_wakeup() in pci_dev_run_wake() always returns true.
      
      So pci_dev_run_wake() needs to check PME wakeup capability as its first
      condition.
      
      In addition, change wakeup flag passed to pci_target_state() from false
      to true, because we want to find the deepest state different from D3cold
      that the device can still generate PME#. In this case, it's D0 for the
      device in question.
      
      Fixes: de3ef1eb (PM / core: Drop run_wake flag from struct dev_pm_info)
      Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
      Cc: 4.13+ <stable@vger.kernel.org> # 4.13+
      Acked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      89d5c4eb
    • Gustavo A. R. Silva's avatar
      atm: zatm: Fix potential Spectre v1 · e2023117
      Gustavo A. R. Silva authored
      commit 2be147f7 upstream.
      
      pool can be indirectly controlled by user-space, hence leading to
      a potential exploitation of the Spectre variant 1 vulnerability.
      
      This issue was detected with the help of Smatch:
      
      drivers/atm/zatm.c:1462 zatm_ioctl() warn: potential spectre issue
      'zatm_dev->pool_info' (local cap)
      
      Fix this by sanitizing pool before using it to index
      zatm_dev->pool_info
      
      Notice that given that speculation windows are large, the policy is
      to kill the speculation on the first load and not worry if it can be
      completed with a dependent load/store [1].
      
      [1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e2023117
    • Gustavo A. R. Silva's avatar
      net: atm: Fix potential Spectre v1 · cc21a603
      Gustavo A. R. Silva authored
      commit acf784bd upstream.
      
      ioc_data.dev_num can be controlled by user-space, hence leading to
      a potential exploitation of the Spectre variant 1 vulnerability.
      
      This issue was detected with the help of Smatch:
      net/atm/lec.c:702 lec_vcc_attach() warn: potential spectre issue
      'dev_lec'
      
      Fix this by sanitizing ioc_data.dev_num before using it to index
      dev_lec. Also, notice that there is another instance in which array
      dev_lec is being indexed using ioc_data.dev_num at line 705:
      lec_vcc_added(netdev_priv(dev_lec[ioc_data.dev_num]),
      
      Notice that given that speculation windows are large, the policy is
      to kill the speculation on the first load and not worry if it can be
      completed with a dependent load/store [1].
      
      [1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cc21a603
    • Ville Syrjälä's avatar
      drm/atomic: Clean private obj old_state/new_state in drm_atomic_state_default_clear() · 87aa17ca
      Ville Syrjälä authored
      commit b5cb2e5a upstream.
      
      Clear the old_state and new_state pointers for private objects
      in drm_atomic_state_default_clear(). We don't actually have
      functions to get the new/old state for private objects so
      getting access to the potentially stale pointers requires a
      bit more manual labour than for other object types. But let's
      clear the pointers for private objects as well, if only to
      avoid future surprises when someone decides to add the functions
      to get at them.
      
      v2: Split private objs to a separate patch (Daniel)
      
      Cc: <stable@vger.kernel.org> # v4.14+
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      Cc: Abhay Kumar <abhay.kumar@intel.com>
      Fixes: a4370c77 (drm/atomic: Make private objs proper objects)
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180502183247.5746-1-ville.syrjala@linux.intel.comReviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      87aa17ca
    • Ville Syrjälä's avatar
      drm/atomic: Clean old_state/new_state in drm_atomic_state_default_clear() · 969d4595
      Ville Syrjälä authored
      commit f0b408ee upstream.
      
      Clear the old_state and new_state pointers for every object in
      drm_atomic_state_default_clear(). Otherwise
      drm_atomic_get_{new,old}_*_state() will hand out stale pointers to
      anyone who hasn't first confirmed that the object is in fact part of
      the current atomic transcation, if they are called after we've done
      the ww backoff dance while hanging on to the same drm_atomic_state.
      
      For example, handle_conflicting_encoders() looks like it could hit
      this since it iterates the full connector list and just calls
      drm_atomic_get_new_connector_state() for each.
      
      And I believe we have now witnessed this happening at least once in
      i915 check_digital_port_conflicts(). Commit 8b69449d ("drm/i915:
      Remove last references to drm_atomic_get_existing* macros") changed
      the safe drm_atomic_get_existing_connector_state() to the unsafe
      drm_atomic_get_new_connector_state(), which opened the doors for
      this particular bug there as well.
      
      v2: Split private objs out to a separate patch (Daniel)
      
      Cc: stable@vger.kernel.org
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      Cc: Abhay Kumar <abhay.kumar@intel.com>
      Fixes: 581e49fe ("drm/atomic: Add new iterators over all state, v3.")
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180502183247.5746-1-ville.syrjala@linux.intel.comReviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      969d4595
    • Lyude Paul's avatar
      drm/nouveau: Fix deadlock in nv50_mstm_register_connector() · 34a21b17
      Lyude Paul authored
      commit 352672db upstream.
      
      Currently; we're grabbing all of the modesetting locks before adding MST
      connectors to fbdev. This isn't actually necessary, and causes a
      deadlock as well:
      
      ======================================================
      WARNING: possible circular locking dependency detected
      4.17.0-rc3Lyude-Test+ #1 Tainted: G           O
      ------------------------------------------------------
      kworker/1:0/18 is trying to acquire lock:
      00000000c832f62d (&helper->lock){+.+.}, at: drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
      
      but task is already holding lock:
      00000000942e28e2 (crtc_ww_class_mutex){+.+.}, at: drm_modeset_backoff+0x8e/0x1c0 [drm]
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #3 (crtc_ww_class_mutex){+.+.}:
             ww_mutex_lock+0x43/0x80
             drm_modeset_lock+0x71/0x130 [drm]
             drm_helper_probe_single_connector_modes+0x7d/0x6b0 [drm_kms_helper]
             drm_setup_crtcs+0x15e/0xc90 [drm_kms_helper]
             __drm_fb_helper_initial_config_and_unlock+0x29/0x480 [drm_kms_helper]
             nouveau_fbcon_init+0x138/0x1a0 [nouveau]
             nouveau_drm_load+0x173/0x7e0 [nouveau]
             drm_dev_register+0x134/0x1c0 [drm]
             drm_get_pci_dev+0x8e/0x160 [drm]
             nouveau_drm_probe+0x1a9/0x230 [nouveau]
             pci_device_probe+0xcd/0x150
             driver_probe_device+0x30b/0x480
             __driver_attach+0xbc/0xe0
             bus_for_each_dev+0x67/0x90
             bus_add_driver+0x164/0x260
             driver_register+0x57/0xc0
             do_one_initcall+0x4d/0x323
             do_init_module+0x5b/0x1f8
             load_module+0x20e5/0x2ac0
             __do_sys_finit_module+0xb7/0xd0
             do_syscall_64+0x60/0x1b0
             entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      -> #2 (crtc_ww_class_acquire){+.+.}:
             drm_helper_probe_single_connector_modes+0x58/0x6b0 [drm_kms_helper]
             drm_setup_crtcs+0x15e/0xc90 [drm_kms_helper]
             __drm_fb_helper_initial_config_and_unlock+0x29/0x480 [drm_kms_helper]
             nouveau_fbcon_init+0x138/0x1a0 [nouveau]
             nouveau_drm_load+0x173/0x7e0 [nouveau]
             drm_dev_register+0x134/0x1c0 [drm]
             drm_get_pci_dev+0x8e/0x160 [drm]
             nouveau_drm_probe+0x1a9/0x230 [nouveau]
             pci_device_probe+0xcd/0x150
             driver_probe_device+0x30b/0x480
             __driver_attach+0xbc/0xe0
             bus_for_each_dev+0x67/0x90
             bus_add_driver+0x164/0x260
             driver_register+0x57/0xc0
             do_one_initcall+0x4d/0x323
             do_init_module+0x5b/0x1f8
             load_module+0x20e5/0x2ac0
             __do_sys_finit_module+0xb7/0xd0
             do_syscall_64+0x60/0x1b0
             entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      -> #1 (&dev->mode_config.mutex){+.+.}:
             drm_setup_crtcs+0x10c/0xc90 [drm_kms_helper]
             __drm_fb_helper_initial_config_and_unlock+0x29/0x480 [drm_kms_helper]
             nouveau_fbcon_init+0x138/0x1a0 [nouveau]
             nouveau_drm_load+0x173/0x7e0 [nouveau]
             drm_dev_register+0x134/0x1c0 [drm]
             drm_get_pci_dev+0x8e/0x160 [drm]
             nouveau_drm_probe+0x1a9/0x230 [nouveau]
             pci_device_probe+0xcd/0x150
             driver_probe_device+0x30b/0x480
             __driver_attach+0xbc/0xe0
             bus_for_each_dev+0x67/0x90
             bus_add_driver+0x164/0x260
             driver_register+0x57/0xc0
             do_one_initcall+0x4d/0x323
             do_init_module+0x5b/0x1f8
             load_module+0x20e5/0x2ac0
             __do_sys_finit_module+0xb7/0xd0
             do_syscall_64+0x60/0x1b0
             entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      -> #0 (&helper->lock){+.+.}:
             __mutex_lock+0x70/0x9d0
             drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
             nv50_mstm_register_connector+0x2c/0x50 [nouveau]
             drm_dp_add_port+0x2f5/0x420 [drm_kms_helper]
             drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper]
             drm_dp_add_port+0x33f/0x420 [drm_kms_helper]
             drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper]
             drm_dp_check_and_send_link_address+0x87/0xd0 [drm_kms_helper]
             drm_dp_mst_link_probe_work+0x4d/0x80 [drm_kms_helper]
             process_one_work+0x20d/0x650
             worker_thread+0x3a/0x390
             kthread+0x11e/0x140
             ret_from_fork+0x3a/0x50
      
      other info that might help us debug this:
      Chain exists of:
        &helper->lock --> crtc_ww_class_acquire --> crtc_ww_class_mutex
       Possible unsafe locking scenario:
             CPU0                    CPU1
             ----                    ----
        lock(crtc_ww_class_mutex);
                                     lock(crtc_ww_class_acquire);
                                     lock(crtc_ww_class_mutex);
        lock(&helper->lock);
      
       *** DEADLOCK ***
      5 locks held by kworker/1:0/18:
       #0: 000000004a05cd50 ((wq_completion)"events_long"){+.+.}, at: process_one_work+0x187/0x650
       #1: 00000000601c11d1 ((work_completion)(&mgr->work)){+.+.}, at: process_one_work+0x187/0x650
       #2: 00000000586ca0df (&dev->mode_config.mutex){+.+.}, at: drm_modeset_lock_all+0x3a/0x1b0 [drm]
       #3: 00000000d3ca0ffa (crtc_ww_class_acquire){+.+.}, at: drm_modeset_lock_all+0x44/0x1b0 [drm]
       #4: 00000000942e28e2 (crtc_ww_class_mutex){+.+.}, at: drm_modeset_backoff+0x8e/0x1c0 [drm]
      
      stack backtrace:
      CPU: 1 PID: 18 Comm: kworker/1:0 Tainted: G           O      4.17.0-rc3Lyude-Test+ #1
      Hardware name: Gateway FX6840/FX6840, BIOS P01-A3         05/17/2010
      Workqueue: events_long drm_dp_mst_link_probe_work [drm_kms_helper]
      Call Trace:
       dump_stack+0x85/0xcb
       print_circular_bug.isra.38+0x1ce/0x1db
       __lock_acquire+0x128f/0x1350
       ? lock_acquire+0x9f/0x200
       ? lock_acquire+0x9f/0x200
       ? __ww_mutex_lock.constprop.13+0x8f/0x1000
       lock_acquire+0x9f/0x200
       ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
       ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
       __mutex_lock+0x70/0x9d0
       ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
       ? ww_mutex_lock+0x43/0x80
       ? _cond_resched+0x15/0x30
       ? ww_mutex_lock+0x43/0x80
       ? drm_modeset_lock+0xb2/0x130 [drm]
       ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
       drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
       nv50_mstm_register_connector+0x2c/0x50 [nouveau]
       drm_dp_add_port+0x2f5/0x420 [drm_kms_helper]
       ? mark_held_locks+0x50/0x80
       ? kfree+0xcf/0x2a0
       ? drm_dp_check_mstb_guid+0xd6/0x120 [drm_kms_helper]
       ? trace_hardirqs_on_caller+0xed/0x180
       ? drm_dp_check_mstb_guid+0xd6/0x120 [drm_kms_helper]
       drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper]
       drm_dp_add_port+0x33f/0x420 [drm_kms_helper]
       ? nouveau_connector_aux_xfer+0x7c/0xb0 [nouveau]
       ? find_held_lock+0x2d/0x90
       ? drm_dp_dpcd_access+0xd9/0xf0 [drm_kms_helper]
       ? __mutex_unlock_slowpath+0x3b/0x280
       ? drm_dp_dpcd_access+0xd9/0xf0 [drm_kms_helper]
       drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper]
       drm_dp_check_and_send_link_address+0x87/0xd0 [drm_kms_helper]
       drm_dp_mst_link_probe_work+0x4d/0x80 [drm_kms_helper]
       process_one_work+0x20d/0x650
       worker_thread+0x3a/0x390
       ? process_one_work+0x650/0x650
       kthread+0x11e/0x140
       ? kthread_create_worker_on_cpu+0x50/0x50
       ret_from_fork+0x3a/0x50
      
      Taking example from i915, the only time we need to hold any modesetting
      locks is when changing the port on the mstc, and in that case we only
      need to hold the connection mutex.
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Cc: Karol Herbst <kherbst@redhat.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      34a21b17
    • Florent Flament's avatar
      drm/i915: Fix drm:intel_enable_lvds ERROR message in kernel log · b2e01797
      Florent Flament authored
      commit e8f48f96 upstream.
      
      Fix `[drm:intel_enable_lvds] *ERROR* timed out waiting for panel to
      power on` in kernel log at boot time.
      
      Toshiba Satellite Z930 laptops needs between 1 and 2 seconds to power
      on its screen during Intel i915 DRM initialization. This currently
      results in a `[drm:intel_enable_lvds] *ERROR* timed out waiting for
      panel to power on` message appearing in the kernel log during boot
      time and when stopping the machine.
      
      This change increases the timeout of the `intel_enable_lvds` function
      from 1 to 5 seconds, letting enough time for the Satellite 930 LCD
      screen to power on, and suppressing the error message from the kernel
      log.
      
      This patch has been successfully tested on Linux 4.14 running on a
      Toshiba Satellite Z930.
      
      [vsyrjala: bump the timeout from 2 to 5 seconds to match the DP
       code and properly cover the max hw timeout of ~4 seconds, and
       drop the comment about the specific machine since this is not
       a particulary surprising issue, nor specific to that one machine]
      Signed-off-by: default avatarFlorent Flament <contact@florentflament.com>
      Cc: stable@vger.kernel.org
      Cc: Pavel Petrovic <ppetrovic@acm.org>
      Cc: Sérgio M. Basto <sergio@serjux.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103414
      References: https://bugzilla.kernel.org/show_bug.cgi?id=57591Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180419160700.19828-1-ville.syrjala@linux.intel.comReviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
      (cherry picked from commit 280b54ad)
      Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b2e01797
    • Boris Brezillon's avatar
      drm/vc4: Fix scaling of uni-planar formats · 2b2b0037
      Boris Brezillon authored
      commit 9a0e9802 upstream.
      
      When using uni-planar formats (like RGB), the scaling parameters are
      stored in plane 0, not plane 1.
      
      Fixes: fc04023f ("drm/vc4: Add support for YUV planes.")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
      Reviewed-by: default avatarEric Anholt <eric@anholt.net>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180507121303.5610-1-boris.brezillon@bootlin.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2b2b0037
    • Lukas Wunner's avatar
      can: hi311x: Work around TX complete interrupt erratum · d2901e24
      Lukas Wunner authored
      commit 32bee8f4 upstream.
      
      When sending packets as fast as possible using "cangen -g 0 -i -x", the
      HI-3110 occasionally latches the interrupt pin high on completion of a
      packet, but doesn't set the TXCPLT bit in the INTF register.  The INTF
      register contains 0x00 as if no interrupt has occurred.  Even waiting
      for a few milliseconds after the interrupt doesn't help.
      
      Work around this apparent erratum by instead checking the TXMTY bit in
      the STATF register ("TX FIFO empty").  We know that we've queued up a
      packet for transmission if priv->tx_len is nonzero.  If the TX FIFO is
      empty, transmission of that packet must have completed.
      
      Note that this is congruent with our handling of received packets, which
      likewise gleans from the STATF register whether a packet is waiting in
      the RX FIFO, instead of looking at the INTF register.
      
      Cc: Mathias Duckeck <m.duckeck@kunbus.de>
      Cc: Akshay Bhat <akshay.bhat@timesys.com>
      Cc: Casey Fitzpatrick <casey.fitzpatrick@timesys.com>
      Cc: stable@vger.kernel.org # v4.12+
      Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
      Acked-by: default avatarAkshay Bhat <akshay.bhat@timesys.com>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d2901e24
    • Lukas Wunner's avatar
      can: hi311x: Acquire SPI lock on ->do_get_berr_counter · ad25cf42
      Lukas Wunner authored
      commit 5cec9425 upstream.
      
      hi3110_get_berr_counter() may run concurrently to the rest of the driver
      but neglects to acquire the lock protecting access to the SPI device.
      As a result, it and the rest of the driver may clobber each other's tx
      and rx buffers.
      
      We became aware of this issue because transmission of packets with
      "cangen -g 0 -i -x" frequently hung.  It turns out that agetty executes
      ->do_get_berr_counter every few seconds via the following call stack:
      
          CPU: 2 PID: 1605 Comm: agetty
          [<7f3f7500>] (hi3110_get_berr_counter [hi311x])
          [<7f130204>] (can_fill_info [can_dev])
          [<80693bc0>] (rtnl_fill_ifinfo)
          [<806949ec>] (rtnl_dump_ifinfo)
          [<806b4834>] (netlink_dump)
          [<806b4bc8>] (netlink_recvmsg)
          [<8065f180>] (sock_recvmsg)
          [<80660f90>] (___sys_recvmsg)
          [<80661e7c>] (__sys_recvmsg)
          [<80661ec0>] (SyS_recvmsg)
          [<80108b20>] (ret_fast_syscall+0x0/0x1c)
      
      agetty listens to netlink messages in order to update the login prompt
      when IP addresses change (if /etc/issue contains \4 or \6 escape codes):
      https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=e36deb6424e8
      
      It's a useful feature, though it seems questionable that it causes CAN
      bit error statistics to be queried.
      
      Be that as it may, if hi3110_get_berr_counter() is invoked while a frame
      is sent by hi3110_hw_tx(), bogus SPI transfers like the following may
      occur:
      
          => 12 00             (hi3110_get_berr_counter() wanted to transmit
                                EC 00 to query the transmit error counter,
                                but the first byte was overwritten by
                                hi3110_hw_tx_frame())
      
          => EA 00 3E 80 01 FB (hi3110_hw_tx_frame() wanted to transmit a
                                frame, but the first byte was overwritten by
                                hi3110_get_berr_counter() because it wanted
                                to query the receive error counter)
      
      This sequence hangs the transmission because the driver believes it has
      sent a frame and waits for the interrupt signaling completion, but in
      reality the chip has never sent away the frame since the commands it
      received were malformed.
      
      Fix by acquiring the SPI lock in hi3110_get_berr_counter().
      
      I've scrutinized the entire driver for further unlocked SPI accesses but
      found no others.
      
      Cc: Mathias Duckeck <m.duckeck@kunbus.de>
      Cc: Akshay Bhat <akshay.bhat@timesys.com>
      Cc: Casey Fitzpatrick <casey.fitzpatrick@timesys.com>
      Cc: Stef Walter <stefw@redhat.com>
      Cc: Karel Zak <kzak@redhat.com>
      Cc: stable@vger.kernel.org # v4.12+
      Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
      Reviewed-by: default avatarAkshay Bhat <akshay.bhat@timesys.com>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ad25cf42
    • Jimmy Assarsson's avatar
      can: kvaser_usb: Increase correct stats counter in kvaser_usb_rx_can_msg() · d0ca84d7
      Jimmy Assarsson authored
      commit 6ee00865 upstream.
      
      Increase rx_dropped, if alloc_can_skb() fails, not tx_dropped.
      Signed-off-by: default avatarJimmy Assarsson <extja@kvaser.com>
      Cc: linux-stable <stable@vger.kernel.org>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d0ca84d7
    • Ilya Dryomov's avatar
      ceph: fix rsize/wsize capping in ceph_direct_read_write() · 4636b4e2
      Ilya Dryomov authored
      commit 3a15b38f upstream.
      
      rsize/wsize cap should be applied before ceph_osdc_new_request() is
      called.  Otherwise, if the size is limited by the cap instead of the
      stripe unit, ceph_osdc_new_request() would setup an extent op that is
      bigger than what dio_get_pages_alloc() would pin and add to the page
      vector, triggering asserts in the messenger.
      
      Cc: stable@vger.kernel.org
      Fixes: 95cca2b4 ("ceph: limit osd write size")
      Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
      Reviewed-by: default avatar"Yan, Zheng" <zyan@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4636b4e2
    • David Rientjes's avatar
      mm, oom: fix concurrent munlock and oom reaper unmap, v3 · 2270dfcc
      David Rientjes authored
      commit 27ae357f upstream.
      
      Since exit_mmap() is done without the protection of mm->mmap_sem, it is
      possible for the oom reaper to concurrently operate on an mm until
      MMF_OOM_SKIP is set.
      
      This allows munlock_vma_pages_all() to concurrently run while the oom
      reaper is operating on a vma.  Since munlock_vma_pages_range() depends
      on clearing VM_LOCKED from vm_flags before actually doing the munlock to
      determine if any other vmas are locking the same memory, the check for
      VM_LOCKED in the oom reaper is racy.
      
      This is especially noticeable on architectures such as powerpc where
      clearing a huge pmd requires serialize_against_pte_lookup().  If the pmd
      is zapped by the oom reaper during follow_page_mask() after the check
      for pmd_none() is bypassed, this ends up deferencing a NULL ptl or a
      kernel oops.
      
      Fix this by manually freeing all possible memory from the mm before
      doing the munlock and then setting MMF_OOM_SKIP.  The oom reaper can not
      run on the mm anymore so the munlock is safe to do in exit_mmap().  It
      also matches the logic that the oom reaper currently uses for
      determining when to set MMF_OOM_SKIP itself, so there's no new risk of
      excessive oom killing.
      
      This issue fixes CVE-2018-1000200.
      
      Link: http://lkml.kernel.org/r/alpine.DEB.2.21.1804241526320.238665@chino.kir.corp.google.com
      Fixes: 21292580 ("mm: oom: let oom_reap_task and exit_mmap run concurrently")
      Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
      Suggested-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: <stable@vger.kernel.org>	[4.14+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2270dfcc
    • Pavel Tatashin's avatar
      mm: sections are not offlined during memory hotremove · 8ee7dabb
      Pavel Tatashin authored
      commit 27227c73 upstream.
      
      Memory hotplug and hotremove operate with per-block granularity.  If the
      machine has a large amount of memory (more than 64G), the size of a
      memory block can span multiple sections.  By mistake, during hotremove
      we set only the first section to offline state.
      
      The bug was discovered because kernel selftest started to fail:
        https://lkml.kernel.org/r/20180423011247.GK5563@yexl-desktop
      
      After commit, "mm/memory_hotplug: optimize probe routine".  But, the bug
      is older than this commit.  In this optimization we also added a check
      for sections to be in a proper state during hotplug operation.
      
      Link: http://lkml.kernel.org/r/20180427145257.15222-1-pasha.tatashin@oracle.com
      Fixes: 2d070eab ("mm: consider zone which is not fully populated to have holes")
      Signed-off-by: default avatarPavel Tatashin <pasha.tatashin@oracle.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Steven Sistare <steven.sistare@oracle.com>
      Cc: Daniel Jordan <daniel.m.jordan@oracle.com>
      Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8ee7dabb
    • Vitaly Wool's avatar
      z3fold: fix reclaim lock-ups · 21fb6d8b
      Vitaly Wool authored
      commit 6098d7e1 upstream.
      
      Do not try to optimize in-page object layout while the page is under
      reclaim.  This fixes lock-ups on reclaim and improves reclaim
      performance at the same time.
      
      [akpm@linux-foundation.org: coding-style fixes]
      Link: http://lkml.kernel.org/r/20180430125800.444cae9706489f412ad12621@gmail.comSigned-off-by: default avatarVitaly Wool <vitaly.vul@sony.com>
      Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Cc: <Oleksiy.Avramchenko@sony.com>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      21fb6d8b
    • Steven Rostedt (VMware)'s avatar
      tracing: Fix regex_match_front() to not over compare the test string · 89999712
      Steven Rostedt (VMware) authored
      commit dc432c3d upstream.
      
      The regex match function regex_match_front() in the tracing filter logic,
      was fixed to test just the pattern length from testing the entire test
      string. That is, it went from strncmp(str, r->pattern, len) to
      strcmp(str, r->pattern, r->len).
      
      The issue is that str is not guaranteed to be nul terminated, and if r->len
      is greater than the length of str, it can access more memory than is
      allocated.
      
      The solution is to add a simple test if (len < r->len) return 0.
      
      Cc: stable@vger.kernel.org
      Fixes: 285caad4 ("tracing/filters: Fix MATCH_FRONT_ONLY filter matching")
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      89999712
    • Mikulas Patocka's avatar
      dm integrity: use kvfree for kvmalloc'd memory · 586d02c1
      Mikulas Patocka authored
      commit fc8cec11 upstream.
      
      Use kvfree instead of kfree because the array is allocated with kvmalloc.
      
      Fixes: 7eada909 ("dm: add integrity target")
      Cc: stable@vger.kernel.org # v4.12+
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      586d02c1
    • Hans de Goede's avatar
      libata: Apply NOLPM quirk for SanDisk SD7UB3Q*G1001 SSDs · 3b93fff8
      Hans de Goede authored
      commit 184add2c upstream.
      
      Richard Jones has reported that using med_power_with_dipm on a T450s
      with a Sandisk SD7UB3Q256G1001 SSD (firmware version X2180501) is
      causing the machine to hang.
      
      Switching the LPM to max_performance fixes this, so it seems that
      this Sandisk SSD does not handle LPM well.
      
      Note in the past there have been bug-reports about the following
      Sandisk models not working with min_power, so we may need to extend
      the quirk list in the future: name - firmware
      Sandisk SD6SB2M512G1022I   - X210400
      Sandisk SD6PP4M-256G-1006  - A200906
      
      Cc: stable@vger.kernel.org
      Cc: Richard W.M. Jones <rjones@redhat.com>
      Reported-and-tested-by: default avatarRichard W.M. Jones <rjones@redhat.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3b93fff8
    • Johan Hovold's avatar
      rfkill: gpio: fix memory leak in probe error path · d1d5c31f
      Johan Hovold authored
      commit 4bf01ca2 upstream.
      
      Make sure to free the rfkill device in case registration fails during
      probe.
      
      Fixes: 5e7ca393 ("net: rfkill: gpio: convert to resource managed allocation")
      Cc: stable <stable@vger.kernel.org>	# 3.13
      Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d1d5c31f
    • Uwe Kleine-König's avatar
      gpio: fix error path in lineevent_create · a7ea57b0
      Uwe Kleine-König authored
      commit f001cc35 upstream.
      
      If gpiod_request() fails the cleanup must not call gpiod_free().
      
      Cc: stable@vger.kernel.org
      Fixes: 61f922db ("gpio: userspace ABI for reading GPIO line events")
      Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a7ea57b0
    • Govert Overgaauw's avatar
      gpio: fix aspeed_gpio unmask irq · 28534d29
      Govert Overgaauw authored
      commit f241632f upstream.
      
      The unmask function disables all interrupts in a bank when unmasking an
      interrupt. Only disable the given interrupt.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGovert Overgaauw <govert.overgaauw@prodrive-technologies.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      28534d29
    • Timur Tabi's avatar
      gpioib: do not free unrequested descriptors · 0f40bb84
      Timur Tabi authored
      commit ab3dbcf7 upstream.
      
      If the main loop in linehandle_create() encounters an error, it
      unwinds completely by freeing all previously requested GPIO
      descriptors.  However, if the error occurs in the beginning of
      the loop before that GPIO is requested, then the exit code
      attempts to free a null descriptor.  If extrachecks is enabled,
      gpiod_free() triggers a WARN_ON.
      
      Instead, keep a separate count of legitimate GPIOs so that only
      those are freed.
      
      Cc: stable@vger.kernel.org
      Fixes: d7c51b47 ("gpio: userspace ABI for reading/writing GPIO lines")
      Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: default avatarTimur Tabi <timur@codeaurora.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0f40bb84
    • Jann Horn's avatar
      compat: fix 4-byte infoleak via uninitialized struct field · ef7c4825
      Jann Horn authored
      commit 0a0b9873 upstream.
      
      Commit 3a4d44b6 ("ntp: Move adjtimex related compat syscalls to
      native counterparts") removed the memset() in compat_get_timex().  Since
      then, the compat adjtimex syscall can invoke do_adjtimex() with an
      uninitialized ->tai.
      
      If do_adjtimex() doesn't write to ->tai (e.g.  because the arguments are
      invalid), compat_put_timex() then copies the uninitialized ->tai field
      to userspace.
      
      Fix it by adding the memset() back.
      
      Fixes: 3a4d44b6 ("ntp: Move adjtimex related compat syscalls to native counterparts")
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Acked-by: default avatarKees Cook <keescook@chromium.org>
      Acked-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ef7c4825
    • Suzuki K Poulose's avatar
      arm64: Add work around for Arm Cortex-A55 Erratum 1024718 · 50ed0188
      Suzuki K Poulose authored
      commit ece1397c upstream.
      
      Some variants of the Arm Cortex-55 cores (r0p0, r0p1, r1p0) suffer
      from an erratum 1024718, which causes incorrect updates when DBM/AP
      bits in a page table entry is modified without a break-before-make
      sequence. The work around is to skip enabling the hardware DBM feature
      on the affected cores. The hardware Access Flag management features
      is not affected. There are some other cores suffering from this
      errata, which could be added to the midr_list to trigger the work
      around.
      
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: ckadabi@codeaurora.org
      Reviewed-by: default avatarDave Martin <dave.martin@arm.com>
      Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
      Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      50ed0188
    • Paul Mackerras's avatar
      KVM: PPC: Book3S HV: Fix VRMA initialization with 2MB or 1GB memory backing · ca0ecba3
      Paul Mackerras authored
      commit debd574f upstream.
      
      The current code for initializing the VRMA (virtual real memory area)
      for HPT guests requires the page size of the backing memory to be one
      of 4kB, 64kB or 16MB.  With a radix host we have the possibility that
      the backing memory page size can be 2MB or 1GB.  In these cases, if the
      guest switches to HPT mode, KVM will not initialize the VRMA and the
      guest will fail to run.
      
      In fact it is not necessary that the VRMA page size is the same as the
      backing memory page size; any VRMA page size less than or equal to the
      backing memory page size is acceptable.  Therefore we now choose the
      largest page size out of the set {4k, 64k, 16M} which is not larger
      than the backing memory page size.
      Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ca0ecba3
    • Laurent Vivier's avatar
      KVM: PPC: Book3S HV: Fix guest time accounting with VIRT_CPU_ACCOUNTING_GEN · f768d0f9
      Laurent Vivier authored
      commit 61bd0f66 upstream.
      
      Since commit 8b24e69f ("KVM: PPC: Book3S HV: Close race with testing
      for signals on guest entry"), if CONFIG_VIRT_CPU_ACCOUNTING_GEN is set, the
      guest time is not accounted to guest time and user time, but instead to
      system time.
      
      This is because guest_enter()/guest_exit() are called while interrupts
      are disabled and the tick counter cannot be updated between them.
      
      To fix that, move guest_exit() after local_irq_enable(), and as
      guest_enter() is called with IRQ disabled, call guest_enter_irqoff()
      instead.
      
      Fixes: 8b24e69f ("KVM: PPC: Book3S HV: Close race with testing for signals on guest entry")
      Signed-off-by: default avatarLaurent Vivier <lvivier@redhat.com>
      Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f768d0f9
    • Paul Mackerras's avatar
      KVM: PPC: Book3S HV: Fix trap number return from __kvmppc_vcore_entry · c51eb737
      Paul Mackerras authored
      commit a8b48a4d upstream.
      
      This fixes a bug where the trap number that is returned by
      __kvmppc_vcore_entry gets corrupted.  The effect of the corruption
      is that IPIs get ignored on POWER9 systems when the IPI is sent via
      a doorbell interrupt to a CPU which is executing in a KVM guest.
      The effect of the IPI being ignored is often that another CPU locks
      up inside smp_call_function_many() (and if that CPU is holding a
      spinlock, other CPUs then lock up inside raw_spin_lock()).
      
      The trap number is currently held in register r12 for most of the
      assembly-language part of the guest exit path.  In that path, we
      call kvmppc_subcore_exit_guest(), which is a C function, without
      restoring r12 afterwards.  Depending on the kernel config and the
      compiler, it may modify r12 or it may not, so some config/compiler
      combinations see the bug and others don't.
      
      To fix this, we arrange for the trap number to be stored on the
      stack from the 'guest_bypass:' label until the end of the function,
      then the trap number is loaded and returned in r12 as before.
      
      Cc: stable@vger.kernel.org # v4.8+
      Fixes: fd7bacbc ("KVM: PPC: Book3S HV: Fix TB corruption in guest exit path on HMI interrupt")
      Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c51eb737
    • Jan Kara's avatar
      bdi: Fix oops in wb_workfn() · 683b4520
      Jan Kara authored
      commit b8b78495 upstream.
      
      Syzbot has reported that it can hit a NULL pointer dereference in
      wb_workfn() due to wb->bdi->dev being NULL. This indicates that
      wb_workfn() was called for an already unregistered bdi which should not
      happen as wb_shutdown() called from bdi_unregister() should make sure
      all pending writeback works are completed before bdi is unregistered.
      Except that wb_workfn() itself can requeue the work with:
      
      	mod_delayed_work(bdi_wq, &wb->dwork, 0);
      
      and if this happens while wb_shutdown() is waiting in:
      
      	flush_delayed_work(&wb->dwork);
      
      the dwork can get executed after wb_shutdown() has finished and
      bdi_unregister() has cleared wb->bdi->dev.
      
      Make wb_workfn() use wakeup_wb() for requeueing the work which takes all
      the necessary precautions against racing with bdi unregistration.
      
      CC: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      CC: Tejun Heo <tj@kernel.org>
      Fixes: 839a8e86Reported-by: default avatarsyzbot <syzbot+9873874c735f2892e7e9@syzkaller.appspotmail.com>
      Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      683b4520
    • Tetsuo Handa's avatar
      bdi: wake up concurrent wb_shutdown() callers. · 6b5a9916
      Tetsuo Handa authored
      commit 8236b0ae upstream.
      
      syzbot is reporting hung tasks at wait_on_bit(WB_shutting_down) in
      wb_shutdown() [1]. This seems to be because commit 5318ce7d ("bdi:
      Shutdown writeback on all cgwbs in cgwb_bdi_destroy()") forgot to call
      wake_up_bit(WB_shutting_down) after clear_bit(WB_shutting_down).
      
      Introduce a helper function clear_and_wake_up_bit() and use it, in order
      to avoid similar errors in future.
      
      [1] https://syzkaller.appspot.com/bug?id=b297474817af98d5796bc544e1bb806fc3da0e5eSigned-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Reported-by: default avatarsyzbot <syzbot+c0cf869505e03bdf1a24@syzkaller.appspotmail.com>
      Fixes: 5318ce7d ("bdi: Shutdown writeback on all cgwbs in cgwb_bdi_destroy()")
      Cc: Tejun Heo <tj@kernel.org>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6b5a9916
    • Eric Dumazet's avatar
      tcp: fix TCP_REPAIR_QUEUE bound checking · 8c12bd91
      Eric Dumazet authored
      commit bf2acc94 upstream.
      
      syzbot is able to produce a nasty WARN_ON() in tcp_verify_left_out()
      with following C-repro :
      
      socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
      setsockopt(3, SOL_TCP, TCP_REPAIR, [1], 4) = 0
      setsockopt(3, SOL_TCP, TCP_REPAIR_QUEUE, [-1], 4) = 0
      bind(3, {sa_family=AF_INET, sin_port=htons(20002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
      sendto(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
      	1242, MSG_FASTOPEN, {sa_family=AF_INET, sin_port=htons(20002), sin_addr=inet_addr("127.0.0.1")}, 16) = 1242
      setsockopt(3, SOL_TCP, TCP_REPAIR_WINDOW, "\4\0\0@+\205\0\0\377\377\0\0\377\377\377\177\0\0\0\0", 20) = 0
      writev(3, [{"\270", 1}], 1)             = 1
      setsockopt(3, SOL_TCP, TCP_REPAIR_OPTIONS, "\10\0\0\0\0\0\0\0\0\0\0\0|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 386) = 0
      writev(3, [{"\210v\r[\226\320t\231qwQ\204\264l\254\t\1\20\245\214p\350H\223\254;\\\37\345\307p$"..., 3144}], 1) = 3144
      
      The 3rd system call looks odd :
      setsockopt(3, SOL_TCP, TCP_REPAIR_QUEUE, [-1], 4) = 0
      
      This patch makes sure bound checking is using an unsigned compare.
      
      Fixes: ee995283 ("tcp: Initial repair mode")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Cc: Pavel Emelyanov <xemul@parallels.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8c12bd91
    • Jiri Olsa's avatar
      perf: Remove superfluous allocation error check · 108cd022
      Jiri Olsa authored
      commit bfb3d7b8 upstream.
      
      If the get_callchain_buffers fails to allocate the buffer it will
      decrease the nr_callchain_events right away.
      
      There's no point of checking the allocation error for
      nr_callchain_events > 1. Removing that check.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: syzkaller-bugs@googlegroups.com
      Cc: x86@kernel.org
      Link: http://lkml.kernel.org/r/20180415092352.12403-3-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      108cd022
    • Michal Hocko's avatar
      memcg: fix per_node_info cleanup · 17ffa29c
      Michal Hocko authored
      commit 4eaf431f upstream.
      
      syzbot has triggered a NULL ptr dereference when allocation fault
      injection enforces a failure and alloc_mem_cgroup_per_node_info
      initializes memcg->nodeinfo only half way through.
      
      But __mem_cgroup_free still tries to free all per-node data and
      dereferences pn->lruvec_stat_cpu unconditioanlly even if the specific
      per-node data hasn't been initialized.
      
      The bug is quite unlikely to hit because small allocations do not fail
      and we would need quite some numa nodes to make struct
      mem_cgroup_per_node large enough to cross the costly order.
      
      Link: http://lkml.kernel.org/r/20180406100906.17790-1-mhocko@kernel.org
      Reported-by: syzbot+8a5de3cce7cdc70e9ebe@syzkaller.appspotmail.com
      Fixes: 00f3ca2c ("mm: memcontrol: per-lruvec stats infrastructure")
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Reviewed-by: default avatarAndrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      17ffa29c
    • Eric Dumazet's avatar
      inetpeer: fix uninit-value in inet_getpeer · ac91ff2a
      Eric Dumazet authored
      commit b6a37e5e upstream.
      
      syzbot/KMSAN reported that p->dtime was read while it was
      not yet initialized in :
      
      	delta = (__u32)jiffies - p->dtime;
      	if (delta < ttl || !refcount_dec_if_one(&p->refcnt))
      		gc_stack[i] = NULL;
      
      This is a false positive, because the inetpeer wont be erased
      from rb-tree if the refcount_dec_if_one(&p->refcnt) does not
      succeed. And this wont happen before first inet_putpeer() call
      for this inetpeer has been done, and ->dtime field is written
      exactly before the refcount_dec_and_test(&p->refcnt).
      
      The KMSAN report was :
      
      BUG: KMSAN: uninit-value in inet_peer_gc net/ipv4/inetpeer.c:163 [inline]
      BUG: KMSAN: uninit-value in inet_getpeer+0x1567/0x1e70 net/ipv4/inetpeer.c:228
      CPU: 0 PID: 9494 Comm: syz-executor5 Not tainted 4.16.0+ #82
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:17 [inline]
       dump_stack+0x185/0x1d0 lib/dump_stack.c:53
       kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067
       __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676
       inet_peer_gc net/ipv4/inetpeer.c:163 [inline]
       inet_getpeer+0x1567/0x1e70 net/ipv4/inetpeer.c:228
       inet_getpeer_v4 include/net/inetpeer.h:110 [inline]
       icmpv4_xrlim_allow net/ipv4/icmp.c:330 [inline]
       icmp_send+0x2b44/0x3050 net/ipv4/icmp.c:725
       ip_options_compile+0x237c/0x29f0 net/ipv4/ip_options.c:472
       ip_rcv_options net/ipv4/ip_input.c:284 [inline]
       ip_rcv_finish+0xda8/0x16d0 net/ipv4/ip_input.c:365
       NF_HOOK include/linux/netfilter.h:288 [inline]
       ip_rcv+0x119d/0x16f0 net/ipv4/ip_input.c:493
       __netif_receive_skb_core+0x47cf/0x4a80 net/core/dev.c:4562
       __netif_receive_skb net/core/dev.c:4627 [inline]
       netif_receive_skb_internal+0x49d/0x630 net/core/dev.c:4701
       netif_receive_skb+0x230/0x240 net/core/dev.c:4725
       tun_rx_batched drivers/net/tun.c:1555 [inline]
       tun_get_user+0x6d88/0x7580 drivers/net/tun.c:1962
       tun_chr_write_iter+0x1d4/0x330 drivers/net/tun.c:1990
       do_iter_readv_writev+0x7bb/0x970 include/linux/fs.h:1776
       do_iter_write+0x30d/0xd40 fs/read_write.c:932
       vfs_writev fs/read_write.c:977 [inline]
       do_writev+0x3c9/0x830 fs/read_write.c:1012
       SYSC_writev+0x9b/0xb0 fs/read_write.c:1085
       SyS_writev+0x56/0x80 fs/read_write.c:1082
       do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      RIP: 0033:0x455111
      RSP: 002b:00007fae0365cba0 EFLAGS: 00000293 ORIG_RAX: 0000000000000014
      RAX: ffffffffffffffda RBX: 000000000000002e RCX: 0000000000455111
      RDX: 0000000000000001 RSI: 00007fae0365cbf0 RDI: 00000000000000fc
      RBP: 0000000020000040 R08: 00000000000000fc R09: 0000000000000000
      R10: 000000000000002e R11: 0000000000000293 R12: 00000000ffffffff
      R13: 0000000000000658 R14: 00000000006fc8e0 R15: 0000000000000000
      
      Uninit was created at:
       kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline]
       kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:188
       kmsan_kmalloc+0x94/0x100 mm/kmsan/kmsan.c:314
       kmem_cache_alloc+0xaab/0xb90 mm/slub.c:2756
       inet_getpeer+0xed8/0x1e70 net/ipv4/inetpeer.c:210
       inet_getpeer_v4 include/net/inetpeer.h:110 [inline]
       ip4_frag_init+0x4d1/0x740 net/ipv4/ip_fragment.c:153
       inet_frag_alloc net/ipv4/inet_fragment.c:369 [inline]
       inet_frag_create net/ipv4/inet_fragment.c:385 [inline]
       inet_frag_find+0x7da/0x1610 net/ipv4/inet_fragment.c:418
       ip_find net/ipv4/ip_fragment.c:275 [inline]
       ip_defrag+0x448/0x67a0 net/ipv4/ip_fragment.c:676
       ip_check_defrag+0x775/0xda0 net/ipv4/ip_fragment.c:724
       packet_rcv_fanout+0x2a8/0x8d0 net/packet/af_packet.c:1447
       deliver_skb net/core/dev.c:1897 [inline]
       deliver_ptype_list_skb net/core/dev.c:1912 [inline]
       __netif_receive_skb_core+0x314a/0x4a80 net/core/dev.c:4545
       __netif_receive_skb net/core/dev.c:4627 [inline]
       netif_receive_skb_internal+0x49d/0x630 net/core/dev.c:4701
       netif_receive_skb+0x230/0x240 net/core/dev.c:4725
       tun_rx_batched drivers/net/tun.c:1555 [inline]
       tun_get_user+0x6d88/0x7580 drivers/net/tun.c:1962
       tun_chr_write_iter+0x1d4/0x330 drivers/net/tun.c:1990
       do_iter_readv_writev+0x7bb/0x970 include/linux/fs.h:1776
       do_iter_write+0x30d/0xd40 fs/read_write.c:932
       vfs_writev fs/read_write.c:977 [inline]
       do_writev+0x3c9/0x830 fs/read_write.c:1012
       SYSC_writev+0x9b/0xb0 fs/read_write.c:1085
       SyS_writev+0x56/0x80 fs/read_write.c:1082
       do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ac91ff2a
    • Eric Dumazet's avatar
      soreuseport: initialise timewait reuseport field · 56680486
      Eric Dumazet authored
      commit 3099a529 upstream.
      
      syzbot reported an uninit-value in inet_csk_bind_conflict() [1]
      
      It turns out we never propagated sk->sk_reuseport into timewait socket.
      
      [1]
      BUG: KMSAN: uninit-value in inet_csk_bind_conflict+0x5f9/0x990 net/ipv4/inet_connection_sock.c:151
      CPU: 1 PID: 3589 Comm: syzkaller008242 Not tainted 4.16.0+ #82
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:17 [inline]
       dump_stack+0x185/0x1d0 lib/dump_stack.c:53
       kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067
       __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676
       inet_csk_bind_conflict+0x5f9/0x990 net/ipv4/inet_connection_sock.c:151
       inet_csk_get_port+0x1d28/0x1e40 net/ipv4/inet_connection_sock.c:320
       inet6_bind+0x121c/0x1820 net/ipv6/af_inet6.c:399
       SYSC_bind+0x3f2/0x4b0 net/socket.c:1474
       SyS_bind+0x54/0x80 net/socket.c:1460
       do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      RIP: 0033:0x4416e9
      RSP: 002b:00007ffce6d15c88 EFLAGS: 00000217 ORIG_RAX: 0000000000000031
      RAX: ffffffffffffffda RBX: 0100000000000000 RCX: 00000000004416e9
      RDX: 000000000000001c RSI: 0000000020402000 RDI: 0000000000000004
      RBP: 0000000000000000 R08: 00000000e6d15e08 R09: 00000000e6d15e08
      R10: 0000000000000004 R11: 0000000000000217 R12: 0000000000009478
      R13: 00000000006cd448 R14: 0000000000000000 R15: 0000000000000000
      
      Uninit was stored to memory at:
       kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline]
       kmsan_save_stack mm/kmsan/kmsan.c:293 [inline]
       kmsan_internal_chain_origin+0x12b/0x210 mm/kmsan/kmsan.c:684
       __msan_chain_origin+0x69/0xc0 mm/kmsan/kmsan_instr.c:521
       tcp_time_wait+0xf17/0xf50 net/ipv4/tcp_minisocks.c:283
       tcp_rcv_state_process+0xebe/0x6490 net/ipv4/tcp_input.c:6003
       tcp_v6_do_rcv+0x11dd/0x1d90 net/ipv6/tcp_ipv6.c:1331
       sk_backlog_rcv include/net/sock.h:908 [inline]
       __release_sock+0x2d6/0x680 net/core/sock.c:2271
       release_sock+0x97/0x2a0 net/core/sock.c:2786
       tcp_close+0x277/0x18f0 net/ipv4/tcp.c:2269
       inet_release+0x240/0x2a0 net/ipv4/af_inet.c:427
       inet6_release+0xaf/0x100 net/ipv6/af_inet6.c:435
       sock_release net/socket.c:595 [inline]
       sock_close+0xe0/0x300 net/socket.c:1149
       __fput+0x49e/0xa10 fs/file_table.c:209
       ____fput+0x37/0x40 fs/file_table.c:243
       task_work_run+0x243/0x2c0 kernel/task_work.c:113
       exit_task_work include/linux/task_work.h:22 [inline]
       do_exit+0x10e1/0x38d0 kernel/exit.c:867
       do_group_exit+0x1a0/0x360 kernel/exit.c:970
       SYSC_exit_group+0x21/0x30 kernel/exit.c:981
       SyS_exit_group+0x25/0x30 kernel/exit.c:979
       do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      Uninit was stored to memory at:
       kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline]
       kmsan_save_stack mm/kmsan/kmsan.c:293 [inline]
       kmsan_internal_chain_origin+0x12b/0x210 mm/kmsan/kmsan.c:684
       __msan_chain_origin+0x69/0xc0 mm/kmsan/kmsan_instr.c:521
       inet_twsk_alloc+0xaef/0xc00 net/ipv4/inet_timewait_sock.c:182
       tcp_time_wait+0xd9/0xf50 net/ipv4/tcp_minisocks.c:258
       tcp_rcv_state_process+0xebe/0x6490 net/ipv4/tcp_input.c:6003
       tcp_v6_do_rcv+0x11dd/0x1d90 net/ipv6/tcp_ipv6.c:1331
       sk_backlog_rcv include/net/sock.h:908 [inline]
       __release_sock+0x2d6/0x680 net/core/sock.c:2271
       release_sock+0x97/0x2a0 net/core/sock.c:2786
       tcp_close+0x277/0x18f0 net/ipv4/tcp.c:2269
       inet_release+0x240/0x2a0 net/ipv4/af_inet.c:427
       inet6_release+0xaf/0x100 net/ipv6/af_inet6.c:435
       sock_release net/socket.c:595 [inline]
       sock_close+0xe0/0x300 net/socket.c:1149
       __fput+0x49e/0xa10 fs/file_table.c:209
       ____fput+0x37/0x40 fs/file_table.c:243
       task_work_run+0x243/0x2c0 kernel/task_work.c:113
       exit_task_work include/linux/task_work.h:22 [inline]
       do_exit+0x10e1/0x38d0 kernel/exit.c:867
       do_group_exit+0x1a0/0x360 kernel/exit.c:970
       SYSC_exit_group+0x21/0x30 kernel/exit.c:981
       SyS_exit_group+0x25/0x30 kernel/exit.c:979
       do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      Uninit was created at:
       kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline]
       kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:188
       kmsan_kmalloc+0x94/0x100 mm/kmsan/kmsan.c:314
       kmem_cache_alloc+0xaab/0xb90 mm/slub.c:2756
       inet_twsk_alloc+0x13b/0xc00 net/ipv4/inet_timewait_sock.c:163
       tcp_time_wait+0xd9/0xf50 net/ipv4/tcp_minisocks.c:258
       tcp_rcv_state_process+0xebe/0x6490 net/ipv4/tcp_input.c:6003
       tcp_v6_do_rcv+0x11dd/0x1d90 net/ipv6/tcp_ipv6.c:1331
       sk_backlog_rcv include/net/sock.h:908 [inline]
       __release_sock+0x2d6/0x680 net/core/sock.c:2271
       release_sock+0x97/0x2a0 net/core/sock.c:2786
       tcp_close+0x277/0x18f0 net/ipv4/tcp.c:2269
       inet_release+0x240/0x2a0 net/ipv4/af_inet.c:427
       inet6_release+0xaf/0x100 net/ipv6/af_inet6.c:435
       sock_release net/socket.c:595 [inline]
       sock_close+0xe0/0x300 net/socket.c:1149
       __fput+0x49e/0xa10 fs/file_table.c:209
       ____fput+0x37/0x40 fs/file_table.c:243
       task_work_run+0x243/0x2c0 kernel/task_work.c:113
       exit_task_work include/linux/task_work.h:22 [inline]
       do_exit+0x10e1/0x38d0 kernel/exit.c:867
       do_group_exit+0x1a0/0x360 kernel/exit.c:970
       SYSC_exit_group+0x21/0x30 kernel/exit.c:981
       SyS_exit_group+0x25/0x30 kernel/exit.c:979
       do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      
      Fixes: da5e3630 ("soreuseport: TCP/IPv4 implementation")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      56680486
    • Eric Dumazet's avatar
      ipv4: fix uninit-value in ip_route_output_key_hash_rcu() · 154ff3e0
      Eric Dumazet authored
      commit d0ea2b12 upstream.
      
      syzbot complained that res.type could be used while not initialized.
      
      Using RTN_UNSPEC as initial value seems better than using garbage.
      
      BUG: KMSAN: uninit-value in __mkroute_output net/ipv4/route.c:2200 [inline]
      BUG: KMSAN: uninit-value in ip_route_output_key_hash_rcu+0x31f0/0x3940 net/ipv4/route.c:2493
      CPU: 1 PID: 12207 Comm: syz-executor0 Not tainted 4.16.0+ #81
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:17 [inline]
       dump_stack+0x185/0x1d0 lib/dump_stack.c:53
       kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067
       __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676
       __mkroute_output net/ipv4/route.c:2200 [inline]
       ip_route_output_key_hash_rcu+0x31f0/0x3940 net/ipv4/route.c:2493
       ip_route_output_key_hash net/ipv4/route.c:2322 [inline]
       __ip_route_output_key include/net/route.h:126 [inline]
       ip_route_output_flow+0x1eb/0x3c0 net/ipv4/route.c:2577
       raw_sendmsg+0x1861/0x3ed0 net/ipv4/raw.c:653
       inet_sendmsg+0x48d/0x740 net/ipv4/af_inet.c:764
       sock_sendmsg_nosec net/socket.c:630 [inline]
       sock_sendmsg net/socket.c:640 [inline]
       SYSC_sendto+0x6c3/0x7e0 net/socket.c:1747
       SyS_sendto+0x8a/0xb0 net/socket.c:1715
       do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      RIP: 0033:0x455259
      RSP: 002b:00007fdc0625dc68 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
      RAX: ffffffffffffffda RBX: 00007fdc0625e6d4 RCX: 0000000000455259
      RDX: 0000000000000000 RSI: 0000000020000040 RDI: 0000000000000013
      RBP: 000000000072bea0 R08: 0000000020000080 R09: 0000000000000010
      R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff
      R13: 00000000000004f7 R14: 00000000006fa7c8 R15: 0000000000000000
      
      Local variable description: ----res.i.i@ip_route_output_flow
      Variable was created at:
       ip_route_output_flow+0x75/0x3c0 net/ipv4/route.c:2576
       raw_sendmsg+0x1861/0x3ed0 net/ipv4/raw.c:653
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      154ff3e0