1. 12 Sep, 2014 40 commits
    • Dan Carpenter's avatar
      ALSA: ak4xx-adda: info leak in ak4xxx_capture_source_info() · 15813d5a
      Dan Carpenter authored
      "idx" is controled by the user and can be a negative offset into the
      input_names[] array.
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      
      (cherry picked from commit bd5fe738)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      15813d5a
    • Sarah Sharp's avatar
      xhci: Don't enable/disable RWE on bus suspend/resume. · 5e796710
      Sarah Sharp authored
      The RWE bit of the USB 2.0 PORTPMSC register is supposed to enable
      remote wakeup for devices in the lower power link state L1.  It has
      nothing to do with the device suspend remote wakeup from L2.  The RWE
      bit is designed to be set once (when USB 2.0 LPM is enabled for the
      port) and cleared only when USB 2.0 LPM is disabled for the port.
      
      The xHCI bus suspend method was setting the RWE bit erroneously, and the
      bus resume method was clearing it.  The xHCI 1.0 specification with
      errata up to Aug 12, 2012 says in section 4.23.5.1.1.1 "Hardware
      Controlled LPM":
      
      "While Hardware USB2 LPM is enabled, software shall not modify the
      HIRDBESL or RWE fields of the USB2 PORTPMSC register..."
      
      If we have previously enabled USB 2.0 LPM for a device, that means when
      the USB 2.0 bus is resumed, we violate the xHCI specification by
      clearing RWE.  It also means that after a bus resume, the host would
      think remote wakeup is disabled from L1 for ports with USB 2.0 Link PM
      enabled, which is not what we want.
      
      This patch should be backported to kernels as old as 3.2, that
      contain the commit 65580b43 "xHCI: set
      USB2 hardware LPM".  That was the first kernel that supported USB 2.0
      Link PM.
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@vger.kernel.org
      
      (cherry picked from commit f217c980)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      5e796710
    • Takashi Iwai's avatar
      ALSA: hda - Add Conexant CX20751/2/3/4 codec support · 98b5a9fe
      Takashi Iwai authored
      These are almost compatible with the older Conexant codecs.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      
      (cherry picked from commit 61d648fb)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      98b5a9fe
    • Alan Stern's avatar
      USB: EHCI: bugfix: urb->hcpriv should not be NULL · 6f28501b
      Alan Stern authored
      This patch (as1632b) fixes a bug in ehci-hcd.  The USB core uses
      urb->hcpriv to determine whether or not an URB is active; host
      controller drivers are supposed to set this pointer to a non-NULL
      value when an URB is queued.  However ehci-hcd sets it to NULL for
      isochronous URBs, which defeats the check in usbcore.
      
      In itself this isn't a big deal.  But people have recently found that
      certain sequences of actions will cause the snd-usb-audio driver to
      reuse URBs without waiting for them to complete.  In the absence of
      proper checking by usbcore, the URBs get added to their endpoint list
      twice.  This leads to list corruption and a system freeze.
      
      The patch makes ehci-hcd assign a meaningful value to urb->hcpriv for
      isochronous URBs.  Improving robustness always helps.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Reported-by: default avatarArtem S. Tashkinov <t.artem@lycos.com>
      Reported-by: default avatarChristof Meerwald <cmeerw@cmeerw.org>
      CC: <stable@vger.kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      (cherry picked from commit 2656a9ab)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      6f28501b
    • Sujith Manoharan's avatar
      ath9k: Fix noisefloor calibration · 86b07585
      Sujith Manoharan authored
      The commits,
      
      "ath9k: Fix regression in channelwidth switch at the same channel"
      "ath9k: Fix invalid noisefloor reading due to channel update"
      
      attempted to fix noisefloor calibration when a channel switch
      happens due to HT20/HT40 bandwidth change. This is causing invalid
      readings resulting in messages like:
      
      "ath: phy16: NF[0] (-45) > MAX (-95), correcting to MAX".
      
      This results in an incorrect noise being used initially for reporting
      the signal level of received packets, until NF calibration is done
      and the history buffer is updated via the ANI timer, which happens
      much later.
      
      When a bandwidth change happens, it is appropriate to reset
      the internal history data for the channel. Do this correctly in the
      reset() routine by checking the "chanmode" variable.
      
      Cc: stable@vger.kernel.org
      Cc: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
      Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      
      (cherry picked from commit 696df785)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      86b07585
    • Arnd Bergmann's avatar
      ARM: w90x900: fix legacy assembly syntax · 96177bdb
      Arnd Bergmann authored
      New ARM binutils don't allow extraneous whitespace inside
      of brackets, which causes this error on all mach-w90x900
      defconfigs:
      
      arch/arm/kernel/entry-armv.S: Assembler messages:
      arch/arm/kernel/entry-armv.S:214: Error: ARM register expected -- `ldr r0,[ r6,#(0x10C)]'
      arch/arm/kernel/entry-armv.S:214: Error: ARM register expected -- `ldr r0,[ r6,#(0x110)]'
      arch/arm/kernel/entry-armv.S:430: Error: ARM register expected -- `ldr r0,[ r6,#(0x10C)]'
      arch/arm/kernel/entry-armv.S:430: Error: ARM register expected -- `ldr r0,[ r6,#(0x110)]'
      
      This removes the whitespace in order to build the kernel
      again.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: Wan ZongShun <mcuos.com@gmail.com>
      
      (cherry picked from commit fa5ce5f9)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      96177bdb
    • Nicholas Santos's avatar
      HID: usbhid: quirk for Formosa IR receiver · 11a5ea0a
      Nicholas Santos authored
      Patch to add the Formosa Industrial Computing, Inc. Infrared Receiver
      [IR605A/Q] to hid-ids.h and hid-quirks.c.  This IR receiver causes about a 10
      second timeout when the usbhid driver attempts to initialze the device.  Adding
      this device to the quirks list with HID_QUIRK_NO_INIT_REPORTS removes the
      delay.
      Signed-off-by: default avatarNicholas Santos <nicholas.santos@gmail.com>
      [jkosina@suse.cz: fix ordering]
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      
      (cherry picked from commit 320cde19)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      11a5ea0a
    • Paul Moore's avatar
      selinux: correctly label /proc inodes in use before the policy is loaded · 012fdcc7
      Paul Moore authored
      This patch is based on an earlier patch by Eric Paris, he describes
      the problem below:
      
        "If an inode is accessed before policy load it will get placed on a
         list of inodes to be initialized after policy load.  After policy
         load we call inode_doinit() which calls inode_doinit_with_dentry()
         on all inodes accessed before policy load.  In the case of inodes
         in procfs that means we'll end up at the bottom where it does:
      
           /* Default to the fs superblock SID. */
           isec->sid = sbsec->sid;
      
           if ((sbsec->flags & SE_SBPROC) && !S_ISLNK(inode->i_mode)) {
                   if (opt_dentry) {
                           isec->sclass = inode_mode_to_security_class(...)
                           rc = selinux_proc_get_sid(opt_dentry,
                                                     isec->sclass,
                                                     &sid);
                           if (rc)
                                   goto out_unlock;
                           isec->sid = sid;
                   }
           }
      
         Since opt_dentry is null, we'll never call selinux_proc_get_sid()
         and will leave the inode labeled with the label on the superblock.
         I believe a fix would be to mimic the behavior of xattrs.  Look
         for an alias of the inode.  If it can't be found, just leave the
         inode uninitialized (and pick it up later) if it can be found, we
         should be able to call selinux_proc_get_sid() ..."
      
      On a system exhibiting this problem, you will notice a lot of files in
      /proc with the generic "proc_t" type (at least the ones that were
      accessed early in the boot), for example:
      
         # ls -Z /proc/sys/kernel/shmmax | awk '{ print $4 " " $5 }'
         system_u:object_r:proc_t:s0 /proc/sys/kernel/shmmax
      
      However, with this patch in place we see the expected result:
      
         # ls -Z /proc/sys/kernel/shmmax | awk '{ print $4 " " $5 }'
         system_u:object_r:sysctl_kernel_t:s0 /proc/sys/kernel/shmmax
      
      Cc: Eric Paris <eparis@redhat.com>
      Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
      Acked-by: default avatarEric Paris <eparis@redhat.com>
      
      selinux: put the mmap() DAC controls before the MAC controls
      
      It turns out that doing the SELinux MAC checks for mmap() before the
      DAC checks was causing users and the SELinux policy folks headaches
      as users were seeing a lot of SELinux AVC denials for the
      memprotect:mmap_zero permission that would have also been denied by
      the normal DAC capability checks (CAP_SYS_RAWIO).
      
      Example:
      
       # cat mmap_test.c
        #include <stdlib.h>
        #include <stdio.h>
        #include <errno.h>
        #include <sys/mman.h>
      
        int main(int argc, char *argv[])
        {
              int rc;
              void *mem;
      
              mem = mmap(0x0, 4096,
                         PROT_READ | PROT_WRITE,
                         MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
              if (mem == MAP_FAILED)
                      return errno;
              printf("mem = %p\n", mem);
              munmap(mem, 4096);
      
              return 0;
        }
       # gcc -g -O0 -o mmap_test mmap_test.c
       # ./mmap_test
       mem = (nil)
       # ausearch -m AVC | grep mmap_zero
       type=AVC msg=audit(...): avc:  denied  { mmap_zero }
         for pid=1025 comm="mmap_test"
         scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
         tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
         tclass=memprotect
      
      This patch corrects things so that when the above example is run by a
      user without CAP_SYS_RAWIO the SELinux AVC is no longer generated as
      the DAC capability check fails before the SELinux permission check.
      Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
      Acked-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      
      selinux: fix the output of ./scripts/get_maintainer.pl for SELinux
      
      Correctly tag the SELinux mailing list as moderated for non-subscribers
      and do some shuffling of the SELinux maintainers to try and make things
      more clear when the scripts/get_maintainer.pl script is used.
      
       # ./scripts/get_maintainer.pl -f security/selinux
       Paul Moore <paul@paul-moore.com> (supporter:SELINUX SECURITY...)
       Stephen Smalley <sds@tycho.nsa.gov> (supporter:SELINUX SECURITY...)
       Eric Paris <eparis@parisplace.org> (supporter:SELINUX SECURITY...)
       James Morris <james.l.morris@oracle.com> (supporter:SECURITY SUBSYSTEM)
       selinux@tycho.nsa.gov (moderated list:SELINUX SECURITY...)
       linux-security-module@vger.kernel.org (open list:SECURITY SUBSYSTEM)
       linux-kernel@vger.kernel.org (open list)
      
      Cc: Stephen Smalley <sds@tycho.nsa.gov>
      Cc: Eric Paris <eparis@parisplace.org>
      Cc: James Morris <james.l.morris@oracle.com>
      Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
      
      Merge branch 'next-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity into next
      
      evm: enable key retention service automatically
      
      If keys are not enabled, EVM is not visible in the configuration menu.
      It may be difficult to figure out what to do unless you really know.
      Other subsystems as NFS, CIFS select keys automatically. This patch does
      the same.
      
      This patch also removes '(TRUSTED_KEYS=y || TRUSTED_KEYS=n)' dependency,
      which is unnecessary. EVM does not depend on trusted keys, but on
      encrypted keys. evm.h provides compile time dependency.
      Signed-off-by: default avatarDmitry Kasatkin <d.kasatkin@samsung.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      ima: skip memory allocation for empty files
      
      Memory allocation is unnecessary for empty files.
      This patch calculates the hash without memory allocation.
      Signed-off-by: default avatarDmitry Kasatkin <d.kasatkin@samsung.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      evm: EVM does not use MD5
      
      EVM does not use MD5 HMAC. Selection of CRYPTO_MD5 can be safely removed.
      Signed-off-by: default avatarDmitry Kasatkin <d.kasatkin@samsung.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      ima: return d_name.name if d_path fails
      
      This is a small refactoring so ima_d_path() returns dentry name
      if path reconstruction fails. It simplifies callers actions
      and removes code duplication.
      Signed-off-by: default avatarDmitry Kasatkin <d.kasatkin@samsung.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      integrity: fix checkpatch errors
      
      Between checkpatch changes (eg. sizeof) and inconsistencies between
      Lindent and checkpatch, unfixed checkpatch errors make it difficult
      to see new errors. This patch fixes them. Some lines with over 80 chars
      remained unchanged to improve code readability.
      
      The "extern" keyword is removed from internal evm.h to make it consistent
      with internal ima.h.
      Signed-off-by: default avatarDmitry Kasatkin <d.kasatkin@samsung.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      ima: fix erroneous removal of security.ima xattr
      
      ima_inode_post_setattr() calls ima_must_appraise() to check if the
      file needs to be appraised. If it does not then it removes security.ima
      xattr. With original policy matching code it might happen that even
      file needs to be appraised with FILE_CHECK hook, it might not be
      for POST_SETATTR hook. 'security.ima' might be erronously removed.
      
      This patch treats POST_SETATTR as special wildcard function and will
      cause ima_must_appraise() to be true if any of the hooks rules matches.
      security.ima will not be removed if any of the hooks would require
      appraisal.
      Signed-off-by: default avatarDmitry Kasatkin <d.kasatkin@samsung.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      security: integrity: Use a more current logging style
      
      Convert printks to pr_<level>.
      Add pr_fmt.
      Remove embedded prefixes.
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      MAINTAINERS: email updates and other misc. changes
      
      Changes for Trusted/Encrypted keys, EVM, and IMA.
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      ima: reduce memory usage when a template containing the n field is used
      
      Before this change, to correctly calculate the template digest for the
      'ima' template, the event name field (id: 'n') length was set to the fixed
      size of 256 bytes.
      
      This patch reduces the length of the event name field to the string
      length incremented of one (to make room for the termination character '\0')
      and handles the specific case of the digest calculation for the 'ima'
      template directly in ima_calc_field_array_hash_tfm().
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      ima: restore the original behavior for sending data with ima template
      
      With the new template mechanism introduced in IMA since kernel 3.13,
      the format of data sent through the binary_runtime_measurements interface
      is slightly changed. Now, for a generic measurement, the format of
      template data (after the template name) is:
      
      template_len | field1_len | field1 | ... | fieldN_len | fieldN
      
      In addition, fields containing a string now include the '\0' termination
      character.
      
      Instead, the format for the 'ima' template should be:
      
      SHA1 digest | event name length | event name
      
      It must be noted that while in the IMA 3.13 code 'event name length' is
      'IMA_EVENT_NAME_LEN_MAX + 1' (256 bytes), so that the template digest
      is calculated correctly, and 'event name' contains '\0', in the pre 3.13
      code 'event name length' is exactly the string length and 'event name'
      does not contain the termination character.
      
      The patch restores the behavior of the IMA code pre 3.13 for the 'ima'
      template so that legacy userspace tools obtain a consistent behavior
      when receiving data from the binary_runtime_measurements interface
      regardless of which kernel version is used.
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
      Cc: <stable@vger.kernel.org> # 3.3.13: 3ce1217 ima: define template fields library
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      Integrity: Pass commname via get_task_comm()
      
      When we pass task->comm to audit_log_untrustedstring(), we need to pass it
      via get_task_comm() because task->comm can be changed to contain untrusted
      string by other threads after audit_log_untrustedstring() confirmed that
      task->comm does not contain untrusted string.
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      fs: move i_readcount
      
      On a 64-bit system, a hole exists in the 'inode' structure after
      i_writecount.  This patch moves i_readcount to fill this hole.
      Reported-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      Acked-by: default avatarDavid Howells <dhowells@redhat.com>
      
      ima: use static const char array definitions
      
      A const char pointer allocates memory for a pointer as well as for
      a string,  This patch replaces a number of the const char pointers
      throughout IMA, with a static const char array.
      Suggested-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      Acked-by: default avatarDavid Howells <dhowells@redhat.com>
      
      security: have cap_dentry_init_security return error
      
      Currently, cap_dentry_init_security returns 0 without actually
      initializing the security label. This confuses its only caller
      (nfs4_label_init_security) which expects an error in that situation, and
      causes it to end up sending out junk onto the wire instead of simply
      suppressing the label in the attributes sent.
      
      When CONFIG_SECURITY is disabled, security_dentry_init_security returns
      -EOPNOTSUPP. Have cap_dentry_init_security do the same.
      Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
      Acked-by: default avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      
      selinux: correctly label /proc inodes in use before the policy is loaded
      
      This patch is based on an earlier patch by Eric Paris, he describes
      the problem below:
      
        "If an inode is accessed before policy load it will get placed on a
         list of inodes to be initialized after policy load.  After policy
         load we call inode_doinit() which calls inode_doinit_with_dentry()
         on all inodes accessed before policy load.  In the case of inodes
         in procfs that means we'll end up at the bottom where it does:
      
           /* Default to the fs superblock SID. */
           isec->sid = sbsec->sid;
      
           if ((sbsec->flags & SE_SBPROC) && !S_ISLNK(inode->i_mode)) {
                   if (opt_dentry) {
                           isec->sclass = inode_mode_to_security_class(...)
                           rc = selinux_proc_get_sid(opt_dentry,
                                                     isec->sclass,
                                                     &sid);
                           if (rc)
                                   goto out_unlock;
                           isec->sid = sid;
                   }
           }
      
         Since opt_dentry is null, we'll never call selinux_proc_get_sid()
         and will leave the inode labeled with the label on the superblock.
         I believe a fix would be to mimic the behavior of xattrs.  Look
         for an alias of the inode.  If it can't be found, just leave the
         inode uninitialized (and pick it up later) if it can be found, we
         should be able to call selinux_proc_get_sid() ..."
      
      On a system exhibiting this problem, you will notice a lot of files in
      /proc with the generic "proc_t" type (at least the ones that were
      accessed early in the boot), for example:
      
         # ls -Z /proc/sys/kernel/shmmax | awk '{ print $4 " " $5 }'
         system_u:object_r:proc_t:s0 /proc/sys/kernel/shmmax
      
      However, with this patch in place we see the expected result:
      
         # ls -Z /proc/sys/kernel/shmmax | awk '{ print $4 " " $5 }'
         system_u:object_r:sysctl_kernel_t:s0 /proc/sys/kernel/shmmax
      
      Cc: Eric Paris <eparis@redhat.com>
      Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
      Acked-by: default avatarEric Paris <eparis@redhat.com>
      
      ima: new helper: file_inode(file)
      
      Replace "file->f_dentry->d_inode" with the new file_inode() helper
      function.
      Signed-off-by: default avatarLibo Chen <clbchenlibo.chen@huawei.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      kernel: Mark function as static in kernel/seccomp.c
      
      Mark function as static in kernel/seccomp.c because it is not used
      outside this file.
      
      This eliminates the following warning in kernel/seccomp.c:
      kernel/seccomp.c:296:6: warning: no previous prototype for ?seccomp_attach_user_filter? [-Wmissing-prototypes]
      Signed-off-by: default avatarRashika Kheria <rashika.kheria@gmail.com>
      Reviewed-by: default avatarJosh Triplett <josh@joshtriplett.org>
      Acked-by: default avatarKees Cook <keescook@chromium.org>
      Acked-by: default avatarWill Drewry <wad@chromium.org>
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      
      capability: Use current logging styles
      
      Prefix logging output with "capability: " via pr_fmt.
      Convert printks to pr_<level>.
      Use pr_<level>_once instead of guard flags.
      Coalesce formats.
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Acked-by: default avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      
      security: cleanup Makefiles to use standard syntax for specifying sub-directories
      
      The Makefiles in security/ uses a non-standard way to
      specify sub-directories for building.
      
      Fix it up so the normal (and documented) approach is used.
      Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Cc: Michal Marek <mmarek@suse.cz>
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      
      selinux: fix the output of ./scripts/get_maintainer.pl for SELinux
      
      Correctly tag the SELinux mailing list as moderated for non-subscribers
      and do some shuffling of the SELinux maintainers to try and make things
      more clear when the scripts/get_maintainer.pl script is used.
      
       # ./scripts/get_maintainer.pl -f security/selinux
       Paul Moore <paul@paul-moore.com> (supporter:SELINUX SECURITY...)
       Stephen Smalley <sds@tycho.nsa.gov> (supporter:SELINUX SECURITY...)
       Eric Paris <eparis@parisplace.org> (supporter:SELINUX SECURITY...)
       James Morris <james.l.morris@oracle.com> (supporter:SECURITY SUBSYSTEM)
       selinux@tycho.nsa.gov (moderated list:SELINUX SECURITY...)
       linux-security-module@vger.kernel.org (open list:SECURITY SUBSYSTEM)
       linux-kernel@vger.kernel.org (open list)
      
      Cc: Eric Paris <eparis@parisplace.org>
      Acked-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      
      security: replace strict_strto*() with kstrto*()
      
      The usage of strict_strto*() is not preferred, because
      strict_strto*() is obsolete. Thus, kstrto*() should be
      used.
      Signed-off-by: default avatarJingoo Han <jg1.han@samsung.com>
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      
      Merge branch 'master' of git://git.infradead.org/users/pcmoore/selinux into next
      
      Merge branch 'master' of git://git.infradead.org/users/pcmoore/selinux into next
      
      Conflicts:
      	security/selinux/hooks.c
      
      Resolved using request struct.
      Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
      
      tpm/tpm-sysfs: active_show() can be static
      
      so we make it static
      
      CC: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
      CC: Peter Huewe <peterhuewe@gmx.de>
      Signed-off-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: tpm_tis: Fix compile problems with CONFIG_PM_SLEEP/CONFIG_PNP
      
      If CONFIG_PM_SLEEP=n, CONFIG_PNP=y we get this warning:
      
      drivers/char/tpm/tpm_tis.c:706:13: warning: 'tpm_tis_reenable_interrupts' defined but not used [-Wunused-function]
      
      This seems to have been introduced in a2fa3fb0 'tpm: convert tpm_tis driver
      to use dev_pm_ops from legacy pm_ops'
      
      Also, unpon reviewing, the #ifdefs around tpm_tis_pm are not right, the first
      reference is protected, the second is not. tpm_tis_pm is always defined so we
      can drop the #ifdef.
      Signed-off-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: Make tpm-dev allocate a per-file structure
      
      This consolidates everything that is only used within tpm-dev.c
      into tpm-dev.c and out of the publicly visible struct tpm_chip.
      
      The per-file allocation lays the ground work for someday fixing the
      strange forced O_EXCL behaviour of the current code.
      Signed-off-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Reviewed-by: default avatarJoel Schopp <jschopp@linux.vnet.ibm.com>
      Reviewed-by: default avatarAshley Lai <adlai@linux.vnet.ibm.com>
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: Use the ops structure instead of a copy in tpm_vendor_specific
      
      This builds on the last commit to use the ops structure in the core
      and reduce the size of tpm_vendor_specific.
      Signed-off-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Reviewed-by: default avatarJoel Schopp <jschopp@linux.vnet.ibm.com>
      Reviewed-by: default avatarAshley Lai <adlai@linux.vnet.ibm.com>
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: Create a tpm_class_ops structure and use it in the drivers
      
      This replaces the static initialization of a tpm_vendor_specific
      structure in the drivers with the standard Linux idiom of providing
      a const structure of function pointers.
      Signed-off-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Reviewed-by: default avatarJoel Schopp <jschopp@linux.vnet.ibm.com>
      Reviewed-by: default avatarAshley Lai <adlai@linux.vnet.ibm.com>
      [phuewe: did apply manually due to commit
      191ffc6bde3 tpm/tpm_i2c_atmel: fix coccinelle warnings]
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: Pull all driver sysfs code into tpm-sysfs.c
      
      The tpm core now sets up and controls all sysfs attributes, instead
      of having each driver have a unique take on it.
      
      All drivers now now have a uniform set of attributes, and no sysfs
      related entry points are exported from the tpm core module.
      
      This also uses the new method used to declare sysfs attributes
      with DEVICE_ATTR_RO and 'struct attribute *'
      Signed-off-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      [phuewe: had to apply the tpm_i2c_atmel part manually due to commit
      191ffc6bde3fc tpm/tpm_i2c_atmel: fix coccinelle warnings]
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: Move sysfs functions from tpm-interface to tpm-sysfs
      
      CLASS-sysfs.c is a common idiom for linux subsystems.
      
      This is the first step to pulling all the sysfs support code from
      the drivers into tpm-sysfs. This is a plain text copy from tpm-interface
      with support changes to make it compile.
      
      _tpm_pcr_read is made non-static and is called tpm_pcr_read_dev.
      Signed-off-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: Pull everything related to /dev/tpmX into tpm-dev.c
      
      CLASS-dev.c is a common idiom for Linux subsystems
      
      This pulls all the code related to the miscdev into tpm-dev.c and makes it
      static. The identical file_operation structs in the drivers are purged and the
      tpm common code unconditionally creates the miscdev.
      Signed-off-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Reviewed-by: default avatarJoel Schopp <jschopp@linux.vnet.ibm.com>
      Reviewed-by: default avatarAshley Lai <adlai@linux.vnet.ibm.com>
      [phuewe:
      tpm_dev_release is now used only in this file, thus the EXPORT_SYMBOL
      can be dropped and the function be marked as static.
      It has no other in-kernel users]
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      char: tpm: nuvoton: remove unused variable
      
      “wait” wait queue is defined but never used in the function, thus
      it can be removed.
      Signed-off-by: default avatarMichal Nazarewicz <mina86@mina86.com>
      Acked-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm: MAINTAINERS: Cleanup TPM Maintainers file
      
      - removing stale/inactive maintainers
      - removing stale/outdated website
      - regrouped maintainers
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm/tpm_i2c_atmel: fix coccinelle warnings
      
      drivers/char/tpm/tpm_i2c_atmel.c:178:8-9: WARNING: return of 0/1 in function 'i2c_atmel_req_canceled' with return type bool
      
       Return statements in functions returning bool should use
       true/false instead of 1/0.
      Generated by: coccinelle/misc/boolreturn.cocci
      
      CC: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
      CC: Peter Huewe <peterhuewe@gmx.de>
      Acked-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
      Signed-off-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm/tpm_ibmvtpm: fix unreachable code warning (smatch warning)
      
      smatch complains:
      drivers/char/tpm/tpm_ibmvtpm.c:510
      ibmvtpm_crq_process() info: ignoring unreachable code.
      
      -> The return is not necessary here, remove it
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm/tpm_i2c_stm_st33: Check return code of get_burstcount
      
      The 'get_burstcount' function can in some circumstances 'return -EBUSY' which
      in tpm_stm_i2c_send is stored in an 'u32 burstcnt'
      thus converting the signed value into an unsigned value, resulting
      in 'burstcnt' being huge.
      Changing the type to u32 only does not solve the problem as the signed
      value is converted to an unsigned in I2C_WRITE_DATA, resulting in the
      same effect.
      
      Thus
      -> Change type of burstcnt to u32 (the return type of get_burstcount)
      -> Add a check for the return value of 'get_burstcount' and propagate a
      potential error.
      
      This makes also sense in the 'I2C_READ_DATA' case, where the there is no
      signed/unsigned conversion.
      
      found by coverity
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm/tpm_ppi: Check return value of acpi_get_name
      
      If
       status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
      fails for whatever reason and does not return AE_OK
       if (strstr(buffer.pointer, context) != NULL) {
      does dereference a null pointer.
      
      -> Check the return value and return the status to the caller
      
      Found by coverity
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      tpm/tpm_ppi: Do not compare strcmp(a,b) == -1
      
      Depending on the implementation strcmp might return the difference between
      two strings not only -1,0,1 consequently
       if (strcmp (a,b) == -1)
      might lead to taking the wrong branch
      
      -> compare with < 0  instead,
      which in any case is more canonical.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
      
      Merge to v3.13-rc7 for prerequisite changes in the Xen code for TPM
      
      ima: remove unneeded size_limit argument from ima_eventdigest_init_common()
      
      This patch removes the 'size_limit' argument from
      ima_eventdigest_init_common(). Since the 'd' field will never include
      the hash algorithm as prefix and the 'd-ng' will always have it, we can
      use the hash algorithm to differentiate the two cases in the modified
      function (it is equal to HASH_ALGO__LAST in the first case, the opposite
      in the second).
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      ima: update IMA-templates.txt documentation
      
      Patch "ima: extend the measurement list to include the file signature"
      defined a new field called 'sig' and a new template called 'ima-sig'.
      This patch updates the Documentation/security/IMA-templates.txt.
      
      Changelog:
       - fixed formatting issues (Roberto Sassu)
      Reported-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
      
      ima: pass HASH_ALGO__LAST as hash algo in ima_eventdigest_init()
      
      Replace the '-1' value with HASH_ALGO__LAST in ima_eventdigest_init()
      as the called function ima_eventdigest_init_common() expects an unsigned
      char.
      
      Fix commit:
        4d7aeee ima: define new template ima-ng and template fields d-ng and n-ng
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      ima: change the default hash algorithm to SHA1 in ima_eventdigest_ng_init()
      
      Replace HASH_ALGO__LAST with HASH_ALGO_SHA1 as the initial value of
      the hash algorithm so that the prefix 'sha1:' is added to violation
      digests.
      
      Fix commit:
        4d7aeee ima: define new template ima-ng and template fields d-ng and n-ng
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
      Cc: <stable@vger.kernel.org> # 3.13.x
      Signed-off-by: default avatarMimi Zohar <zohar@linux.vnet.ibm.com>
      
      Smack: File receive audit correction
      
      Eric Paris politely points out:
      
          Inside smack_file_receive() it seems like you are initting the audit
          field with LSM_AUDIT_DATA_TASK.  And then use
          smk_ad_setfield_u_fs_path().
      
          Seems like LSM_AUDIT_DATA_PATH would make more sense.  (and depending
          on how it's used fix a crash...)
      
      He is correct. This puts things in order.
      
      Targeted for git://git.gitorious.org/smack-next/kernel.gitSigned-off-by: default avatarCasey Schaufler <casey@schaufler-ca.com>
      
      Smack: Rationalize mount restrictions
      
      The mount restrictions imposed by Smack rely heavily on the
      use of the filesystem "floor", which is the label that all
      processes writing to the filesystem must have access to. It
      turns out that while the "floor" notion is sound, it has yet
      to be fully implemented and has never been used.
      
      The sb_mount and sb_umount hooks only make sense if the
      filesystem floor is used actively, and it isn't. They can
      be reintroduced if a rational restriction comes up. Until
      then, they get removed.
      
      The sb_kern_mount hook is required for the option processing.
      It is too permissive in the case of unprivileged mounts,
      effectively bypassing the CAP_MAC_ADMIN restrictions if
      any of the smack options are specified. Unprivileged mounts
      are no longer allowed to set Smack filesystem options.
      Additionally, the root and default values are set to the
      label of the caller, in keeping with the policy that objects
      get the label of their creator.
      
      Targeted for git://git.gitorious.org/smack-next/kernel.gitSigned-off-by: default avatarCasey Schaufler <casey@schaufler-ca.com>
      
      Smack: change rule cap check
      
      smk_write_change_rule() is calling capable rather than
      the more correct smack_privileged(). This allows for setting
      rules in violation of the onlycap facility. This is the
      simple repair.
      
      Targeted for git://git.gitorious.org/smack-next/kernel.gitSigned-off-by: default avatarCasey Schaufler <casey@schaufler-ca.com>
      
      Smack: Make the syslog control configurable
      
      The syslog control requires that the calling proccess
      have the floor ("_") Smack label. Tizen does not run any
      processes except for kernel helpers with the floor label.
      This changes allows the admin to configure a specific
      label for syslog. The default value is the star ("*")
      label, effectively removing the restriction. The value
      can be set using smackfs/syslog for anyone who wants
      a more restrictive behavior.
      
      Targeted for git://git.gitorious.org/smack-next/kernel.gitSigned-off-by: default avatarCasey Schaufler <casey@schaufler-ca.com>
      
      Smack: Prevent the * and @ labels from being used in SMACK64EXEC
      
      Smack prohibits processes from using the star ("*") and web ("@") labels
      because we don't want files with those labels getting created implicitly.
      All setting of those labels should be done explicitly. The trouble is that
      there is no check for these labels in the processing of SMACK64EXEC. That
      is repaired.
      
      Targeted for git://git.gitorious.org/smack-next/kernel.gitSigned-off-by: default avatarCasey Schaufler <casey@schaufler-ca.com>
      
      smack: fix: allow either entry be missing on access/access2 check (v2)
      
      This is a regression caused by f7112e6c. When either subject or
      object is not found the answer for access should be no. This
      patch fixes the situation. '0' is written back instead of failing
      with -EINVAL.
      
      v2: cosmetic style fixes
      Signed-off-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
      
      (cherry picked from commit f64410ec
      eee30946)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      012fdcc7
    • Konstantin Khlebnikov's avatar
      ipc/msg: fix race around refcount · da2562d1
      Konstantin Khlebnikov authored
      [fixed differently in 6062a8dc upstream.]
      
      In older kernels (before v3.10) ipc_rcu_hdr->refcount was non-atomic int.
      There was possuble double-free bug: do_msgsnd() calls ipc_rcu_putref() under
      msq->q_perm->lock and RCU, while freequeue() calls it while it holds only
      'rw_mutex', so there is no sinchronization between them. Two function
      decrements '2' non-atomically, they both can get '0' as result.
      
      do_msgsnd()					freequeue()
      
      msq = msg_lock_check(ns, msqid);
      ...
      ipc_rcu_getref(msq);
      msg_unlock(msq);
      schedule();
      						(caller locks spinlock)
      						expunge_all(msq, -EIDRM);
      						ss_wakeup(&msq->q_senders, 1);
      						msg_rmid(ns, msq);
      						msg_unlock(msq);
      ipc_lock_by_ptr(&msq->q_perm);
      ipc_rcu_putref(msq);				ipc_rcu_putref(msq);
      < both may get get --(...)->refcount == 0 >
      
      This patch locks ipc_lock and RCU around ipc_rcu_putref in freequeue.
      ( RCU protects memory for spin_unlock() )
      
      Similar bugs might be in other users of ipc_rcu_putref().
      
      In the mainline this has been fixed in v3.10 indirectly in commmit
      6062a8dc
      ("ipc,sem: fine grained locking for semtimedop") by Rik van Riel.
      That commit optimized locking and converted refcount into atomic.
      
      I'm not sure that anybody should care about this bug: it's very-very unlikely
      and no longer exists in actual mainline. I've found this just by looking into
      the code, probably this never happens in real life.
      Signed-off-by: default avatarKonstantin Khlebnikov <k.khlebnikov@samsung.com>
      (cherry picked from commit 79dd68bf)
      
      (cherry picked from commit HEAD)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      da2562d1
    • Sarah Sharp's avatar
      xhci: Fix resume issues on Renesas chips in Samsung laptops · 3b488dda
      Sarah Sharp authored
      commit 1aa9578c upstream.
      
      Don Zickus <dzickus@redhat.com> writes:
      
      Some co-workers of mine bought Samsung laptops that had mostly usb3 ports.
      Those ports did not resume correctly (the driver would timeout communicating
      and fail).  This led to frustration as suspend/resume is a common use for
      laptops.
      
      Poking around, I applied the reset on resume quirk to this chipset and the
      resume started working.  Reloading the xhci_hcd module had been the temporary
      workaround.
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Reported-by: default avatarDon Zickus <dzickus@redhat.com>
      Tested-by: default avatarPrarit Bhargava <prarit@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      (cherry picked from commit ebaacf5c)
      3b488dda
    • Marcelo Tosatti's avatar
      KVM: VMX: fix use after free of vmx->loaded_vmcs · 2d092a44
      Marcelo Tosatti authored
      After free_loaded_vmcs executes, the "loaded_vmcs" structure
      is kfreed, and now vmx->loaded_vmcs points to a kfreed area.
      Subsequent free_loaded_vmcs then attempts to manipulate
      vmx->loaded_vmcs.
      
      Switch the order to avoid the problem.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1047892Reviewed-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
      Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
      
      (cherry picked from commit 26a865f4)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      2d092a44
    • Marcelo Tosatti's avatar
      KVM: MMU: handle invalid root_hpa at __direct_map · 50302159
      Marcelo Tosatti authored
      It is possible for __direct_map to be called on invalid root_hpa
      (-1), two examples:
      
      1) try_async_pf -> can_do_async_pf
          -> vmx_interrupt_allowed -> nested_vmx_vmexit
      2) vmx_handle_exit -> vmx_interrupt_allowed -> nested_vmx_vmexit
      
      Then to load_vmcs12_host_state and kvm_mmu_reset_context.
      
      Check for this possibility, let fault exception be regenerated.
      
      BZ: https://bugzilla.redhat.com/show_bug.cgi?id=924916Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      
      (cherry picked from commit 989c6b34)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      50302159
    • Rob Herring's avatar
      ARM: move outer_cache declaration out of ifdef · 806c0c84
      Rob Herring authored
      Move the outer_cache declaration of the CONFIG_OUTER_CACHE ifdef so that
      outer_cache can be used inside IS_ENABLED condition.
      Signed-off-by: default avatarRob Herring <rob.herring@calxeda.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      
      (cherry picked from commit 0b53c11d)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      806c0c84
    • Dan Carpenter's avatar
      p54: clamp properly instead of just truncating · 37d6135a
      Dan Carpenter authored
      The call to clamp_t() first truncates the variable signed 8 bit and as a
      result, the actual clamp is a no-op.
      
      Fixes: 0d78156e ('p54: improve site survey')
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      
      (cherry picked from commit 608cfbe4)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      37d6135a
    • Ben Hutchings's avatar
      deb-pkg: Fix cross-building linux-headers package · 11295ba8
      Ben Hutchings authored
      builddeb generates a control file that says the linux-headers package
      can only be built for the build system primary architecture.  This
      breaks cross-building configurations.  We should use $debarch for this
      instead.
      
      Since $debarch is not yet set when generating the control file, set
      Architecture: any and use control file variables to fill in the
      description.
      
      Fixes: cd8d60a2 ('kbuild: create linux-headers package in deb-pkg')
      Reported-and-tested-by: default avatar"Niew, Sh." <shniew@gmail.com>
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
      
      (cherry picked from commit f8ce239d)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      11295ba8
    • Alexei Starovoitov's avatar
      x86: bpf_jit: support negative offsets · acaf90ef
      Alexei Starovoitov authored
      Commit a998d434 claimed to introduce negative offset support to x86 jit,
      but it couldn't be working, since at the time of the execution
      of LD+ABS or LD+IND instructions via call into
      bpf_internal_load_pointer_neg_helper() the %edx (3rd argument of this func)
      had junk value instead of access size in bytes (1 or 2 or 4).
      
      Store size into %edx instead of %ecx (what original commit intended to do)
      
      Fixes: a998d434 ("bpf jit: Let the x86 jit handle negative offsets")
      Signed-off-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
      Cc: Jan Seiffert <kaffeemonster@googlemail.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Acked-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      
      (cherry picked from commit fdfaf64e)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      acaf90ef
    • Josh Durgin's avatar
      libceph: resend all writes after the osdmap loses the full flag · 41f11bd5
      Josh Durgin authored
      With the current full handling, there is a race between osds and
      clients getting the first map marked full. If the osd wins, it will
      return -ENOSPC to any writes, but the client may already have writes
      in flight. This results in the client getting the error and
      propagating it up the stack. For rbd, the block layer turns this into
      EIO, which can cause corruption in filesystems above it.
      
      To avoid this race, osds are being changed to drop writes that came
      from clients with an osdmap older than the last osdmap marked full.
      In order for this to work, clients must resend all writes after they
      encounter a full -> not full transition in the osdmap. osds will wait
      for an updated map instead of processing a request from a client with
      a newer map, so resent writes will not be dropped by the osd unless
      there is another not full -> full transition.
      
      This approach requires both osds and clients to be fixed to avoid the
      race. Old clients talking to osds with this fix may hang instead of
      returning EIO and potentially corrupting an fs. New clients talking to
      old osds have the same behavior as before if they encounter this race.
      
      Fixes: http://tracker.ceph.com/issues/6938Reviewed-by: default avatarSage Weil <sage@inktank.com>
      Signed-off-by: default avatarJosh Durgin <josh.durgin@inktank.com>
      
      (cherry picked from commit 9a1ea2db)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      41f11bd5
    • Paul E. McKenney's avatar
      jiffies: Avoid undefined behavior from signed overflow · 12c6b66d
      Paul E. McKenney authored
      According to the C standard 3.4.3p3, overflow of a signed integer results
      in undefined behavior.  This commit therefore changes the definitions
      of time_after(), time_after_eq(), time_after64(), and time_after_eq64()
      to avoid this undefined behavior.  The trick is that the subtraction
      is done using unsigned arithmetic, which according to 6.2.5p9 cannot
      overflow because it is defined as modulo arithmetic.  This has the added
      (though admittedly quite small) benefit of shortening four lines of code
      by four characters each.
      
      Note that the C standard considers the cast from unsigned to
      signed to be implementation-defined, see 6.3.1.3p3.  However, on a
      two's-complement system, an implementation that defines anything other
      than a reinterpretation of the bits is free to come to me, and I will be
      happy to act as a witness for its being committed to an insane asylum.
      (Although I have nothing against saturating arithmetic or signals in some
      cases, these things really should not be the default when compiling an
      operating-system kernel.)
      Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: John Stultz <john.stultz@linaro.org>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Eric Dumazet <eric.dumazet@gmail.com>
      Cc: Kevin Easton <kevin@guarana.org>
      [ paulmck: Included time_after64() and time_after_eq64(), as suggested
        by Eric Dumazet, also fixed commit message.]
      Reviewed-by: default avatarJosh Triplett <josh@joshtriplett.org>
      
      (cherry picked from commit 5a581b36)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      12c6b66d
    • Roman Volkov's avatar
      ALSA: oxygen: modify adjust_dg_dac_routing function · b360f3a1
      Roman Volkov authored
      commit 1f91ecc1 upstream.
      
      When selecting the audio output destinations (headphones,
      FP headphones, multichannel output), the channel routing
      should be changed depending on what destination selected.
      Also unnecessary I2S channels are digitally muted. This
      function called when the user selects the destination
      in the ALSA mixer.
      Signed-off-by: default avatarRoman Volkov <v1ron@mail.ru>
      Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      (cherry picked from commit 212b4654)
      b360f3a1
    • Filipe David Borba Manana's avatar
      Btrfs: fix data corruption when reading/updating compressed extents · 34b0f7c0
      Filipe David Borba Manana authored
      When using a mix of compressed file extents and prealloc extents, it
      is possible to fill a page of a file with random, garbage data from
      some unrelated previous use of the page, instead of a sequence of zeroes.
      
      A simple sequence of steps to get into such case, taken from the test
      case I made for xfstests, is:
      
         _scratch_mkfs
         _scratch_mount "-o compress-force=lzo"
         $XFS_IO_PROG -f -c "pwrite -S 0x06 -b 18670 266978 18670" $SCRATCH_MNT/foobar
         $XFS_IO_PROG -c "falloc 26450 665194" $SCRATCH_MNT/foobar
         $XFS_IO_PROG -c "truncate 542872" $SCRATCH_MNT/foobar
         $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foobar
      
      This results in the following file items in the fs tree:
      
         item 4 key (257 INODE_ITEM 0) itemoff 15879 itemsize 160
             inode generation 6 transid 6 size 542872 block group 0 mode 100600
         item 5 key (257 INODE_REF 256) itemoff 15863 itemsize 16
             inode ref index 2 namelen 6 name: foobar
         item 6 key (257 EXTENT_DATA 0) itemoff 15810 itemsize 53
             extent data disk byte 0 nr 0 gen 6
             extent data offset 0 nr 24576 ram 266240
             extent compression 0
         item 7 key (257 EXTENT_DATA 24576) itemoff 15757 itemsize 53
             prealloc data disk byte 12849152 nr 241664 gen 6
             prealloc data offset 0 nr 241664
         item 8 key (257 EXTENT_DATA 266240) itemoff 15704 itemsize 53
             extent data disk byte 12845056 nr 4096 gen 6
             extent data offset 0 nr 20480 ram 20480
             extent compression 2
         item 9 key (257 EXTENT_DATA 286720) itemoff 15651 itemsize 53
             prealloc data disk byte 13090816 nr 405504 gen 6
             prealloc data offset 0 nr 258048
      
      The on disk extent at offset 266240 (which corresponds to 1 single disk block),
      contains 5 compressed chunks of file data. Each of the first 4 compress 4096
      bytes of file data, while the last one only compresses 3024 bytes of file data.
      Therefore a read into the file region [285648 ; 286720[ (length = 4096 - 3024 =
      1072 bytes) should always return zeroes (our next extent is a prealloc one).
      
      The solution here is the compression code path to zero the remaining (untouched)
      bytes of the last page it uncompressed data into, as the information about how
      much space the file data consumes in the last page is not known in the upper layer
      fs/btrfs/extent_io.c:__do_readpage(). In __do_readpage we were correctly zeroing
      the remainder of the page but only if it corresponds to the last page of the inode
      and if the inode's size is not a multiple of the page size.
      
      This would cause not only returning random data on reads, but also permanently
      storing random data when updating parts of the region that should be zeroed.
      For the example above, it means updating a single byte in the region [285648 ; 286720[
      would store that byte correctly but also store random data on disk.
      
      A test case for xfstests follows soon.
      Signed-off-by: default avatarFilipe David Borba Manana <fdmanana@gmail.com>
      Signed-off-by: default avatarChris Mason <clm@fb.com>
      
      (cherry picked from commit a2aa75e1)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      34b0f7c0
    • Marc Kleine-Budde's avatar
      can: flexcan: flexcan_open(): fix error path if flexcan_chip_start() fails · b17cbb1e
      Marc Kleine-Budde authored
      If flexcan_chip_start() in flexcan_open() fails, the interrupt is not freed,
      this patch adds the missing cleanup.
      
      Cc: linux-stable <stable@vger.kernel.org>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      
      (cherry picked from commit 7e9e148a)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      b17cbb1e
    • Tejun Heo's avatar
      firewire: don't use PREPARE_DELAYED_WORK · 67e07286
      Tejun Heo authored
      PREPARE_[DELAYED_]WORK() are being phased out.  They have few users
      and a nasty surprise in terms of reentrancy guarantee as workqueue
      considers work items to be different if they don't have the same work
      function.
      
      firewire core-device and sbp2 have been been multiplexing work items
      with multiple work functions.  Introduce fw_device_workfn() and
      sbp2_lu_workfn() which invoke fw_device->workfn and
      sbp2_logical_unit->workfn respectively and always use the two
      functions as the work functions and update the users to set the
      ->workfn fields instead of overriding work functions using
      PREPARE_DELAYED_WORK().
      
      This fixes a variety of possible regressions since a2c1c57b
      "workqueue: consider work function when searching for busy work items"
      due to which fw_workqueue lost its required non-reentrancy property.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Acked-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
      Cc: linux1394-devel@lists.sourceforge.net
      Cc: stable@vger.kernel.org # v3.9+
      Cc: stable@vger.kernel.org # v3.8.2+
      Cc: stable@vger.kernel.org # v3.4.60+
      Cc: stable@vger.kernel.org # v3.2.40+
      
      (cherry picked from commit 70044d71)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      67e07286
    • Roman Volkov's avatar
      ALSA: oxygen: Xonar DG(X): capture from I2S channel 1, not 2 · bef1e281
      Roman Volkov authored
      Actually CS4245 connected to the I2S channel 1 for
      capture, not channel 2. Otherwise capturing and
      playback does not work for CS4245.
      Signed-off-by: default avatarRoman Volkov <v1ron@mail.ru>
      Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
      
      (cherry picked from commit 3dd77654)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      bef1e281
    • Jan Beulich's avatar
      xen/io/ring.h: new macro to detect whether there are too many requests on the ring · d3de696e
      Jan Beulich authored
      Backends may need to protect themselves against an insane number of
      produced requests stored by a frontend, in case they iterate over
      requests until reaching the req_prod value. There can't be more
      requests on the ring than the difference between produced requests
      and produced (but possibly not yet published) responses.
      
      This is a more strict alternative to a patch previously posted by
      Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>.
      Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
      Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      
      (cherry picked from commit 8d925690)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      d3de696e
    • stephen hemminger's avatar
      xen-netback: fix sparse warning · e0dea847
      stephen hemminger authored
      Fix warning about 0 used as NULL.
      Signed-off-by: default avatarStephen Hemminger <stephen@networkplumber.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      
      (cherry picked from commit 9eaee8be)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      e0dea847
    • Maxim Patlasov's avatar
      fuse: hotfix truncate_pagecache() issue · 204a1feb
      Maxim Patlasov authored
      The way how fuse calls truncate_pagecache() from fuse_change_attributes()
      is completely wrong. Because, w/o i_mutex held, we never sure whether
      'oldsize' and 'attr->size' are valid by the time of execution of
      truncate_pagecache(inode, oldsize, attr->size). In fact, as soon as we
      released fc->lock in the middle of fuse_change_attributes(), we completely
      loose control of actions which may happen with given inode until we reach
      truncate_pagecache. The list of potentially dangerous actions includes
      mmap-ed reads and writes, ftruncate(2) and write(2) extending file size.
      
      The typical outcome of doing truncate_pagecache() with outdated arguments
      is data corruption from user point of view. This is (in some sense)
      acceptable in cases when the issue is triggered by a change of the file on
      the server (i.e. externally wrt fuse operation), but it is absolutely
      intolerable in scenarios when a single fuse client modifies a file without
      any external intervention. A real life case I discovered by fsx-linux
      looked like this:
      
      1. Shrinking ftruncate(2) comes to fuse_do_setattr(). The latter sends
      FUSE_SETATTR to the server synchronously, but before getting fc->lock ...
      2. fuse_dentry_revalidate() is asynchronously called. It sends FUSE_LOOKUP
      to the server synchronously, then calls fuse_change_attributes(). The
      latter updates i_size, releases fc->lock, but before comparing oldsize vs
      attr->size..
      3. fuse_do_setattr() from the first step proceeds by acquiring fc->lock and
      updating attributes and i_size, but now oldsize is equal to
      outarg.attr.size because i_size has just been updated (step 2). Hence,
      fuse_do_setattr() returns w/o calling truncate_pagecache().
      4. As soon as ftruncate(2) completes, the user extends file size by
      write(2) making a hole in the middle of file, then reads data from the hole
      either by read(2) or mmap-ed read. The user expects to get zero data from
      the hole, but gets stale data because truncate_pagecache() is not executed
      yet.
      
      The scenario above illustrates one side of the problem: not truncating the
      page cache even though we should. Another side corresponds to truncating
      page cache too late, when the state of inode changed significantly.
      Theoretically, the following is possible:
      
      1. As in the previous scenario fuse_dentry_revalidate() discovered that
      i_size changed (due to our own fuse_do_setattr()) and is going to call
      truncate_pagecache() for some 'new_size' it believes valid right now. But
      by the time that particular truncate_pagecache() is called ...
      2. fuse_do_setattr() returns (either having called truncate_pagecache() or
      not -- it doesn't matter).
      3. The file is extended either by write(2) or ftruncate(2) or fallocate(2).
      4. mmap-ed write makes a page in the extended region dirty.
      
      The result will be the lost of data user wrote on the fourth step.
      
      The patch is a hotfix resolving the issue in a simplistic way: let's skip
      dangerous i_size update and truncate_pagecache if an operation changing
      file size is in progress. This simplistic approach looks correct for the
      cases w/o external changes. And to handle them properly, more sophisticated
      and intrusive techniques (e.g. NFS-like one) would be required. I'd like to
      postpone it until the issue is well discussed on the mailing list(s).
      
      Changed in v2:
       - improved patch description to cover both sides of the issue.
      Signed-off-by: default avatarMaxim Patlasov <mpatlasov@parallels.com>
      Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
      Cc: stable@vger.kernel.org
      
      (cherry picked from commit 06a7c3c2)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      204a1feb
    • Tejun Heo's avatar
      cgroup: fix RCU accesses to task->cgroups · 9d8f82a2
      Tejun Heo authored
      task->cgroups is a RCU pointer pointing to struct css_set.  A task
      switches to a different css_set on cgroup migration but a css_set
      doesn't change once created and its pointers to cgroup_subsys_states
      aren't RCU protected.
      
      task_subsys_state[_check]() is the macro to acquire css given a task
      and subsys_id pair.  It RCU-dereferences task->cgroups->subsys[] not
      task->cgroups, so the RCU pointer task->cgroups ends up being
      dereferenced without read_barrier_depends() after it.  It's broken.
      
      Fix it by introducing task_css_set[_check]() which does
      RCU-dereference on task->cgroups.  task_subsys_state[_check]() is
      reimplemented to directly dereference ->subsys[] of the css_set
      returned from task_css_set[_check]().
      
      This removes some of sparse RCU warnings in cgroup.
      
      v2: Fixed unbalanced parenthsis and there's no need to use
          rcu_dereference_raw() when !CONFIG_PROVE_RCU.  Both spotted by Li.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Acked-by: default avatarLi Zefan <lizefan@huawei.com>
      Cc: stable@vger.kernel.org
      
      (cherry picked from commit 14611e51)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      9d8f82a2
    • Lai Jiangshan's avatar
      workqueue: ensure @task is valid across kthread_stop() · a2d02587
      Lai Jiangshan authored
      When a kworker should die, the kworkre is notified through WORKER_DIE
      flag instead of kthread_should_stop().  This, IIRC, is primarily to
      keep the test synchronized inside worker_pool lock.  WORKER_DIE is
      first set while holding pool->lock, the lock is dropped and
      kthread_stop() is called.
      
      Unfortunately, this means that there's a slight chance that the target
      kworker may see WORKER_DIE before kthread_stop() finishes and exits
      and frees the target task before or during kthread_stop().
      
      Fix it by pinning the target task before setting WORKER_DIE and
      putting it after kthread_stop() is done.
      
      tj: Improved patch description and comment.  Moved pinning above
          WORKER_DIE for better signify what it's protecting.
      
      CC: stable@vger.kernel.org
      Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      
      (cherry picked from commit 5bdfff96)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      a2d02587
    • Emil Goode's avatar
      usbnet: remove generic hard_header_len check · cd8da30f
      Emil Goode authored
      This patch removes a generic hard_header_len check from the usbnet
      module that is causing dropped packages under certain circumstances
      for devices that send rx packets that cross urb boundaries.
      
      One example is the AX88772B which occasionally send rx packets that
      cross urb boundaries where the remaining partial packet is sent with
      no hardware header. When the buffer with a partial packet is of less
      number of octets than the value of hard_header_len the buffer is
      discarded by the usbnet module.
      
      With AX88772B this can be reproduced by using ping with a packet
      size between 1965-1976.
      
      The bug has been reported here:
      
      https://bugzilla.kernel.org/show_bug.cgi?id=29082
      
      This patch introduces the following changes:
      - Removes the generic hard_header_len check in the rx_complete
        function in the usbnet module.
      - Introduces a ETH_HLEN check for skbs that are not cloned from
        within a rx_fixup callback.
      - For safety a hard_header_len check is added to each rx_fixup
        callback function that could be affected by this change.
        These extra checks could possibly be removed by someone
        who has the hardware to test.
      - Removes a call to dev_kfree_skb_any() and instead utilizes the
        dev->done list to queue skbs for cleanup.
      
      The changes place full responsibility on the rx_fixup callback
      functions that clone skbs to only pass valid skbs to the
      usbnet_skb_return function.
      Signed-off-by: default avatarEmil Goode <emilgoode@gmail.com>
      Reported-by: default avatarIgor Gnatenko <i.gnatenko.brain@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      
      (cherry picked from commit eb85569f)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      cd8da30f
    • Martin Schwidefsky's avatar
      s390: fix kernel crash due to linkage stack instructions · bf204117
      Martin Schwidefsky authored
      The kernel currently crashes with a low-address-protection exception
      if a user space process executes an instruction that tries to use the
      linkage stack. Set the base-ASTE origin and the subspace-ASTE origin
      of the dispatchable-unit-control-table to point to a dummy ASTE.
      Set up control register 15 to point to an empty linkage stack with no
      room left.
      
      A user space process with a linkage stack instruction will still crash
      but with a different exception which is correctly translated to a
      segmentation fault instead of a kernel oops.
      Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
      
      (cherry picked from commit 8d7f6690)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      bf204117
    • Nicholas Bellinger's avatar
      target/file: Re-enable optional fd_buffered_io=1 operation · 009297c3
      Nicholas Bellinger authored
      This patch re-adds the ability to optionally run in buffered FILEIO mode
      (eg: w/o O_DSYNC) for device backends in order to once again use the
      Linux buffered cache as a write-back storage mechanism.
      
      This logic was originally dropped with mainline v3.5-rc commit:
      
      commit a4dff304
      Author: Nicholas Bellinger <nab@linux-iscsi.org>
      Date:   Wed May 30 16:25:41 2012 -0700
      
          target/file: Use O_DSYNC by default for FILEIO backends
      
      This difference with this patch is that fd_create_virtdevice() now
      forces the explicit setting of emulate_write_cache=1 when buffered FILEIO
      operation has been enabled.
      
      (v2: Switch to FDBD_HAS_BUFFERED_IO_WCE + add more detailed
           comment as requested by hch)
      Reported-by: default avatarFerry <iscsitmp@bananateam.nl>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      
      (cherry picked from commit b32f4c7e)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      009297c3
    • Jan Kara's avatar
      IB/qib: Convert qib_user_sdma_pin_pages() to use get_user_pages_fast() · 4bf283ee
      Jan Kara authored
      qib_user_sdma_queue_pkts() gets called with mmap_sem held for
      writing. Except for get_user_pages() deep down in
      qib_user_sdma_pin_pages() we don't seem to need mmap_sem at all.  Even
      more interestingly the function qib_user_sdma_queue_pkts() (and also
      qib_user_sdma_coalesce() called somewhat later) call copy_from_user()
      which can hit a page fault and we deadlock on trying to get mmap_sem
      when handling that fault.
      
      So just make qib_user_sdma_pin_pages() use get_user_pages_fast() and
      leave mmap_sem locking for mm.
      
      This deadlock has actually been observed in the wild when the node
      is under memory pressure.
      
      Cc: <stable@vger.kernel.org>
      Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
      
      (cherry picked from commit 603e7729)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      4bf283ee
    • Steven Rostedt's avatar
      ftrace: Synchronize setting function_trace_op with ftrace_trace_function · cb98c9a6
      Steven Rostedt authored
      ftrace_trace_function is a variable that holds what function will be called
      directly by the assembly code (mcount). If just a single function is
      registered and it handles recursion itself, then the assembly will call that
      function directly without any helper function. It also passes in the
      ftrace_op that was registered with the callback. The ftrace_op to send is
      stored in the function_trace_op variable.
      
      The ftrace_trace_function and function_trace_op needs to be coordinated such
      that the called callback wont be called with the wrong ftrace_op, otherwise
      bad things can happen if it expected a different op. Luckily, there's no
      callback that doesn't use the helper functions that requires this. But
      there soon will be and this needs to be fixed.
      
      Use a set_function_trace_op to store the ftrace_op to set the
      function_trace_op to when it is safe to do so (during the update function
      within the breakpoint or stop machine calls). Or if dynamic ftrace is not
      being used (static tracing) then we have to do a bit more synchronization
      when the ftrace_trace_function is set as that takes affect immediately
      (as oppose to dynamic ftrace doing it with the modification of the trampoline).
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
      
      (cherry picked from commit 405e1d83)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      cb98c9a6
    • Ben Hutchings's avatar
      Staging: speakup: Update __speakup_paste_selection() tty (ab)usage to match vt · eb3520a3
      Ben Hutchings authored
      This function is largely a duplicate of paste_selection() in
      drivers/tty/vt/selection.c, but with its own selection state.  The
      speakup selection mechanism should really be merged with vt.
      
      For now, apply the changes from 'TTY: vt, fix paste_selection ldisc
      handling', 'tty: Make ldisc input flow control concurrency-friendly',
      and 'tty: Fix unsafe vt paste_selection()'.
      
      References: https://bugs.debian.org/735202
      References: https://bugs.debian.org/744015Reported-by: default avatarPaul Gevers <elbrus@debian.org>
      Reported-and-tested-by: default avatarJarek Czekalski <jarekczek@poczta.onet.pl>
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Cc: <stable@vger.kernel.org> # v3.8 but needs backporting for < 3.12
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      (cherry picked from commit 28a821c3)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      eb3520a3
    • Pratyush Anand's avatar
      USB: Fix persist resume of some SS USB devices · 81ad78bf
      Pratyush Anand authored
      Problem Summary: Problem has been observed generally with PM states
      where VBUS goes off during suspend. There are some SS USB devices which
      take longer time for link training compared to many others.  Such
      devices fail to reconnect with same old address which was associated
      with it before suspend.
      
      When system resumes, at some point of time (dpm_run_callback->
      usb_dev_resume->usb_resume->usb_resume_both->usb_resume_device->
      usb_port_resume) SW reads hub status. If device is present,
      then it finishes port resume and re-enumerates device with same
      address. If device is not present then, SW thinks that device was
      removed during suspend and therefore does logical disconnection
      and removes all the resource allocated for this device.
      
      Now, if I put sufficient delay just before root hub status read in
      usb_resume_device then, SW sees always that device is present. In normal
      course(without any delay) SW sees that no device is present and then SW
      removes all resource associated with the device at this port.  In the
      latter case, after sometime, device says that hey I am here, now host
      enumerates it, but with new address.
      
      Problem had been reproduced when I connect verbatim USB3.0 hard disc
      with my STiH407 XHCI host running with 3.10 kernel.
      
      I see that similar problem has been reported here.
      https://bugzilla.kernel.org/show_bug.cgi?id=53211
      Reading above it seems that bug was not in 3.6.6 and was present in 3.8
      and again it was not present for some in 3.12.6, while it was present
      for few others. I tested with 3.13-FC19 running at i686 desktop, problem
      was still there. However, I was failed to reproduce it with 3.16-RC4
      running at same i686 machine. I would say it is just a random
      observation. Problem for few devices is always there, as I am unable to
      find a proper fix for the issue.
      
      So, now question is what should be the amount of delay so that host is
      always able to recognize suspended device after resume.
      
      XHCI specs 4.19.4 says that when Link training is successful, port sets
      CSC bit to 1. So if SW reads port status before successful link
      training, then it will not find device to be present.  USB Analyzer log
      with such buggy devices show that in some cases device switch on the
      RX termination after long delay of host enabling the VBUS. In few other
      cases it has been seen that device fails to negotiate link training in
      first attempt. It has been reported till now that few devices take as
      long as 2000 ms to train the link after host enabling its VBUS and
      RX termination. This patch implements a 2000 ms timeout for CSC bit to set
      ie for link training. If in a case link trains before timeout, loop will
      exit earlier.
      
      This patch implements above delay, but only for SS device and when
      persist is enabled.
      
      So, for the good device overhead is almost none. While for the bad
      devices penalty could be the time which it take for link training.
      But, If a device was connected before suspend, and was removed
      while system was asleep, then the penalty would be the timeout ie
      2000 ms.
      
      Results:
      
      Verbatim USB SS hard disk connected with STiH407 USB host running 3.10
      Kernel resumes in 461 msecs without this patch, but hard disk is
      assigned a new device address. Same system resumes in 790 msecs with
      this patch, but with old device address.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarPratyush Anand <pratyush.anand@st.com>
      Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      (cherry picked from commit a40178b2)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      81ad78bf
    • David S. Miller's avatar
      sparc64: Guard against flushing openfirmware mappings. · b5a0551c
      David S. Miller authored
      Based almost entirely upon a patch by Christopher Alexander Tobias
      Schulze.
      
      In commit db64fe02 ("mm: rewrite vmap
      layer") lazy VMAP tlb flushing was added to the vmalloc layer.  This
      causes problems on sparc64.
      
      Sparc64 has two VMAP mapped regions and they are not contiguous with
      eachother.  First we have the malloc mapping area, then another
      unrelated region, then the vmalloc region.
      
      This "another unrelated region" is where the firmware is mapped.
      
      If the lazy TLB flushing logic in the vmalloc code triggers after
      we've had both a module unload and a vfree or similar, it will pass an
      address range that goes from somewhere inside the malloc region to
      somewhere inside the vmalloc region, and thus covering the
      openfirmware area entirely.
      
      The sparc64 kernel learns about openfirmware's dynamic mappings in
      this region early in the boot, and then services TLB misses in this
      area.  But openfirmware has some locked TLB entries which are not
      mentioned in those dynamic mappings and we should thus not disturb
      them.
      
      These huge lazy TLB flush ranges causes those openfirmware locked TLB
      entries to be removed, resulting in all kinds of problems including
      hard hangs and crashes during reboot/reset.
      
      Besides causing problems like this, such huge TLB flush ranges are
      also incredibly inefficient.  A plea has been made with the author of
      the VMAP lazy TLB flushing code, but for now we'll put a safety guard
      into our flush_tlb_kernel_range() implementation.
      
      Since the implementation has become non-trivial, stop defining it as a
      macro and instead make it a function in a C source file.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      
      (cherry picked from commit 4ca9a237)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      b5a0551c
    • David S. Miller's avatar
      sparc64: Do not insert non-valid PTEs into the TSB hash table. · f33d6d0a
      David S. Miller authored
      The assumption was that update_mmu_cache() (and the equivalent for PMDs) would
      only be called when the PTE being installed will be accessible by the user.
      
      This is not true for code paths originating from remove_migration_pte().
      
      There are dire consequences for placing a non-valid PTE into the TSB.  The TLB
      miss frramework assumes thatwhen a TSB entry matches we can just load it into
      the TLB and return from the TLB miss trap.
      
      So if a non-valid PTE is in there, we will deadlock taking the TLB miss over
      and over, never satisfying the miss.
      
      Just exit early from update_mmu_cache() and friends in this situation.
      
      Based upon a report and patch from Christopher Alexander Tobias Schulze.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      
      (cherry picked from commit 18f38132)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      f33d6d0a
    • Eric Dumazet's avatar
      sctp: fix possible seqlock seadlock in sctp_packet_transmit() · ff74d014
      Eric Dumazet authored
      Dave reported following splat, caused by improper use of
      IP_INC_STATS_BH() in process context.
      
      BUG: using __this_cpu_add() in preemptible [00000000] code: trinity-c117/14551
      caller is __this_cpu_preempt_check+0x13/0x20
      CPU: 3 PID: 14551 Comm: trinity-c117 Not tainted 3.16.0+ #33
       ffffffff9ec898f0 0000000047ea7e23 ffff88022d32f7f0 ffffffff9e7ee207
       0000000000000003 ffff88022d32f818 ffffffff9e397eaa ffff88023ee70b40
       ffff88022d32f970 ffff8801c026d580 ffff88022d32f828 ffffffff9e397ee3
      Call Trace:
       [<ffffffff9e7ee207>] dump_stack+0x4e/0x7a
       [<ffffffff9e397eaa>] check_preemption_disabled+0xfa/0x100
       [<ffffffff9e397ee3>] __this_cpu_preempt_check+0x13/0x20
       [<ffffffffc0839872>] sctp_packet_transmit+0x692/0x710 [sctp]
       [<ffffffffc082a7f2>] sctp_outq_flush+0x2a2/0xc30 [sctp]
       [<ffffffff9e0d985c>] ? mark_held_locks+0x7c/0xb0
       [<ffffffff9e7f8c6d>] ? _raw_spin_unlock_irqrestore+0x5d/0x80
       [<ffffffffc082b99a>] sctp_outq_uncork+0x1a/0x20 [sctp]
       [<ffffffffc081e112>] sctp_cmd_interpreter.isra.23+0x1142/0x13f0 [sctp]
       [<ffffffffc081c86b>] sctp_do_sm+0xdb/0x330 [sctp]
       [<ffffffff9e0b8f1b>] ? preempt_count_sub+0xab/0x100
       [<ffffffffc083b350>] ? sctp_cname+0x70/0x70 [sctp]
       [<ffffffffc08389ca>] sctp_primitive_ASSOCIATE+0x3a/0x50 [sctp]
       [<ffffffffc083358f>] sctp_sendmsg+0x88f/0xe30 [sctp]
       [<ffffffff9e0d673a>] ? lock_release_holdtime.part.28+0x9a/0x160
       [<ffffffff9e0d62ce>] ? put_lock_stats.isra.27+0xe/0x30
       [<ffffffff9e73b624>] inet_sendmsg+0x104/0x220
       [<ffffffff9e73b525>] ? inet_sendmsg+0x5/0x220
       [<ffffffff9e68ac4e>] sock_sendmsg+0x9e/0xe0
       [<ffffffff9e1c0c09>] ? might_fault+0xb9/0xc0
       [<ffffffff9e1c0bae>] ? might_fault+0x5e/0xc0
       [<ffffffff9e68b234>] SYSC_sendto+0x124/0x1c0
       [<ffffffff9e0136b0>] ? syscall_trace_enter+0x250/0x330
       [<ffffffff9e68c3ce>] SyS_sendto+0xe/0x10
       [<ffffffff9e7f9be4>] tracesys+0xdd/0xe2
      
      This is a followup of commits f1d8cba6 ("inet: fix possible
      seqlock deadlocks") and 7f88c6b2 ("ipv6: fix possible seqlock
      deadlock in ip6_finish_output2")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
      Reported-by: default avatarDave Jones <davej@redhat.com>
      Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
      Acked-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      
      (cherry picked from commit 757efd32)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      ff74d014
    • H. Peter Anvin's avatar
      x86, espfix: Make espfix64 a Kconfig option, fix UML · 5ab6606d
      H. Peter Anvin authored
      Make espfix64 a hidden Kconfig option.  This fixes the x86-64 UML
      build which had broken due to the non-existence of init_espfix_bsp()
      in UML: since UML uses its own Kconfig, this option does not appear in
      the UML build.
      
      This also makes it possible to make support for 16-bit segments a
      configuration option, for the people who want to minimize the size of
      the kernel.
      Reported-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
      Cc: Richard Weinberger <richard@nod.at>
      Link: http://lkml.kernel.org/r/1398816946-3351-1-git-send-email-hpa@linux.intel.com
      
      (cherry picked from commit 197725de)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      5ab6606d
    • Greg Kroah-Hartman's avatar
      USB: fix build error with CONFIG_PM_RUNTIME disabled · 5bfe28d5
      Greg Kroah-Hartman authored
      commit bdd405d2 ("usb: hub: Prevent hub autosuspend if
      usbcore.autosuspend is -1") causes a build error if CONFIG_PM_RUNTIME is
      disabled.  Fix that by doing a simple #ifdef guard around it.
      Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Reported-by: default avatarkbuild test robot <fengguang.wu@intel.com>
      Cc: Roger Quadros <rogerq@ti.com>
      Cc: Michael Welling <mwelling@emacinc.com>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      (cherry picked from commit a9ef803d)
      Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
      5bfe28d5