Skip to content
  1. May 23, 2018
    • Xin Long's avatar
      bonding: do not set slave_dev npinfo before slave_enable_netpoll in bond_enslave · 2ec7570c
      Xin Long authored
      [ Upstream commit ddea788c ]
      
      After Commit 8a8efa22 ("bonding: sync netpoll code with bridge"), it
      would set slave_dev npinfo in slave_enable_netpoll when enslaving a dev
      if bond->dev->npinfo was set.
      
      However now slave_dev npinfo is set with bond->dev->npinfo before calling
      slave_enable_netpoll. With slave_dev npinfo set, __netpoll_setup called
      in slave_enable_netpoll will not call slave dev's .ndo_netpoll_setup().
      It causes that the lower dev of this slave dev can't set its npinfo.
      
      One way to reproduce it:
      
        # modprobe bonding
        # brctl addbr br0
        # brctl addif br0 eth1
        # ifconfig bond0 192.168.122.1/24 up
        # ifenslave bond0 eth2
        # systemctl restart netconsole
        # ifenslave bond0 br0
        # ifconfig eth2 down
        # systemctl restart netconsole
      
      The netpoll won't really work.
      
      This patch is to remove that slave_dev npinfo setting in bond_enslave().
      
      Fixes: 8a8efa22
      
       ("bonding: sync netpoll code with bridge")
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      2ec7570c
    • Karthikeyan Periyasamy's avatar
      Revert "ath10k: send (re)assoc peer command when NSS changed" · e54942db
      Karthikeyan Periyasamy authored
      [ Upstream commit 55cc11da ]
      
      This reverts commit 55884c04
      
      .
      
      When Ath10k is in AP mode and an unassociated STA sends a VHT action frame
      (Operating Mode Notification for the NSS change) periodically to AP this causes
      ath10k to call ath10k_station_assoc() which sends WMI_PEER_ASSOC_CMDID during
      NSS update. Over the time (with a certain client it can happen within 15 mins
      when there are over 500 of these VHT action frames) continuous calls of
      WMI_PEER_ASSOC_CMDID cause firmware to assert due to resource exhaust.
      
      To my knowledge setting WMI_PEER_NSS peer param itself enough to handle NSS
      updates and no need to call ath10k_station_assoc(). So revert the original
      commit from 2014 as it's unclear why the change was really needed.
      Now the firmware assert doesn't happen anymore.
      
      Issue observed in QCA9984 platform with firmware version:10.4-3.5.3-00053.
      This Change tested in QCA9984 with firmware version: 10.4-3.5.3-00053 and
      QCA988x platform with firmware version: 10.2.4-1.0-00036.
      
      Firmware Assert log:
      
      ath10k_pci 0002:01:00.0: firmware crashed! (guid e61f1274-9acd-4c5b-bcca-e032ea6e723c)
      ath10k_pci 0002:01:00.0: qca9984/qca9994 hw1.0 target 0x01000000 chip_id 0x00000000 sub 168c:cafe
      ath10k_pci 0002:01:00.0: kconfig debug 1 debugfs 1 tracing 0 dfs 1 testmode 1
      ath10k_pci 0002:01:00.0: firmware ver 10.4-3.5.3-00053 api 5 features no-p2p,mfp,peer-flow-ctrl,btcoex-param,allows-mesh-bcast crc32 4c56a386
      ath10k_pci 0002:01:00.0: board_file api 2 bmi_id 0:4 crc32 c2271344
      ath10k_pci 0002:01:00.0: htt-ver 2.2 wmi-op 6 htt-op 4 cal otp max-sta 512 raw 0 hwcrypto 1
      ath10k_pci 0002:01:00.0: firmware register dump:
      ath10k_pci 0002:01:00.0: [00]: 0x0000000A 0x000015B3 0x00981E5F 0x00975B31
      ath10k_pci 0002:01:00.0: [04]: 0x00981E5F 0x00060530 0x00000011 0x00446C60
      ath10k_pci 0002:01:00.0: [08]: 0x0042F1FC 0x00458080 0x00000017 0x00000000
      ath10k_pci 0002:01:00.0: [12]: 0x00000009 0x00000000 0x00973ABC 0x00973AD2
      ath10k_pci 0002:01:00.0: [16]: 0x00973AB0 0x00960E62 0x009606CA 0x00000000
      ath10k_pci 0002:01:00.0: [20]: 0x40981E5F 0x004066DC 0x00400000 0x00981E34
      ath10k_pci 0002:01:00.0: [24]: 0x80983B48 0x0040673C 0x000000C0 0xC0981E5F
      ath10k_pci 0002:01:00.0: [28]: 0x80993DEB 0x0040676C 0x00431AB8 0x0045D0C4
      ath10k_pci 0002:01:00.0: [32]: 0x80993E5C 0x004067AC 0x004303C0 0x0045D0C4
      ath10k_pci 0002:01:00.0: [36]: 0x80994AAB 0x004067DC 0x00000000 0x0045D0C4
      ath10k_pci 0002:01:00.0: [40]: 0x809971A0 0x0040681C 0x004303C0 0x00441B00
      ath10k_pci 0002:01:00.0: [44]: 0x80991904 0x0040688C 0x004303C0 0x0045D0C4
      ath10k_pci 0002:01:00.0: [48]: 0x80963AD3 0x00406A7C 0x004303C0 0x009918FC
      ath10k_pci 0002:01:00.0: [52]: 0x80960E80 0x00406A9C 0x0000001F 0x00400000
      ath10k_pci 0002:01:00.0: [56]: 0x80960E51 0x00406ACC 0x00400000 0x00000000
      ath10k_pci 0002:01:00.0: Copy Engine register dump:
      ath10k_pci 0002:01:00.0: index: addr: sr_wr_idx: sr_r_idx: dst_wr_idx: dst_r_idx:
      ath10k_pci 0002:01:00.0: [00]: 0x0004a000 15 15 3 3
      ath10k_pci 0002:01:00.0: [01]: 0x0004a400 17 17 212 213
      ath10k_pci 0002:01:00.0: [02]: 0x0004a800 21 21 20 21
      ath10k_pci 0002:01:00.0: [03]: 0x0004ac00 25 25 27 25
      ath10k_pci 0002:01:00.0: [04]: 0x0004b000 515 515 144 104
      ath10k_pci 0002:01:00.0: [05]: 0x0004b400 28 28 155 156
      ath10k_pci 0002:01:00.0: [06]: 0x0004b800 12 12 12 12
      ath10k_pci 0002:01:00.0: [07]: 0x0004bc00 1 1 1 1
      ath10k_pci 0002:01:00.0: [08]: 0x0004c000 0 0 127 0
      ath10k_pci 0002:01:00.0: [09]: 0x0004c400 1 1 1 1
      ath10k_pci 0002:01:00.0: [10]: 0x0004c800 0 0 0 0
      ath10k_pci 0002:01:00.0: [11]: 0x0004cc00 0 0 0 0
      ath10k_pci 0002:01:00.0: CE[1] write_index 212 sw_index 213 hw_index 0 nentries_mask 0x000001ff
      ath10k_pci 0002:01:00.0: CE[2] write_index 20 sw_index 21 hw_index 0 nentries_mask 0x0000007f
      ath10k_pci 0002:01:00.0: CE[5] write_index 155 sw_index 156 hw_index 0 nentries_mask 0x000001ff
      ath10k_pci 0002:01:00.0: DMA addr: nbytes: meta data: byte swap: gather:
      ath10k_pci 0002:01:00.0: [455]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [456]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [457]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [458]: 0x594a0038 0 0 0 1
      ath10k_pci 0002:01:00.0: [459]: 0x580c0a42 0 0 0 0
      ath10k_pci 0002:01:00.0: [460]: 0x594a0060 0 0 0 1
      ath10k_pci 0002:01:00.0: [461]: 0x580c0c42 0 0 0 0
      ath10k_pci 0002:01:00.0: [462]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [463]: 0x580c0c42 0 0 0 0
      ath10k_pci 0002:01:00.0: [464]: 0x594a0038 0 0 0 1
      ath10k_pci 0002:01:00.0: [465]: 0x580c0a42 0 0 0 0
      ath10k_pci 0002:01:00.0: [466]: 0x594a0060 0 0 0 1
      ath10k_pci 0002:01:00.0: [467]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [468]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [469]: 0x580c1c42 0 0 0 0
      ath10k_pci 0002:01:00.0: [470]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [471]: 0x580c1c42 0 0 0 0
      ath10k_pci 0002:01:00.0: [472]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [473]: 0x580c1c42 0 0 0 0
      ath10k_pci 0002:01:00.0: [474]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [475]: 0x580c0642 0 0 0 0
      ath10k_pci 0002:01:00.0: [476]: 0x594a0038 0 0 0 1
      ath10k_pci 0002:01:00.0: [477]: 0x580c0842 0 0 0 0
      ath10k_pci 0002:01:00.0: [478]: 0x594a0060 0 0 0 1
      ath10k_pci 0002:01:00.0: [479]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [480]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [481]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [482]: 0x594a0038 0 0 0 1
      ath10k_pci 0002:01:00.0: [483]: 0x580c0842 0 0 0 0
      ath10k_pci 0002:01:00.0: [484]: 0x594a0060 0 0 0 1
      ath10k_pci 0002:01:00.0: [485]: 0x580c0642 0 0 0 0
      ath10k_pci 0002:01:00.0: [486]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [487]: 0x580c0642 0 0 0 0
      ath10k_pci 0002:01:00.0: [488]: 0x594a0038 0 0 0 1
      ath10k_pci 0002:01:00.0: [489]: 0x580c0842 0 0 0 0
      ath10k_pci 0002:01:00.0: [490]: 0x594a0060 0 0 0 1
      ath10k_pci 0002:01:00.0: [491]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [492]: 0x58174040 0 1 0 0
      ath10k_pci 0002:01:00.0: [493]: 0x5a946040 0 1 0 0
      ath10k_pci 0002:01:00.0: [494]: 0x59909040 0 1 0 0
      ath10k_pci 0002:01:00.0: [495]: 0x5ae5a040 0 1 0 0
      ath10k_pci 0002:01:00.0: [496]: 0x58096040 0 1 0 0
      ath10k_pci 0002:01:00.0: [497]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [498]: 0x580c0642 0 0 0 0
      ath10k_pci 0002:01:00.0: [499]: 0x5c1e0040 0 1 0 0
      ath10k_pci 0002:01:00.0: [500]: 0x58153040 0 1 0 0
      ath10k_pci 0002:01:00.0: [501]: 0x58129040 0 1 0 0
      ath10k_pci 0002:01:00.0: [502]: 0x5952f040 0 1 0 0
      ath10k_pci 0002:01:00.0: [503]: 0x59535040 0 1 0 0
      ath10k_pci 0002:01:00.0: [504]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [505]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [506]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [507]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [508]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [509]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [510]: 0x594a0010 0 0 0 1
      ath10k_pci 0002:01:00.0: [511]: 0x580c0042 0 0 0 0
      ath10k_pci 0002:01:00.0: [512]: 0x5adcc040 0 1 0 0
      ath10k_pci 0002:01:00.0: [513]: 0x5cf3d040 0 1 0 0
      ath10k_pci 0002:01:00.0: [514]: 0x5c1e9040 64 1 0 0
      ath10k_pci 0002:01:00.0: [515]: 0x00000000 0 0 0 0
      
      Signed-off-by: default avatarKarthikeyan Periyasamy <periyasa@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      e54942db
    • Sahitya Tummala's avatar
      jbd2: fix use after free in kjournald2() · 0759c1c2
      Sahitya Tummala authored
      [ Upstream commit dbfcef6b
      
       ]
      
      Below is the synchronization issue between unmount and kjournald2
      contexts, which results into use after free issue in kjournald2().
      Fix this issue by using journal->j_state_lock to synchronize the
      wait_event() done in journal_kill_thread() and the wake_up() done
      in kjournald2().
      
      TASK 1:
      umount cmd:
         |--jbd2_journal_destroy() {
             |--journal_kill_thread() {
                  write_lock(&journal->j_state_lock);
      	    journal->j_flags |= JBD2_UNMOUNT;
      	    ...
      	    write_unlock(&journal->j_state_lock);
      	    wake_up(&journal->j_wait_commit);	   TASK 2 wakes up here:
      	    					   kjournald2() {
      						     ...
      						     checks JBD2_UNMOUNT flag and calls goto end-loop;
      						     ...
      						     end_loop:
      						       write_unlock(&journal->j_state_lock);
      						       journal->j_task = NULL; --> If this thread gets
      						       pre-empted here, then TASK 1 wait_event will
      						       exit even before this thread is completely
      						       done.
      	    wait_event(journal->j_wait_done_commit, journal->j_task == NULL);
      	    ...
      	    write_lock(&journal->j_state_lock);
      	    write_unlock(&journal->j_state_lock);
      	  }
             |--kfree(journal);
           }
      }
      						       wake_up(&journal->j_wait_done_commit); --> this step
      						       now results into use after free issue.
      						   }
      
      Signed-off-by: default avatarSahitya Tummala <stummala@codeaurora.org>
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      0759c1c2
    • Felix Fietkau's avatar
      ath9k_hw: check if the chip failed to wake up · 858463ce
      Felix Fietkau authored
      [ Upstream commit a34d0a0d
      
       ]
      
      In an RFC patch, Sven Eckelmann and Simon Wunderlich reported:
      
      "QCA 802.11n chips (especially AR9330/AR9340) sometimes end up in a
      state in which a read of AR_CFG always returns 0xdeadbeef.
      This should not happen when when the power_mode of the device is
      ATH9K_PM_AWAKE."
      
      Include the check for the default register state in the existing MAC
      hang check.
      
      Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      858463ce
    • Dmitry Torokhov's avatar
      Input: drv260x - fix initializing overdrive voltage · a4bb62a4
      Dmitry Torokhov authored
      [ Upstream commit 74c82dae
      
       ]
      
      We were accidentally initializing haptics->rated_voltage twice, and did not
      initialize overdrive voltage.
      
      Acked-by: default avatarDan Murphy <dmurphy@ti.com>
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      a4bb62a4
    • Jiri Olsa's avatar
      perf: Return proper values for user stack errors · c4f2582d
      Jiri Olsa authored
      [ Upstream commit 78b562fb
      
       ]
      
      Return immediately when we find issue in the user stack checks. The
      error value could get overwritten by following check for
      PERF_SAMPLE_REGS_INTR.
      
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      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: Stephane Eranian <eranian@google.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: syzkaller-bugs@googlegroups.com
      Cc: x86@kernel.org
      Fixes: 60e2364e ("perf: Add ability to sample machine state on interrupt")
      Link: http://lkml.kernel.org/r/20180415092352.12403-1-jolsa@kernel.org
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      c4f2582d
    • Xiaoming Gao's avatar
      x86/tsc: Prevent 32bit truncation in calc_hpet_ref() · 908282e7
      Xiaoming Gao authored
      [ Upstream commit d3878e16
      
       ]
      
      The TSC calibration code uses HPET as reference. The conversion normalizes
      the delta of two HPET timestamps:
      
          hpetref = ((tshpet1 - tshpet2) * HPET_PERIOD) / 1e6
      
      and then divides the normalized delta of the corresponding TSC timestamps
      by the result to calulate the TSC frequency.
      
          tscfreq = ((tstsc1 - tstsc2 ) * 1e6) / hpetref
      
      This uses do_div() which takes an u32 as the divisor, which worked so far
      because the HPET frequency was low enough that 'hpetref' never exceeded
      32bit.
      
      On Skylake machines the HPET frequency increased so 'hpetref' can exceed
      32bit. do_div() truncates the divisor, which causes the calibration to
      fail.
      
      Use div64_u64() to avoid the problem.
      
      [ tglx: Fixes whitespace mangled patch and rewrote changelog ]
      
      Signed-off-by: default avatarXiaoming Gao <newtongao@tencent.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: stable@vger.kernel.org
      Cc: peterz@infradead.org
      Cc: hpa@zytor.com
      Link: https://lkml.kernel.org/r/38894564-4fc9-b8ec-353f-de702839e44e@gmail.com
      
      
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      908282e7
    • Steve French's avatar
      cifs: do not allow creating sockets except with SMB1 posix exensions · 91c38354
      Steve French authored
      [ Upstream commit 1d0cffa6
      
       ]
      
      RHBZ: 1453123
      
      Since at least the 3.10 kernel and likely a lot earlier we have
      not been able to create unix domain sockets in a cifs share
      when mounted using the SFU mount option (except when mounted
      with the cifs unix extensions to Samba e.g.)
      Trying to create a socket, for example using the af_unix command from
      xfstests will cause :
      BUG: unable to handle kernel NULL pointer dereference at 00000000
      00000040
      
      Since no one uses or depends on being able to create unix domains sockets
      on a cifs share the easiest fix to stop this vulnerability is to simply
      not allow creation of any other special files than char or block devices
      when sfu is used.
      
      Added update to Ronnie's patch to handle a tcon link leak, and
      to address a buf leak noticed by Gustavo and Colin.
      
      Acked-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      CC:  Colin Ian King <colin.king@canonical.com>
      Reviewed-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
      Reported-by: default avatarEryu Guan <eguan@redhat.com>
      Signed-off-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
      Signed-off-by: default avatarSteve French <smfrench@gmail.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      91c38354
    • Amir Goldstein's avatar
      fanotify: fix logic of events on child · 6bc43ca0
      Amir Goldstein authored
      [ Upstream commit 54a307ba ]
      
      When event on child inodes are sent to the parent inode mark and
      parent inode mark was not marked with FAN_EVENT_ON_CHILD, the event
      will not be delivered to the listener process. However, if the same
      process also has a mount mark, the event to the parent inode will be
      delivered regadless of the mount mark mask.
      
      This behavior is incorrect in the case where the mount mark mask does
      not contain the specific event type. For example, the process adds
      a mark on a directory with mask FAN_MODIFY (without FAN_EVENT_ON_CHILD)
      and a mount mark with mask FAN_CLOSE_NOWRITE (without FAN_ONDIR).
      
      A modify event on a file inside that directory (and inside that mount)
      should not create a FAN_MODIFY event, because neither of the marks
      requested to get that event on the file.
      
      Fixes: 1968f5ee
      
       ("fanotify: use both marks when possible")
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      6bc43ca0
    • wangguang's avatar
      ext4: bugfix for mmaped pages in mpage_release_unused_pages() · 697acc5a
      wangguang authored
      [ Upstream commit 4e800c03
      
       ]
      
      Pages clear buffers after ext4 delayed block allocation failed,
      However, it does not clean its pte_dirty flag.
      if the pages unmap ,in cording to the pte_dirty ,
      unmap_page_range may try to call __set_page_dirty,
      
      which may lead to the bugon at
      mpage_prepare_extent_to_map:head = page_buffers(page);.
      
      This patch just call clear_page_dirty_for_io to clean pte_dirty
      at mpage_release_unused_pages for pages mmaped.
      
      Steps to reproduce the bug:
      
      (1) mmap a file in ext4
      	addr = (char *)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED,
      	       	            fd, 0);
      	memset(addr, 'i', 4096);
      
      (2) return EIO at
      
      	ext4_writepages->mpage_map_and_submit_extent->mpage_map_one_extent
      
      which causes this log message to be print:
      
                      ext4_msg(sb, KERN_CRIT,
                              "Delayed block allocation failed for "
                              "inode %lu at logical offset %llu with"
                              " max blocks %u with error %d",
                              inode->i_ino,
                              (unsigned long long)map->m_lblk,
                              (unsigned)map->m_len, -err);
      
      (3)Unmap the addr cause warning at
      
      	__set_page_dirty:WARN_ON_ONCE(warn && !PageUptodate(page));
      
      (4) wait for a minute,then bugon happen.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarwangguang <wangguang03@zte.com>
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      697acc5a
    • Ian Kent's avatar
      autofs: mount point create should honour passed in mode · 5f282f5e
      Ian Kent authored
      [ Upstream commit 1e630665 ]
      
      The autofs file system mkdir inode operation blindly sets the created
      directory mode to S_IFDIR | 0555, ingoring the passed in mode, which can
      cause selinux dac_override denials.
      
      But the function also checks if the caller is the daemon (as no-one else
      should be able to do anything here) so there's no point in not honouring
      the passed in mode, allowing the daemon to set appropriate mode when
      required.
      
      Link: http://lkml.kernel.org/r/152361593601.8051.14014139124905996173.stgit@pluto.themaw.net
      
      
      Signed-off-by: default avatarIan Kent <raven@themaw.net>
      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 avatarSasha Levin <alexander.levin@microsoft.com>
      5f282f5e
    • Al Viro's avatar
      Don't leak MNT_INTERNAL away from internal mounts · af89f8d7
      Al Viro authored
      [ Upstream commit 16a34adb
      
       ]
      
      We want it only for the stuff created by SB_KERNMOUNT mounts, *not* for
      their copies.  As it is, creating a deep stack of bindings of /proc/*/ns/*
      somewhere in a new namespace and exiting yields a stack overflow.
      
      Cc: stable@kernel.org
      Reported-by: default avatarAlexander Aring <aring@mojatatu.com>
      Bisected-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
      Tested-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
      Tested-by: default avatarAlexander Aring <aring@mojatatu.com>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      af89f8d7
    • Al Viro's avatar
      rpc_pipefs: fix double-dput() · 9804f172
      Al Viro authored
      [ Upstream commit 4a3877c4
      
       ]
      
      if we ever hit rpc_gssd_dummy_depopulate() dentry passed to
      it has refcount equal to 1.  __rpc_rmpipe() drops it and
      dput() done after that hits an already freed dentry.
      
      Cc: stable@kernel.org
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      9804f172
    • Al Viro's avatar
      hypfs_kill_super(): deal with failed allocations · 26361574
      Al Viro authored
      [ Upstream commit a24cd490
      
       ]
      
      hypfs_fill_super() might fail to allocate sbi; hypfs_kill_super()
      should not oops on that.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      26361574
    • Al Viro's avatar
      jffs2_kill_sb(): deal with failed allocations · 34d5b428
      Al Viro authored
      [ Upstream commit c66b23c2
      
       ]
      
      jffs2_fill_super() might fail to allocate jffs2_sb_info;
      jffs2_kill_sb() must survive that.
      
      Cc: stable@kernel.org
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      34d5b428
    • Michael Neuling's avatar
      powerpc/eeh: Fix enabling bridge MMIO windows · e494efb0
      Michael Neuling authored
      [ Upstream commit 13a83eac ]
      
      On boot we save the configuration space of PCIe bridges. We do this so
      when we get an EEH event and everything gets reset that we can restore
      them.
      
      Unfortunately we save this state before we've enabled the MMIO space
      on the bridges. Hence if we have to reset the bridge when we come back
      MMIO is not enabled and we end up taking an PE freeze when the driver
      starts accessing again.
      
      This patch forces the memory/MMIO and bus mastering on when restoring
      bridges on EEH. Ideally we'd do this correctly by saving the
      configuration space writes later, but that will have to come later in
      a larger EEH rewrite. For now we have this simple fix.
      
      The original bug can be triggered on a boston machine by doing:
        echo 0x8000000000000000 > /sys/kernel/debug/powerpc/PCI0001/err_injct_outbound
      On boston, this PHB has a PCIe switch on it.  Without this patch,
      you'll see two EEH events, 1 expected and 1 the failure we are fixing
      here. The second EEH event causes the anything under the PHB to
      disappear (i.e. the i40e eth).
      
      With this patch, only 1 EEH event occurs and devices properly recover.
      
      Fixes: 652defed
      
       ("powerpc/eeh: Check PCIe link after reset")
      Cc: stable@vger.kernel.org # v3.11+
      Reported-by: default avatarPridhiviraj Paidipeddi <ppaidipe@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Neuling <mikey@neuling.org>
      Acked-by: default avatarRussell Currey <ruscur@russell.cc>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      e494efb0
    • Matt Redfearn's avatar
      MIPS: memset.S: Fix clobber of v1 in last_fixup · ae397b57
      Matt Redfearn authored
      [ Upstream commit c96eebf0
      
       ]
      
      The label .Llast_fixup\@ is jumped to on page fault within the final
      byte set loop of memset (on < MIPSR6 architectures). For some reason, in
      this fault handler, the v1 register is randomly set to a2 & STORMASK.
      This clobbers v1 for the calling function. This can be observed with the
      following test code:
      
      static int __init __attribute__((optimize("O0"))) test_clear_user(void)
      {
        register int t asm("v1");
        char *test;
        int j, k;
      
        pr_info("\n\n\nTesting clear_user\n");
        test = vmalloc(PAGE_SIZE);
      
        for (j = 256; j < 512; j++) {
          t = 0xa5a5a5a5;
          if ((k = clear_user(test + PAGE_SIZE - 256, j)) != j - 256) {
              pr_err("clear_user (%px %d) returned %d\n", test + PAGE_SIZE - 256, j, k);
          }
          if (t != 0xa5a5a5a5) {
             pr_err("v1 was clobbered to 0x%x!\n", t);
          }
        }
      
        return 0;
      }
      late_initcall(test_clear_user);
      
      Which demonstrates that v1 is indeed clobbered (MIPS64):
      
      Testing clear_user
      v1 was clobbered to 0x1!
      v1 was clobbered to 0x2!
      v1 was clobbered to 0x3!
      v1 was clobbered to 0x4!
      v1 was clobbered to 0x5!
      v1 was clobbered to 0x6!
      v1 was clobbered to 0x7!
      
      Since the number of bytes that could not be set is already contained in
      a2, the andi placing a value in v1 is not necessary and actively
      harmful in clobbering v1.
      
      Reported-by: default avatarJames Hogan <jhogan@kernel.org>
      Signed-off-by: default avatarMatt Redfearn <matt.redfearn@mips.com>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: linux-mips@linux-mips.org
      Cc: stable@vger.kernel.org
      Patchwork: https://patchwork.linux-mips.org/patch/19109/
      
      
      Signed-off-by: default avatarJames Hogan <jhogan@kernel.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      ae397b57
    • Matt Redfearn's avatar
      MIPS: memset.S: Fix return of __clear_user from Lpartial_fixup · 7a368965
      Matt Redfearn authored
      [ Upstream commit daf70d89
      
       ]
      
      The __clear_user function is defined to return the number of bytes that
      could not be cleared. From the underlying memset / bzero implementation
      this means setting register a2 to that number on return. Currently if a
      page fault is triggered within the memset_partial block, the value
      loaded into a2 on return is meaningless.
      
      The label .Lpartial_fixup\@ is jumped to on page fault. In order to work
      out how many bytes failed to copy, the exception handler should find how
      many bytes left in the partial block (andi a2, STORMASK), add that to
      the partial block end address (a2), and subtract the faulting address to
      get the remainder. Currently it incorrectly subtracts the partial block
      start address (t1), which has additionally been clobbered to generate a
      jump target in memset_partial. Fix this by adding the block end address
      instead.
      
      This issue was found with the following test code:
            int j, k;
            for (j = 0; j < 512; j++) {
              if ((k = clear_user(NULL, j)) != j) {
                 pr_err("clear_user (NULL %d) returned %d\n", j, k);
              }
            }
      Which now passes on Creator Ci40 (MIPS32) and Cavium Octeon II (MIPS64).
      
      Suggested-by: default avatarJames Hogan <jhogan@kernel.org>
      Signed-off-by: default avatarMatt Redfearn <matt.redfearn@mips.com>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: linux-mips@linux-mips.org
      Cc: stable@vger.kernel.org
      Patchwork: https://patchwork.linux-mips.org/patch/19108/
      
      
      Signed-off-by: default avatarJames Hogan <jhogan@kernel.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      7a368965
    • Matt Redfearn's avatar
      MIPS: memset.S: EVA & fault support for small_memset · 3895e5a6
      Matt Redfearn authored
      [ Upstream commit 8a8158c8
      
       ]
      
      The MIPS kernel memset / bzero implementation includes a small_memset
      branch which is used when the region to be set is smaller than a long (4
      bytes on 32bit, 8 bytes on 64bit). The current small_memset
      implementation uses a simple store byte loop to write the destination.
      There are 2 issues with this implementation:
      
      1. When EVA mode is active, user and kernel address spaces may overlap.
      Currently the use of the sb instruction means kernel mode addressing is
      always used and an intended write to userspace may actually overwrite
      some critical kernel data.
      
      2. If the write triggers a page fault, for example by calling
      __clear_user(NULL, 2), instead of gracefully handling the fault, an OOPS
      is triggered.
      
      Fix these issues by replacing the sb instruction with the EX() macro,
      which will emit EVA compatible instuctions as required. Additionally
      implement a fault fixup for small_memset which sets a2 to the number of
      bytes that could not be cleared (as defined by __clear_user).
      
      Reported-by: default avatarChuanhua Lei <chuanhua.lei@intel.com>
      Signed-off-by: default avatarMatt Redfearn <matt.redfearn@mips.com>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: linux-mips@linux-mips.org
      Cc: stable@vger.kernel.org
      Patchwork: https://patchwork.linux-mips.org/patch/18975/
      
      
      Signed-off-by: default avatarJames Hogan <jhogan@kernel.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      3895e5a6
    • Rodrigo Rivas Costa's avatar
      HID: hidraw: Fix crash on HIDIOCGFEATURE with a destroyed device · 9c76f2e7
      Rodrigo Rivas Costa authored
      [ Upstream commit a955358d
      
       ]
      
      Doing `ioctl(HIDIOCGFEATURE)` in a tight loop on a hidraw device
      and then disconnecting the device, or unloading the driver, can
      cause a NULL pointer dereference.
      
      When a hidraw device is destroyed it sets 0 to `dev->exist`.
      Most functions check 'dev->exist' before doing its work, but
      `hidraw_get_report()` was missing that check.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarRodrigo Rivas Costa <rodrigorivascosta@gmail.com>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      9c76f2e7
    • David Wang's avatar
      ALSA: hda - New VIA controller suppor no-snoop path · 9d2fbe82
      David Wang authored
      [ Upstream commit af52f998
      
       ]
      
      This patch is used to tell kernel that new VIA HDAC controller also
      support no-snoop path.
      
      [ minor coding style fix by tiwai ]
      
      Signed-off-by: default avatarDavid Wang <davidwang@zhaoxin.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      9d2fbe82
    • Takashi Iwai's avatar
      ALSA: rawmidi: Fix missing input substream checks in compat ioctls · 874ce787
      Takashi Iwai authored
      [ Upstream commit 8a56ef4f
      
       ]
      
      Some rawmidi compat ioctls lack of the input substream checks
      (although they do check only for rfile->output).  This many eventually
      lead to an Oops as NULL substream is passed to the rawmidi core
      functions.
      
      Fix it by adding the proper checks before each function call.
      
      The bug was spotted by syzkaller.
      
      Reported-by: default avatar <syzbot+f7a0348affc3b67bc617@syzkaller.appspotmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      874ce787
    • Fabián Inostroza's avatar
      ALSA: line6: Use correct endpoint type for midi output · 04c18886
      Fabián Inostroza authored
      [ Upstream commit 7ecb46e9 ]
      
      Sending MIDI messages to a PODxt through the USB connection shows
      "usb_submit_urb failed" in dmesg and the message is not received by
      the POD.
      
      The error is caused because in the funcion send_midi_async() in midi.c
      there is a call to usb_sndbulkpipe() for endpoint 3 OUT, but the PODxt
      USB descriptor shows that this endpoint it's an interrupt endpoint.
      
      Patch tested with PODxt only.
      
      [ The bug has been present from the very beginning in the staging
        driver time, but Fixes below points to the commit moving to sound/
        directory so that the fix can be cleanly applied -- tiwai ]
      
      Fixes: 61864d84
      
       ("ALSA: move line6 usb driver into sound/usb")
      Signed-off-by: default avatarFabián Inostroza <fabianinostroza@udec.cl>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      04c18886
    • Paul Parsons's avatar
      drm/radeon: Fix PCIe lane width calculation · c2d4fe84
      Paul Parsons authored
      [ Upstream commit 85e290d9
      
       ]
      
      Two years ago I tried an AMD Radeon E8860 embedded GPU with the drm driver.
      The dmesg output included driver warnings about an invalid PCIe lane width.
      Tracking the problem back led to si_set_pcie_lane_width_in_smc().
      The calculation of the lane widths via ATOM_PPLIB_PCIE_LINK_WIDTH_MASK and
      ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT macros did not increment the resulting
      value, per the comment in pptable.h ("lanes - 1"), and per usage elsewhere.
      Applying the increment silenced the warnings.
      The code has not changed since, so either my analysis was incorrect or the
      bug has gone unnoticed. Hence submitting this as an RFC.
      
      Acked-by: default avatarChristian König <christian.koenig@amd.com>
      Acked-by: default avatarChunming Zhou <david1.zhou@amd.com>
      Signed-off-by: default avatarPaul Parsons <lost.distance@yahoo.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      c2d4fe84
    • Theodore Ts'o's avatar
      ext4: don't allow r/w mounts if metadata blocks overlap the superblock · 176df3e2
      Theodore Ts'o authored
      [ Upstream commit 18db4b4e
      
       ]
      
      If some metadata block, such as an allocation bitmap, overlaps the
      superblock, it's very likely that if the file system is mounted
      read/write, the results will not be pretty.  So disallow r/w mounts
      for file systems corrupted in this particular way.
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      176df3e2
    • Alex Williamson's avatar
      vfio/pci: Virtualize Maximum Read Request Size · ed49ed98
      Alex Williamson authored
      [ Upstream commit cf0d53ba
      
       ]
      
      MRRS defines the maximum read request size a device is allowed to
      make.  Drivers will often increase this to allow more data transfer
      with a single request.  Completions to this request are bound by the
      MPS setting for the bus.  Aside from device quirks (none known), it
      doesn't seem to make sense to set an MRRS value less than MPS, yet
      this is a likely scenario given that user drivers do not have a
      system-wide view of the PCI topology.  Virtualize MRRS such that the
      user can set MRRS >= MPS, but use MPS as the floor value that we'll
      write to hardware.
      
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      ed49ed98
    • Alex Williamson's avatar
      vfio/pci: Virtualize Maximum Payload Size · d805c39a
      Alex Williamson authored
      [ Upstream commit 52318497
      
       ]
      
      With virtual PCI-Express chipsets, we now see userspace/guest drivers
      trying to match the physical MPS setting to a virtual downstream port.
      Of course a lone physical device surrounded by virtual interconnects
      cannot make a correct decision for a proper MPS setting.  Instead,
      let's virtualize the MPS control register so that writes through to
      hardware are disallowed.  Userspace drivers like QEMU assume they can
      write anything to the device and we'll filter out anything dangerous.
      Since mismatched MPS can lead to AER and other faults, let's add it
      to the kernel side rather than relying on userspace virtualization to
      handle it.
      
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Reviewed-by: default avatarEric Auger <eric.auger@redhat.com>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      d805c39a
    • Alex Williamson's avatar
      vfio-pci: Virtualize PCIe & AF FLR · 65cf346b
      Alex Williamson authored
      [ Upstream commit ddf9dc0e
      
       ]
      
      We use a BAR restore trick to try to detect when a user has performed
      a device reset, possibly through FLR or other backdoors, to put things
      back into a working state.  This is important for backdoor resets, but
      we can actually just virtualize the "front door" resets provided via
      PCIe and AF FLR.  Set these bits as virtualized + writable, allowing
      the default write to set them in vconfig, then we can simply check the
      bit, perform an FLR of our own, and clear the bit.  We don't actually
      have the granularity in PCI to specify the type of reset we want to
      do, but generally devices don't implement both PCIe and AF FLR and
      we'll favor these over other types of reset, so we should generally
      lineup.  We do test whether the device provides the requested FLR type
      to stay consistent with hardware capabilities though.
      
      This seems to fix several instance of devices getting into bad states
      with userspace drivers, like dpdk, running inside a VM.
      
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Reviewed-by: default avatarGreg Rose <grose@lightfleet.com>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      65cf346b
    • Takashi Iwai's avatar
      ALSA: pcm: Fix endless loop for XRUN recovery in OSS emulation · 6dab42d4
      Takashi Iwai authored
      [ Upstream commit e15dc99d ]
      
      The commit 02a5d692 ("ALSA: pcm: Avoid potential races between OSS
      ioctls and read/write") split the PCM preparation code to a locked
      version, and it added a sanity check of runtime->oss.prepare flag
      along with the change.  This leaded to an endless loop when the stream
      gets XRUN: namely, snd_pcm_oss_write3() and co call
      snd_pcm_oss_prepare() without setting runtime->oss.prepare flag and
      the loop continues until the PCM state reaches to another one.
      
      As the function is supposed to execute the preparation
      unconditionally, drop the invalid state check there.
      
      The bug was triggered by syzkaller.
      
      Fixes: 02a5d692
      
       ("ALSA: pcm: Avoid potential races between OSS ioctls and read/write")
      Reported-by: default avatar <syzbot+150189c103427d31a053@syzkaller.appspotmail.com>
      Reported-by: default avatar <syzbot+7e3f31a52646f939c052@syzkaller.appspotmail.com>
      Reported-by: default avatar <syzbot+4f2016cf5185da7759dc@syzkaller.appspotmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      6dab42d4
    • Takashi Iwai's avatar
      ALSA: pcm: Fix mutex unbalance in OSS emulation ioctls · e9650576
      Takashi Iwai authored
      [ Upstream commit f6d297df ]
      
      The previous fix 40cab6e8 ("ALSA: pcm: Return -EBUSY for OSS
      ioctls changing busy streams") introduced some mutex unbalance; the
      check of runtime->oss.rw_ref was inserted in a wrong place after the
      mutex lock.
      
      This patch fixes the inconsistency by rewriting with the helper
      functions to lock/unlock parameters with the stream check.
      
      Fixes: 40cab6e8
      
       ("ALSA: pcm: Return -EBUSY for OSS ioctls changing busy streams")
      Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      e9650576
    • Takashi Iwai's avatar
      ALSA: pcm: Return -EBUSY for OSS ioctls changing busy streams · 151fafd9
      Takashi Iwai authored
      [ Upstream commit 40cab6e8
      
       ]
      
      OSS PCM stream management isn't modal but it allows ioctls issued at
      any time for changing the parameters.  In the previous hardening
      patch ("ALSA: pcm: Avoid potential races between OSS ioctls and
      read/write"), we covered these races and prevent the corruption by
      protecting the concurrent accesses via params_lock mutex.  However,
      this means that some ioctls that try to change the stream parameter
      (e.g. channels or format) would be blocked until the read/write
      finishes, and it may take really long.
      
      Basically changing the parameter while reading/writing is an invalid
      operation, hence it's even more user-friendly from the API POV if it
      returns -EBUSY in such a situation.
      
      This patch adds such checks in the relevant ioctls with the addition
      of read/write access refcount.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      151fafd9
    • Takashi Iwai's avatar
      ALSA: pcm: Avoid potential races between OSS ioctls and read/write · d6a12e6f
      Takashi Iwai authored
      [ Upstream commit 02a5d692
      
       ]
      
      Although we apply the params_lock mutex to the whole read and write
      operations as well as snd_pcm_oss_change_params(), we may still face
      some races.
      
      First off, the params_lock is taken inside the read and write loop.
      This is intentional for avoiding the too long locking, but it allows
      the in-between parameter change, which might lead to invalid
      pointers.  We check the readiness of the stream and set up via
      snd_pcm_oss_make_ready() at the beginning of read and write, but it's
      called only once, by assuming that it remains ready in the rest.
      
      Second, many ioctls that may change the actual parameters
      (i.e. setting runtime->oss.params=1) aren't protected, hence they can
      be processed in a half-baked state.
      
      This patch is an attempt to plug these holes.  The stream readiness
      check is moved inside the read/write inner loop, so that the stream is
      always set up in a proper state before further processing.  Also, each
      ioctl that may change the parameter is wrapped with the params_lock
      for avoiding the races.
      
      The issues were triggered by syzkaller in a few different scenarios,
      particularly the one below appearing as GPF in loopback_pos_update.
      
      Reported-by: default avatar <syzbot+c4227aec125487ec3efa@syzkaller.appspotmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      d6a12e6f
    • Takashi Iwai's avatar
      ALSA: pcm: Use ERESTARTSYS instead of EINTR in OSS emulation · 596e639d
      Takashi Iwai authored
      [ Upstream commit c64ed5dd
      
       ]
      
      Fix the last standing EINTR in the whole subsystem.  Use more correct
      ERESTARTSYS for pending signals.
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      596e639d
    • Nicholas Mc Guire's avatar
      ALSA: oss: consolidate kmalloc/memset 0 call to kzalloc · 9ef1bdb4
      Nicholas Mc Guire authored
      [ Upstream commit 46325371
      
       ]
      
      This is an API consolidation only. The use of kmalloc + memset to 0
      is equivalent to kzalloc.
      
      Signed-off-by: default avatarNicholas Mc Guire <hofrat@osadl.org>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      9ef1bdb4
    • Igor Pylypiv's avatar
      watchdog: f71808e_wdt: Fix WD_EN register read · de1b242c
      Igor Pylypiv authored
      [ Upstream commit 977f6f68
      
       ]
      
      F71808FG_FLAG_WD_EN defines bit position, not a bitmask
      
      Signed-off-by: default avatarIgor Pylypiv <igor.pylypiv@gmail.com>
      Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      de1b242c
    • Richard Genoud's avatar
      clk: mvebu: armada-38x: add support for missing clocks · 99cd2b0b
      Richard Genoud authored
      [ Upstream commit 6a4a4595 ]
      
      Clearfog boards can come with a CPU clocked at 1600MHz (commercial)
      or 1333MHz (industrial).
      
      They have also some dip-switches to select a different clock (666, 800,
      1066, 1200).
      
      The funny thing is that the recovery button is on the MPP34 fq selector.
      So, when booting an industrial board with this button down, the frequency
      666MHz is selected (and the kernel didn't boot).
      
      This patch add all the missing clocks.
      
      The only mode I didn't test is 2GHz (uboot found 4294MHz instead :/ ).
      
      Fixes: 0e85aece ("clk: mvebu: add clock support for Armada 380/385")
      Cc: <stable@vger.kernel.org> # 3.16.x: 9593f4f5
      
      : clk: mvebu: armada-38x: add support for 1866MHz variants
      Cc: <stable@vger.kernel.org> # 3.16.x
      
      Signed-off-by: default avatarRichard Genoud <richard.genoud@gmail.com>
      Acked-by: default avatarGregory CLEMENT <gregory.clement@bootlin.com>
      Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      99cd2b0b
    • Ralph Sennhauser's avatar
      clk: mvebu: armada-38x: add support for 1866MHz variants · 2fc339ab
      Ralph Sennhauser authored
      [ Upstream commit 9593f4f5
      
       ]
      
      The Linksys WRT3200ACM CPU is clocked at 1866MHz. Add 1866MHz to the
      list of supported CPU frequencies. Also update multiplier and divisor
      for the l2clk and ddrclk.
      
      Noticed by the following warning:
      [    0.000000] Selected CPU frequency (16) unsupported
      
      Signed-off-by: default avatarRalph Sennhauser <ralph.sennhauser@gmail.com>
      Reviewed-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
      Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      2fc339ab
    • Alex Smith's avatar
      mmc: jz4740: Fix race condition in IRQ mask update · 20644921
      Alex Smith authored
      [ Upstream commit a04f0017 ]
      
      A spinlock is held while updating the internal copy of the IRQ mask,
      but not while writing it to the actual IMASK register. After the lock
      is released, an IRQ can occur before the IMASK register is written.
      If handling this IRQ causes the mask to be changed, when the handler
      returns back to the middle of the first mask update, a stale value
      will be written to the mask register.
      
      If this causes an IRQ to become unmasked that cannot have its status
      cleared by writing a 1 to it in the IREG register, e.g. the SDIO IRQ,
      then we can end up stuck with the same IRQ repeatedly being fired but
      not handled. Normally the MMC IRQ handler attempts to clear any
      unexpected IRQs by writing IREG, but for those that cannot be cleared
      in this way then the IRQ will just repeatedly fire.
      
      This was resulting in lockups after a while of using Wi-Fi on the
      CI20 (GitHub issue #19).
      
      Resolve by holding the spinlock until after the IMASK register has
      been updated.
      
      Cc: stable@vger.kernel.org
      Link: https://github.com/MIPS/CI20_linux/issues/19
      Fixes: 61bfbdb8
      
       ("MMC: Add support for the controller on JZ4740 SoCs.")
      Tested-by: default avatarMathieu Malaterre <malat@debian.org>
      Signed-off-by: default avatarAlex Smith <alex.smith@imgtec.com>
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      20644921
    • Krzysztof Mazur's avatar
      um: Use POSIX ucontext_t instead of struct ucontext · c2a49e5b
      Krzysztof Mazur authored
      [ Upstream commit 4d1a535b
      
       ]
      
      glibc 2.26 removed the 'struct ucontext' to "improve" POSIX compliance
      and break programs, including User Mode Linux. Fix User Mode Linux
      by using POSIX ucontext_t.
      
      This fixes:
      
      arch/um/os-Linux/signal.c: In function 'hard_handler':
      arch/um/os-Linux/signal.c:163:22: error: dereferencing pointer to incomplete type 'struct ucontext'
        mcontext_t *mc = &uc->uc_mcontext;
      arch/x86/um/stub_segv.c: In function 'stub_segv_handler':
      arch/x86/um/stub_segv.c:16:13: error: dereferencing pointer to incomplete type 'struct ucontext'
                &uc->uc_mcontext);
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarKrzysztof Mazur <krzysiek@podlesie.net>
      Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      c2a49e5b
    • Maxime Jayat's avatar
      dmaengine: at_xdmac: fix rare residue corruption · ea4ec900
      Maxime Jayat authored
      [ Upstream commit c5637476 ]
      
      Despite the efforts made to correctly read the NDA and CUBC registers,
      the order in which the registers are read could sometimes lead to an
      inconsistent state.
      
      Re-using the timeline from the comments, this following timing of
      registers reads could lead to reading NDA with value "@desc2" and
      CUBC with value "MAX desc1":
      
       INITD --------                    ------------
                    |____________________|
             _______________________  _______________
       NDA       @desc2             \/   @desc3
             _______________________/\_______________
             __________  ___________  _______________
       CUBC       0    \/ MAX desc1 \/  MAX desc2
             __________/\___________/\_______________
              |  |          |  |
      Events:(1)(2)        (3)(4)
      
      (1) check_nda = @desc2
      (2) initd = 1
      (3) cur_ubc = MAX desc1
      (4) cur_nda = @desc2
      
      This is allowed by the condition ((check_nda == cur_nda) && initd),
      despite cur_ubc and cur_nda being in the precise state we don't want.
      
      This error leads to incorrect residue computation.
      
      Fix it by inversing the order in which CUBC and INITD are read. This
      makes sure that NDA and CUBC are always read together either _before_
      INITD goes to 0 or _after_ it is back at 1.
      The case where NDA is read before INITD is at 0 and CUBC is read after
      INITD is back at 1 will be rejected by check_nda and cur_nda being
      different.
      
      Fixes: 53398f48
      
       ("dmaengine: at_xdmac: fix residue corruption")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMaxime Jayat <maxime.jayat@mobile-devices.fr>
      Acked-by: default avatarLudovic Desroches <ludovic.desroches@microchip.com>
      Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
      Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
      ea4ec900