Skip to content
  1. Jul 17, 2019
    • Robin Murphy's avatar
      mm: introduce ARCH_HAS_PTE_DEVMAP · 17596731
      Robin Murphy authored
      
      
      ARCH_HAS_ZONE_DEVICE is somewhat meaningless in itself, and combined
      with the long-out-of-date comment can lead to the impression than an
      architecture may just enable it (since __add_pages() now "comprehends
      device memory" for itself) and expect things to work.
      
      In practice, however, ZONE_DEVICE users have little chance of
      functioning correctly without __HAVE_ARCH_PTE_DEVMAP, so let's clean
      that up the same way as ARCH_HAS_PTE_SPECIAL and make it the proper
      dependency so the real situation is clearer.
      
      Link: http://lkml.kernel.org/r/87554aa78478a02a63f2c4cf60a847279ae3eb3b.1558547956.git.robin.murphy@arm.com
      Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
      Acked-by: default avatarDan Williams <dan.j.williams@intel.com>
      Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
      Acked-by: default avatarOliver O'Halloran <oohall@gmail.com>
      Reviewed-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Jerome Glisse <jglisse@redhat.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      17596731
    • Robin Murphy's avatar
      mm: clean up is_device_*_page() definitions · 7588adf8
      Robin Murphy authored
      
      
      Refactor is_device_{public,private}_page() with is_pci_p2pdma_page() to
      make them all consistent in depending on their respective config options
      even when CONFIG_DEV_PAGEMAP_OPS is enabled for other reasons.  This
      allows a little more compile-time optimisation as well as the conceptual
      and cosmetic cleanup.
      
      Link: http://lkml.kernel.org/r/187c2ab27dea70635d375a61b2f2076d26c032b0.1558547956.git.robin.murphy@arm.com
      Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
      Suggested-by: default avatarJerome Glisse <jglisse@redhat.com>
      Reviewed-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Ira Weiny <ira.weiny@intel.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Oliver O'Halloran <oohall@gmail.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7588adf8
    • Aneesh Kumar K.V's avatar
      mm/mmap: move common defines to mman-common.h · 8aa3c927
      Aneesh Kumar K.V authored
      
      
      Two architecture that use arch specific MMAP flags are powerpc and
      sparc.  We still have few flag values common across them and other
      architectures.  Consolidate this in mman-common.h.
      
      Also update the comment to indicate where to find HugeTLB specific
      reserved values
      
      Link: http://lkml.kernel.org/r/20190604090950.31417-1-aneesh.kumar@linux.ibm.com
      Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8aa3c927
    • Aneesh Kumar K.V's avatar
      mm: move MAP_SYNC to asm-generic/mman-common.h · 22fcea6f
      Aneesh Kumar K.V authored
      This enables support for synchronous DAX fault on powerpc
      
      The generic changes are added as part of b6fb293f
      
       ("mm: Define
      MAP_SYNC and VM_SYNC flags")
      
      Without this, mmap returns EOPNOTSUPP for MAP_SYNC with
      MAP_SHARED_VALIDATE
      
      Instead of adding MAP_SYNC with same value to
      arch/powerpc/include/uapi/asm/mman.h, I am moving the #define to
      asm-generic/mman-common.h.  Two architectures using mman-common.h
      directly are sparc and powerpc.  We should be able to consloidate more
      #defines to mman-common.h.  That can be done as a separate patch.
      
      Link: http://lkml.kernel.org/r/20190528091120.13322-1-aneesh.kumar@linux.ibm.com
      Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      22fcea6f
    • Pavel Tatashin's avatar
      device-dax: "Hotremove" persistent memory that is used like normal RAM · 9f960da7
      Pavel Tatashin authored
      
      
      It is now allowed to use persistent memory like a regular RAM, but
      currently there is no way to remove this memory until machine is
      rebooted.
      
      This work expands the functionality to also allows hotremoving
      previously hotplugged persistent memory, and recover the device for use
      for other purposes.
      
      To hotremove persistent memory, the management software must first
      offline all memory blocks of dax region, and than unbind it from
      device-dax/kmem driver.  So, operations should look like this:
      
        echo offline > /sys/devices/system/memory/memoryN/state
        ...
        echo dax0.0 > /sys/bus/dax/drivers/kmem/unbind
      
      Note: if unbind is done without offlining memory beforehand, it won't be
      possible to do dax0.0 hotremove, and dax's memory is going to be part of
      System RAM until reboot.
      
      Link: http://lkml.kernel.org/r/20190517215438.6487-4-pasha.tatashin@soleen.com
      Signed-off-by: default avatarPavel Tatashin <pasha.tatashin@soleen.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Cc: James Morris <jmorris@namei.org>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Keith Busch <keith.busch@intel.com>
      Cc: Vishal Verma <vishal.l.verma@intel.com>
      Cc: Dave Jiang <dave.jiang@intel.com>
      Cc: Ross Zwisler <zwisler@kernel.org>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: Huang Ying <ying.huang@intel.com>
      Cc: Fengguang Wu <fengguang.wu@intel.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Yaowei Bai <baiyaowei@cmss.chinamobile.com>
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: Jérôme Glisse <jglisse@redhat.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      9f960da7
    • Pavel Tatashin's avatar
      mm/hotplug: make remove_memory() interface usable · eca499ab
      Pavel Tatashin authored
      
      
      Presently the remove_memory() interface is inherently broken.  It tries
      to remove memory but panics if some memory is not offline.  The problem
      is that it is impossible to ensure that all memory blocks are offline as
      this function also takes lock_device_hotplug that is required to change
      memory state via sysfs.
      
      So, between calling this function and offlining all memory blocks there
      is always a window when lock_device_hotplug is released, and therefore,
      there is always a chance for a panic during this window.
      
      Make this interface to return an error if memory removal fails.  This
      way it is safe to call this function without panicking machine, and also
      makes it symmetric to add_memory() which already returns an error.
      
      Link: http://lkml.kernel.org/r/20190517215438.6487-3-pasha.tatashin@soleen.com
      Signed-off-by: default avatarPavel Tatashin <pasha.tatashin@soleen.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Dave Jiang <dave.jiang@intel.com>
      Cc: Fengguang Wu <fengguang.wu@intel.com>
      Cc: Huang Ying <ying.huang@intel.com>
      Cc: James Morris <jmorris@namei.org>
      Cc: Jérôme Glisse <jglisse@redhat.com>
      Cc: Keith Busch <keith.busch@intel.com>
      Cc: Ross Zwisler <zwisler@kernel.org>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: Vishal Verma <vishal.l.verma@intel.com>
      Cc: Yaowei Bai <baiyaowei@cmss.chinamobile.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eca499ab
    • Pavel Tatashin's avatar
      device-dax: fix memory and resource leak if hotplug fails · 31e4ca92
      Pavel Tatashin authored
      Patch series ""Hotremove" persistent memory", v6.
      
      Recently, adding a persistent memory to be used like a regular RAM was
      added to Linux.  This work extends this functionality to also allow hot
      removing persistent memory.
      
      We (Microsoft) have an important use case for this functionality.
      
      The requirement is for physical machines with small amount of RAM (~8G)
      to be able to reboot in a very short period of time (<1s).  Yet, there
      is a userland state that is expensive to recreate (~2G).
      
      The solution is to boot machines with 2G preserved for persistent
      memory.
      
      Copy the state, and hotadd the persistent memory so machine still has
      all 8G available for runtime.  Before reboot, offline and hotremove
      device-dax 2G, copy the memory that is needed to be preserved to pmem0
      device, and reboot.
      
      The series of operations look like this:
      
      1. After boot restore /dev/pmem0 to ramdisk to be consumed by apps.
         and free ramdisk.
      2. Convert raw pmem0 to devdax
         ndctl create-namespace --mode devdax --map mem -e namespace0.0 -f
      3. Hotadd to System RAM
         echo dax0.0 > /sys/bus/dax/drivers/device_dax/unbind
         echo dax0.0 > /sys/bus/dax/drivers/kmem/new_id
         echo online_movable > /sys/devices/system/memoryXXX/state
      4. Before reboot hotremove device-dax memory from System RAM
         echo offline > /sys/devices/system/memoryXXX/state
         echo dax0.0 > /sys/bus/dax/drivers/kmem/unbind
      5. Create raw pmem0 device
         ndctl create-namespace --mode raw  -e namespace0.0 -f
      6. Copy the state that was stored by apps to ramdisk to pmem device
      7. Do kexec reboot or reboot through firmware if firmware does not
         zero memory in pmem0 region (These machines have only regular
         volatile memory). So to have pmem0 device either memmap kernel
         parameter is used, or devices nodes in dtb are specified.
      
      This patch (of 3):
      
      When add_memory() fails, the resource and the memory should be freed.
      
      Link: http://lkml.kernel.org/r/20190517215438.6487-2-pasha.tatashin@soleen.com
      Fixes: c221c0b0
      
       ("device-dax: "Hotplug" persistent memory for use like normal RAM")
      Signed-off-by: default avatarPavel Tatashin <pasha.tatashin@soleen.com>
      Reviewed-by: default avatarDave Hansen <dave.hansen@intel.com>
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Dave Jiang <dave.jiang@intel.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Fengguang Wu <fengguang.wu@intel.com>
      Cc: Huang Ying <ying.huang@intel.com>
      Cc: James Morris <jmorris@namei.org>
      Cc: Jérôme Glisse <jglisse@redhat.com>
      Cc: Keith Busch <keith.busch@intel.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Ross Zwisler <zwisler@kernel.org>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: Vishal Verma <vishal.l.verma@intel.com>
      Cc: Yaowei Bai <baiyaowei@cmss.chinamobile.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      31e4ca92
    • Tom Levy's avatar
      include/linux/lz4.h: fix spelling and copy-paste errors in documentation · 97a0efea
      Tom Levy authored
      
      
      Fix a few spelling and grammar errors, and two places where fast/safe in
      the documentation did not match the function.
      
      Link: http://lkml.kernel.org/r/20190321014452.13297-1-tomlevy93@gmail.com
      Signed-off-by: default avatarTom Levy <tomlevy93@gmail.com>
      Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Jiri Kosina <trivial@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      97a0efea
    • Kees Cook's avatar
      ipc/mqueue.c: only perform resource calculation if user valid · a318f12e
      Kees Cook authored
      
      
      Andreas Christoforou reported:
      
        UBSAN: Undefined behaviour in ipc/mqueue.c:414:49 signed integer overflow:
        9 * 2305843009213693951 cannot be represented in type 'long int'
        ...
        Call Trace:
          mqueue_evict_inode+0x8e7/0xa10 ipc/mqueue.c:414
          evict+0x472/0x8c0 fs/inode.c:558
          iput_final fs/inode.c:1547 [inline]
          iput+0x51d/0x8c0 fs/inode.c:1573
          mqueue_get_inode+0x8eb/0x1070 ipc/mqueue.c:320
          mqueue_create_attr+0x198/0x440 ipc/mqueue.c:459
          vfs_mkobj+0x39e/0x580 fs/namei.c:2892
          prepare_open ipc/mqueue.c:731 [inline]
          do_mq_open+0x6da/0x8e0 ipc/mqueue.c:771
      
      Which could be triggered by:
      
              struct mq_attr attr = {
                      .mq_flags = 0,
                      .mq_maxmsg = 9,
                      .mq_msgsize = 0x1fffffffffffffff,
                      .mq_curmsgs = 0,
              };
      
              if (mq_open("/testing", 0x40, 3, &attr) == (mqd_t) -1)
                      perror("mq_open");
      
      mqueue_get_inode() was correctly rejecting the giant mq_msgsize, and
      preparing to return -EINVAL.  During the cleanup, it calls
      mqueue_evict_inode() which performed resource usage tracking math for
      updating "user", before checking if there was a valid "user" at all
      (which would indicate that the calculations would be sane).  Instead,
      delay this check to after seeing a valid "user".
      
      The overflow was real, but the results went unused, so while the flaw is
      harmless, it's noisy for kernel fuzzers, so just fix it by moving the
      calculation under the non-NULL "user" where it actually gets used.
      
      Link: http://lkml.kernel.org/r/201906072207.ECB65450@keescook
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Reported-by: default avatarAndreas Christoforou <andreaschristofo@gmail.com>
      Acked-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Manfred Spraul <manfred@colorfullife.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a318f12e
    • Drew Davenport's avatar
      include/asm-generic/bug.h: fix "cut here" for WARN_ON for __WARN_TAINT architectures · 6b15f678
      Drew Davenport authored
      For architectures using __WARN_TAINT, the WARN_ON macro did not print
      out the "cut here" string.  The other WARN_XXX macros would print "cut
      here" inside __warn_printk, which is not called for WARN_ON since it
      doesn't have a message to print.
      
      Link: http://lkml.kernel.org/r/20190624154831.163888-1-ddavenport@chromium.org
      Fixes: a7bed27a
      
       ("bug: fix "cut here" location for __WARN_TAINT architectures")
      Signed-off-by: default avatarDrew Davenport <ddavenport@chromium.org>
      Acked-by: default avatarKees Cook <keescook@chromium.org>
      Tested-by: default avatarKees Cook <keescook@chromium.org>
      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>
      6b15f678
    • Leonard Crestez's avatar
      scripts/gdb: add helpers to find and list devices · 778c1f5c
      Leonard Crestez authored
      
      
      Add helper commands and functions for finding pointers to struct device
      by enumerating linux device bus/class infrastructure.  This can be used
      to fetch subsystem and driver-specific structs:
      
        (gdb) p *$container_of($lx_device_find_by_class_name("net", "eth0"), "struct net_device", "dev")
        (gdb) p *$container_of($lx_device_find_by_bus_name("i2c", "0-004b"), "struct i2c_client", "dev")
        (gdb) p *(struct imx_port*)$lx_device_find_by_class_name("tty", "ttymxc1")->parent->driver_data
      
      Several generic "lx-device-list" functions are included to enumerate
      devices by bus and class:
      
        (gdb) lx-device-list-bus usb
        (gdb) lx-device-list-class
        (gdb) lx-device-list-tree &platform_bus
      
      Similar information is available in /sys but pointer values are
      deliberately hidden.
      
      Link: http://lkml.kernel.org/r/c948628041311cbf1b9b4cff3dda7d2073cb3eaa.1561492937.git.leonard.crestez@nxp.com
      Signed-off-by: default avatarLeonard Crestez <leonard.crestez@nxp.com>
      Reviewed-by: default avatarStephen Boyd <sboyd@kernel.org>
      Cc: Kieran Bingham <kbingham@kernel.org>
      Cc: Jan Kiszka <jan.kiszka@siemens.com>
      Cc: "Rafael J. Wysocki" <rafael@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      778c1f5c
    • Leonard Crestez's avatar
      scripts/gdb: add lx-genpd-summary command · 8207d4a8
      Leonard Crestez authored
      
      
      This is like /sys/kernel/debug/pm/pm_genpd_summary except it's
      accessible through a debugger.
      
      This can be useful if the target crashes or hangs because power domains
      were not properly enabled.
      
      Link: http://lkml.kernel.org/r/f9ee627a0d4f94b894aa202fee8a98444049bed8.1561492937.git.leonard.crestez@nxp.com
      Signed-off-by: default avatarLeonard Crestez <leonard.crestez@nxp.com>
      Reviewed-by: default avatarStephen Boyd <sboyd@kernel.org>
      Cc: Kieran Bingham <kbingham@kernel.org>
      Cc: Jan Kiszka <jan.kiszka@siemens.com>
      Cc: "Rafael J. Wysocki" <rafael@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8207d4a8
    • Miroslav Lichvar's avatar
      drivers/pps/pps.c: clear offset flags in PPS_SETPARAMS ioctl · 5515e9a6
      Miroslav Lichvar authored
      
      
      The PPS assert/clear offset corrections are set by the PPS_SETPARAMS
      ioctl in the pps_ktime structs, which also contain flags.  The flags are
      not initialized by applications (using the timepps.h header) and they
      are not used by the kernel for anything except returning them back in
      the PPS_GETPARAMS ioctl.
      
      Set the flags to zero to make it clear they are unused and avoid leaking
      uninitialized data of the PPS_SETPARAMS caller to other applications
      that have a read access to the PPS device.
      
      Link: http://lkml.kernel.org/r/20190702092251.24303-1-mlichvar@redhat.com
      Signed-off-by: default avatarMiroslav Lichvar <mlichvar@redhat.com>
      Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Acked-by: default avatarRodolfo Giometti <giometti@enneenne.com>
      Cc: Greg KH <greg@kroah.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5515e9a6
    • Joel Fernandes (Google)'s avatar
      kernel/pid.c: convert struct pid count to refcount_t · f57e515a
      Joel Fernandes (Google) authored
      
      
      struct pid's count is an atomic_t field used as a refcount.  Use
      refcount_t for it which is basically atomic_t but does additional
      checking to prevent use-after-free bugs.
      
      For memory ordering, the only change is with the following:
      
       -	if ((atomic_read(&pid->count) == 1) ||
       -	     atomic_dec_and_test(&pid->count)) {
       +	if (refcount_dec_and_test(&pid->count)) {
       		kmem_cache_free(ns->pid_cachep, pid);
      
      Here the change is from: Fully ordered --> RELEASE + ACQUIRE (as per
      refcount-vs-atomic.rst) This ACQUIRE should take care of making sure the
      free happens after the refcount_dec_and_test().
      
      The above hunk also removes atomic_read() since it is not needed for the
      code to work and it is unclear how beneficial it is.  The removal lets
      refcount_dec_and_test() check for cases where get_pid() happened before
      the object was freed.
      
      Link: http://lkml.kernel.org/r/20190701183826.191936-1-joel@joelfernandes.org
      Signed-off-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
      Reviewed-by: default avatarAndrea Parri <andrea.parri@amarulasolutions.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Elena Reshetova <elena.reshetova@intel.com>
      Cc: Jann Horn <jannh@google.com>
      Cc: Eric W. Biederman <ebiederm@xmission.com>
      Cc: KJ Tsanaktsidis <ktsanaktsidis@zendesk.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f57e515a
    • Dan Carpenter's avatar
      drivers/rapidio/devices/rio_mport_cdev.c: NUL terminate some strings · 156e0b1a
      Dan Carpenter authored
      The dev_info.name[] array has space for RIO_MAX_DEVNAME_SZ + 1
      characters.  But the problem here is that we don't ensure that the user
      put a NUL terminator on the end of the string.  It could lead to an out
      of bounds read.
      
      Link: http://lkml.kernel.org/r/20190529110601.GB19119@mwanda
      Fixes: e8de3701
      
       ("rapidio: add mport char device driver")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Acked-by: default avatarAlexandre Bounine <alex.bou9@gmail.com>
      Cc: Ira Weiny <ira.weiny@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      156e0b1a
    • Oleg Nesterov's avatar
      select: shift restore_saved_sigmask_unless() into poll_select_copy_remaining() · ac301020
      Oleg Nesterov authored
      
      
      Now that restore_saved_sigmask_unless() is always called with the same
      argument right before poll_select_copy_remaining() we can move it into
      poll_select_copy_remaining() and make it the only caller of restore() in
      fs/select.c.
      
      The patch also renames poll_select_copy_remaining(),
      poll_select_finish() looks better after this change.
      
      kern_select() doesn't use set_user_sigmask(), so in this case
      poll_select_finish() does restore_saved_sigmask_unless() "for no
      reason".  But this won't hurt, and WARN_ON(!TIF_SIGPENDING) is still
      valid.
      
      Link: http://lkml.kernel.org/r/20190606140915.GC13440@redhat.com
      Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
      Cc: Al Viro <viro@ZenIV.linux.org.uk>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: David Laight <David.Laight@aculab.com>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Deepa Dinamani <deepa.kernel@gmail.com>
      Cc: Eric W. Biederman <ebiederm@xmission.com>
      Cc: Eric Wong <e@80x24.org>
      Cc: Jason Baron <jbaron@akamai.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ac301020
    • Oleg Nesterov's avatar
      select: change do_poll() to return -ERESTARTNOHAND rather than -EINTR · 8cf8b553
      Oleg Nesterov authored
      
      
      do_poll() returns -EINTR if interrupted and after that all its callers
      have to translate it into -ERESTARTNOHAND.  Change do_poll() to return
      -ERESTARTNOHAND and update (simplify) the callers.
      
      Note that this also unifies all users of restore_saved_sigmask_unless(),
      see the next patch.
      
      Linus:
      
      : The *right* return value will actually be then chosen by
      : poll_select_copy_remaining(), which will turn ERESTARTNOHAND to EINTR
      : when it can't update the timeout.
      :
      : Except for the cases that use restart_block and do that instead and
      : don't have the whole timeout restart issue as a result.
      
      Link: http://lkml.kernel.org/r/20190606140852.GB13440@redhat.com
      Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
      Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Cc: Al Viro <viro@ZenIV.linux.org.uk>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: David Laight <David.Laight@aculab.com>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Deepa Dinamani <deepa.kernel@gmail.com>
      Cc: Eric W. Biederman <ebiederm@xmission.com>
      Cc: Eric Wong <e@80x24.org>
      Cc: Jason Baron <jbaron@akamai.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8cf8b553
    • Oleg Nesterov's avatar
      signal: simplify set_user_sigmask/restore_user_sigmask · b772434b
      Oleg Nesterov authored
      
      
      task->saved_sigmask and ->restore_sigmask are only used in the ret-from-
      syscall paths.  This means that set_user_sigmask() can save ->blocked in
      ->saved_sigmask and do set_restore_sigmask() to indicate that ->blocked
      was modified.
      
      This way the callers do not need 2 sigset_t's passed to set/restore and
      restore_user_sigmask() renamed to restore_saved_sigmask_unless() turns
      into the trivial helper which just calls restore_saved_sigmask().
      
      Link: http://lkml.kernel.org/r/20190606113206.GA9464@redhat.com
      Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
      Cc: Deepa Dinamani <deepa.kernel@gmail.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Wong <e@80x24.org>
      Cc: Jason Baron <jbaron@akamai.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Al Viro <viro@ZenIV.linux.org.uk>
      Cc: Eric W. Biederman <ebiederm@xmission.com>
      Cc: David Laight <David.Laight@aculab.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b772434b
    • Alexey Dobriyan's avatar
      signal: reorder struct sighand_struct · e2d9018e
      Alexey Dobriyan authored
      
      
      struct sighand_struct::siglock field is the most used field by far, put
      it first so that is can be accessed without IMM8 or IMM32 encoding on
      x86_64.
      
      Space savings (on trimmed down VM test config):
      
      add/remove: 0/0 grow/shrink: 8/68 up/down: 49/-1147 (-1098)
      Function                                     old     new   delta
      complete_signal                              512     533     +21
      do_signalfd4                                 335     346     +11
      __cleanup_sighand                             39      43      +4
      unhandled_signal                              49      52      +3
      prepare_signal                               692     695      +3
      ignore_signals                                37      40      +3
      __tty_check_change.part                      248     251      +3
      ksys_unshare                                 780     781      +1
      sighand_ctor                                  33      29      -4
      ptrace_trap_notify                            60      56      -4
      sigqueue_free                                 98      91      -7
      run_posix_cpu_timers                        1389    1382      -7
      proc_pid_status                             2448    2441      -7
      proc_pid_limits                              344     337      -7
      posix_cpu_timer_rearm                        222     215      -7
      posix_cpu_timer_get                          249     242      -7
      kill_pid_info_as_cred                        243     236      -7
      freeze_task                                  197     190      -7
      flush_old_exec                              1873    1866      -7
      do_task_stat                                3363    3356      -7
      do_send_sig_info                              98      91      -7
      do_group_exit                                147     140      -7
      init_sighand                                2088    2080      -8
      do_notify_parent_cldstop                     399     391      -8
      signalfd_cleanup                              50      41      -9
      do_notify_parent                             557     545     -12
      __send_signal                               1029    1017     -12
      ptrace_stop                                  590     577     -13
      get_signal                                  1576    1563     -13
      __lock_task_sighand                          112      99     -13
      zap_pid_ns_processes                         391     377     -14
      update_rlimit_cpu                             78      64     -14
      tty_signal_session_leader                    413     399     -14
      tty_open_proc_set_tty                        149     135     -14
      tty_jobctrl_ioctl                            936     922     -14
      set_cpu_itimer                               339     325     -14
      ptrace_resume                                226     212     -14
      ptrace_notify                                110      96     -14
      proc_clear_tty                                81      67     -14
      posix_cpu_timer_del                          229     215     -14
      kernel_sigaction                             156     142     -14
      getrusage                                    977     963     -14
      get_current_tty                               98      84     -14
      force_sigsegv                                 89      75     -14
      force_sig_info                               205     191     -14
      flush_signals                                 83      69     -14
      flush_itimer_signals                          85      71     -14
      do_timer_create                             1120    1106     -14
      do_sigpending                                 88      74     -14
      do_signal_stop                               537     523     -14
      cgroup_init_fs_context                       644     630     -14
      call_usermodehelper_exec_async               402     388     -14
      calculate_sigpending                          58      44     -14
      __x64_sys_timer_delete                       248     234     -14
      __set_current_blocked                         80      66     -14
      __ptrace_unlink                              310     296     -14
      __ptrace_detach.part                         187     173     -14
      send_sigqueue                                362     347     -15
      get_cpu_itimer                               214     199     -15
      signalfd_poll                                175     159     -16
      dequeue_signal                               340     323     -17
      do_getitimer                                 192     174     -18
      release_task.part                           1060    1040     -20
      ptrace_peek_siginfo                          408     387     -21
      posix_cpu_timer_set                          827     806     -21
      exit_signals                                 437     416     -21
      do_sigaction                                 541     520     -21
      do_setitimer                                 485     464     -21
      disassociate_ctty.part                       545     517     -28
      __x64_sys_rt_sigtimedwait                    721     679     -42
      __x64_sys_ptrace                            1319    1277     -42
      ptrace_request                              1828    1782     -46
      signalfd_read                                507     459     -48
      wait_consider_task                          2027    1971     -56
      do_coredump                                 3672    3616     -56
      copy_process.part                           6936    6871     -65
      
      Link: http://lkml.kernel.org/r/20190503192800.GA18004@avx2
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e2d9018e
    • Dmitry V. Levin's avatar
      selftests/ptrace: add a test case for PTRACE_GET_SYSCALL_INFO · ac76de55
      Dmitry V. Levin authored
      
      
      Check whether PTRACE_GET_SYSCALL_INFO semantics implemented in the
      kernel matches userspace expectations.
      
      [akpm@linux-foundation.org: coding-style fixes]
      Link: http://lkml.kernel.org/r/20190510152852.GG28558@altlinux.org
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Acked-by: default avatarShuah Khan <shuah@kernel.org>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Elvira Khabirova <lineprinter@altlinux.org>
      Cc: Eugene Syromyatnikov <esyr@redhat.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Greentime Hu <greentime@andestech.com>
      Cc: Helge Deller <deller@gmx.de>	[parisc]
      Cc: James E.J. Bottomley <jejb@parisc-linux.org>
      Cc: James Hogan <jhogan@kernel.org>
      Cc: kbuild test robot <lkp@intel.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Paul Burton <paul.burton@mips.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Richard Kuo <rkuo@codeaurora.org>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ac76de55
    • Elvira Khabirova's avatar
      ptrace: add PTRACE_GET_SYSCALL_INFO request · 201766a2
      Elvira Khabirova authored
      PTRACE_GET_SYSCALL_INFO is a generic ptrace API that lets ptracer obtain
      details of the syscall the tracee is blocked in.
      
      There are two reasons for a special syscall-related ptrace request.
      
      Firstly, with the current ptrace API there are cases when ptracer cannot
      retrieve necessary information about syscalls.  Some examples include:
      
       * The notorious int-0x80-from-64-bit-task issue. See [1] for details.
         In short, if a 64-bit task performs a syscall through int 0x80, its
         tracer has no reliable means to find out that the syscall was, in
         fact, a compat syscall, and misidentifies it.
      
       * Syscall-enter-stop and syscall-exit-stop look the same for the
         tracer. Common practice is to keep track of the sequence of
         ptrace-stops in order not to mix the two syscall-stops up. But it is
         not as simple as it looks; for example, strace had a (just recently
         fixed) long-standing bug where attaching strace to a tracee that is
         performing the execve system call led to the tracer identifying the
         following syscall-exit-stop as syscall-enter-stop, which messed up
         all the state tracking.
      
       * Since the introduction of commit 84d77d3f
      
       ("ptrace: Don't allow
         accessing an undumpable mm"), both PTRACE_PEEKDATA and
         process_vm_readv become unavailable when the process dumpable flag is
         cleared. On such architectures as ia64 this results in all syscall
         arguments being unavailable for the tracer.
      
      Secondly, ptracers also have to support a lot of arch-specific code for
      obtaining information about the tracee.  For some architectures, this
      requires a ptrace(PTRACE_PEEKUSER, ...) invocation for every syscall
      argument and return value.
      
      ptrace(2) man page:
      
      long ptrace(enum __ptrace_request request, pid_t pid,
                  void *addr, void *data);
      ...
      PTRACE_GET_SYSCALL_INFO
             Retrieve information about the syscall that caused the stop.
             The information is placed into the buffer pointed by "data"
             argument, which should be a pointer to a buffer of type
             "struct ptrace_syscall_info".
             The "addr" argument contains the size of the buffer pointed to
             by "data" argument (i.e., sizeof(struct ptrace_syscall_info)).
             The return value contains the number of bytes available
             to be written by the kernel.
             If the size of data to be written by the kernel exceeds the size
             specified by "addr" argument, the output is truncated.
      
      [ldv@altlinux.org: selftests/seccomp/seccomp_bpf: update for PTRACE_GET_SYSCALL_INFO]
        Link: http://lkml.kernel.org/r/20190708182904.GA12332@altlinux.org
      Link: http://lkml.kernel.org/r/20190510152842.GF28558@altlinux.org
      Signed-off-by: default avatarElvira Khabirova <lineprinter@altlinux.org>
      Co-developed-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Reviewed-by: default avatarOleg Nesterov <oleg@redhat.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Reviewed-by: default avatarAndy Lutomirski <luto@kernel.org>
      Cc: Eugene Syromyatnikov <esyr@redhat.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Greentime Hu <greentime@andestech.com>
      Cc: Helge Deller <deller@gmx.de>	[parisc]
      Cc: James E.J. Bottomley <jejb@parisc-linux.org>
      Cc: James Hogan <jhogan@kernel.org>
      Cc: kbuild test robot <lkp@intel.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Paul Burton <paul.burton@mips.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Richard Kuo <rkuo@codeaurora.org>
      Cc: Shuah Khan <shuah@kernel.org>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      201766a2
    • Dmitry V. Levin's avatar
      powerpc: define syscall_get_error() · f296f1df
      Dmitry V. Levin authored
      
      
      syscall_get_error() is required to be implemented on this architecture in
      addition to already implemented syscall_get_nr(), syscall_get_arguments(),
      syscall_get_return_value(), and syscall_get_arch() functions in order to
      extend the generic ptrace API with PTRACE_GET_SYSCALL_INFO request.
      
      Link: http://lkml.kernel.org/r/20190510152824.GE28558@altlinux.org
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Acked-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Cc: Elvira Khabirova <lineprinter@altlinux.org>
      Cc: Eugene Syromyatnikov <esyr@redhat.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Greentime Hu <greentime@andestech.com>
      Cc: Helge Deller <deller@gmx.de>	[parisc]
      Cc: James E.J. Bottomley <jejb@parisc-linux.org>
      Cc: James Hogan <jhogan@kernel.org>
      Cc: kbuild test robot <lkp@intel.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Paul Burton <paul.burton@mips.com>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Richard Kuo <rkuo@codeaurora.org>
      Cc: Shuah Khan <shuah@kernel.org>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f296f1df
    • Dmitry V. Levin's avatar
      parisc: define syscall_get_error() · 2938c1f8
      Dmitry V. Levin authored
      
      
      syscall_get_error() is required to be implemented on all architectures in
      addition to already implemented syscall_get_nr(), syscall_get_arguments(),
      syscall_get_return_value(), and syscall_get_arch() functions in order to
      extend the generic ptrace API with PTRACE_GET_SYSCALL_INFO request.
      
      Link: http://lkml.kernel.org/r/20190510152812.GD28558@altlinux.org
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Acked-by: Helge Deller <deller@gmx.de>	[parisc]
      Cc: James E.J. Bottomley <jejb@parisc-linux.org>
      Cc: Elvira Khabirova <lineprinter@altlinux.org>
      Cc: Eugene Syromyatnikov <esyr@redhat.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Greentime Hu <greentime@andestech.com>
      Cc: James Hogan <jhogan@kernel.org>
      Cc: kbuild test robot <lkp@intel.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Paul Burton <paul.burton@mips.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Richard Kuo <rkuo@codeaurora.org>
      Cc: Shuah Khan <shuah@kernel.org>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2938c1f8
    • Dmitry V. Levin's avatar
      mips: define syscall_get_error() · ba849160
      Dmitry V. Levin authored
      
      
      syscall_get_error() is required to be implemented on all architectures
      in addition to already implemented syscall_get_nr(),
      syscall_get_arguments(), syscall_get_return_value(), and
      syscall_get_arch() functions in order to extend the generic ptrace API
      with PTRACE_GET_SYSCALL_INFO request.
      
      Link: http://lkml.kernel.org/r/20190510152803.GC28558@altlinux.org
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Acked-by: default avatarPaul Burton <paul.burton@mips.com>
      Cc: Elvira Khabirova <lineprinter@altlinux.org>
      Cc: Eugene Syromyatnikov <esyr@redhat.com>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: James Hogan <jhogan@kernel.org>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Greentime Hu <greentime@andestech.com>
      Cc: Helge Deller <deller@gmx.de>	[parisc]
      Cc: James E.J. Bottomley <jejb@parisc-linux.org>
      Cc: kbuild test robot <lkp@intel.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Richard Kuo <rkuo@codeaurora.org>
      Cc: Shuah Khan <shuah@kernel.org>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ba849160
    • Dmitry V. Levin's avatar
      hexagon: define syscall_get_error() and syscall_get_return_value() · 6c132dd6
      Dmitry V. Levin authored
      
      
      syscall_get_* functions are required to be implemented on all
      architectures in order to extend the generic ptrace API with
      PTRACE_GET_SYSCALL_INFO request.
      
      This adds remaining 2 syscall_get_* functions as documented in
      asm-generic/syscall.h: syscall_get_error and syscall_get_return_value.
      
      Link: http://lkml.kernel.org/r/20190510152756.GB28558@altlinux.org
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Cc: Richard Kuo <rkuo@codeaurora.org>
      Cc: Elvira Khabirova <lineprinter@altlinux.org>
      Cc: Eugene Syromyatnikov <esyr@redhat.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Greentime Hu <greentime@andestech.com>
      Cc: Helge Deller <deller@gmx.de>	[parisc]
      Cc: James E.J. Bottomley <jejb@parisc-linux.org>
      Cc: James Hogan <jhogan@kernel.org>
      Cc: kbuild test robot <lkp@intel.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Paul Burton <paul.burton@mips.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Shuah Khan <shuah@kernel.org>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6c132dd6
    • Dmitry V. Levin's avatar
      nds32: fix asm/syscall.h · 33644b95
      Dmitry V. Levin authored
      PTRACE_GET_SYSCALL_INFO is a generic ptrace API that lets ptracer obtain
      details of the syscall the tracee is blocked in.
      
      There are two reasons for a special syscall-related ptrace request.
      
      Firstly, with the current ptrace API there are cases when ptracer cannot
      retrieve necessary information about syscalls.  Some examples include:
      
       * The notorious int-0x80-from-64-bit-task issue. See [1] for details.
         In short, if a 64-bit task performs a syscall through int 0x80, its
         tracer has no reliable means to find out that the syscall was, in
         fact, a compat syscall, and misidentifies it.
      
       * Syscall-enter-stop and syscall-exit-stop look the same for the
         tracer. Common practice is to keep track of the sequence of
         ptrace-stops in order not to mix the two syscall-stops up. But it is
         not as simple as it looks; for example, strace had a (just recently
         fixed) long-standing bug where attaching strace to a tracee that is
         performing the execve system call led to the tracer identifying the
         following syscall-exit-stop as syscall-enter-stop, which messed up
         all the state tracking.
      
       * Since the introduction of commit 84d77d3f ("ptrace: Don't allow
         accessing an undumpable mm"), both PTRACE_PEEKDATA and
         process_vm_readv become unavailable when the process dumpable flag is
         cleared. On such architectures as ia64 this results in all syscall
         arguments being unavailable for the tracer.
      
      Secondly, ptracers also have to support a lot of arch-specific code for
      obtaining information about the tracee.  For some architectures, this
      requires a ptrace(PTRACE_PEEKUSER, ...) invocation for every syscall
      argument and return value.
      
      PTRACE_GET_SYSCALL_INFO returns the following structure:
      
      struct ptrace_syscall_info {
      	__u8 op;	/* PTRACE_SYSCALL_INFO_* */
      	__u32 arch __attribute__((__aligned__(sizeof(__u32))));
      	__u64 instruction_pointer;
      	__u64 stack_pointer;
      	union {
      		struct {
      			__u64 nr;
      			__u64 args[6];
      		} entry;
      		struct {
      			__s64 rval;
      			__u8 is_error;
      		} exit;
      		struct {
      			__u64 nr;
      			__u64 args[6];
      			__u32 ret_data;
      		} seccomp;
      	};
      };
      
      The structure was chosen according to [2], except for the following
      changes:
      
       * seccomp substructure was added as a superset of entry substructure
      
       * the type of nr field was changed from int to __u64 because syscall
         numbers are, as a practical matter, 64 bits
      
       * stack_pointer field was added along with instruction_pointer field
         since it is readily available and can save the tracer from extra
         PTRACE_GETREGS/PTRACE_GETREGSET calls
      
       * arch is always initialized to aid with tracing system calls such as
         execve()
      
       * instruction_pointer and stack_pointer are always initialized so they
         could be easily obtained for non-syscall stops
      
       * a boolean is_error field was added along with rval field, this way
         the tracer can more reliably distinguish a return value from an error
         value
      
      strace has been ported to PTRACE_GET_SYSCALL_INFO.  Starting with
      release 4.26, strace uses PTRACE_GET_SYSCALL_INFO API as the preferred
      mechanism of obtaining syscall information.
      
      [1] https://lore.kernel.org/lkml/CA+55aFzcSVmdDj9Lh_gdbz1OzHyEm6ZrGPBDAJnywm2LF_eVyg@mail.gmail.com/
      [2] https://lore.kernel.org/lkml/CAObL_7GM0n80N7J_DFw_eQyfLyzq+sf4y2AvsCCV88Tb3AwEHA@mail.gmail.com/
      
      This patch (of 7):
      
      All syscall_get_*() and syscall_set_*() functions must be defined as
      static inline as on all other architectures, otherwise asm/syscall.h
      cannot be included in more than one compilation unit.
      
      This bug has to be fixed in order to extend the generic
      ptrace API with PTRACE_GET_SYSCALL_INFO request.
      
      Link: http://lkml.kernel.org/r/20190510152749.GA28558@altlinux.org
      Fixes: 1932fbe3
      
       ("nds32: System calls handling")
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Reported-by: default avatarkbuild test robot <lkp@intel.com>
      Acked-by: default avatarGreentime Hu <greentime@andestech.com>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Cc: Elvira Khabirova <lineprinter@altlinux.org>
      Cc: Eugene Syromyatnikov <esyr@redhat.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Helge Deller <deller@gmx.de>	[parisc]
      Cc: James E.J. Bottomley <jejb@parisc-linux.org>
      Cc: James Hogan <jhogan@kernel.org>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Paul Burton <paul.burton@mips.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Richard Kuo <rkuo@codeaurora.org>
      Cc: Shuah Khan <shuah@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      33644b95
    • Hariprasad Kelam's avatar
      fs/reiserfs/journal.c: change return type of dirty_one_transaction · dc0dde61
      Hariprasad Kelam authored
      
      
      Change return type of dirty_one_transaction from int to void.  As this
      function always return success.
      
      Fixes below issue reported by coccicheck:
      
        fs/reiserfs/journal.c:1690:5-8: Unneeded variable: "ret".  Return "0" on line 1719
      
      Link: http://lkml.kernel.org/r/20190702175430.GA5882@hari-Inspiron-1545
      Signed-off-by: default avatarHariprasad Kelam <hariprasad.kelam@gmail.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Bharath Vedartham <linux.bhar@gmail.com>
      Cc: Hariprasad Kelam <hariprasad.kelam@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      dc0dde61
    • YueHaibing's avatar
      fs/ufs/super.c: remove set but not used variable 'usb3' · ba542f20
      YueHaibing authored
      Fixes gcc '-Wunused-but-set-variable' warning:
      
        fs/ufs/super.c: In function ufs_statfs:
        fs/ufs/super.c:1409:32: warning: variable usb3 set but not used [-Wunused-but-set-variable]
      
      It is not used since commmit c596961d
      
       ("ufs: fix s_size/s_dsize
      users")
      
      Link: http://lkml.kernel.org/r/20190525140654.15924-1-yuehaibing@huawei.com
      Signed-off-by: default avatarYueHaibing <yuehaibing@huawei.com>
      Cc: Evgeniy Dushistov <dushistov@mail.ru>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ba542f20
    • Mathieu Malaterre's avatar
      fs/hfsplus/xattr.c: replace strncpy with memcpy · 29774f3f
      Mathieu Malaterre authored
      
      
      strncpy() was used to copy a fixed size buffer.  Since NUL-terminating
      string is not required here, prefer a memcpy function.  The generated
      code (ppc32) remains the same.
      
      Silence the following warning triggered using W=1:
      
        fs/hfsplus/xattr.c:410:3: warning: 'strncpy' output truncated before terminating nul copying 4 bytes from a string of the same length [-Wstringop-truncation]
      
      Link: http://lkml.kernel.org/r/20190529113341.11972-1-malat@debian.org
      Signed-off-by: default avatarMathieu Malaterre <malat@debian.org>
      Reviewed-by: default avatarVyacheslav Dubeyko <slava@dubeyko.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      29774f3f
    • Pedro Cuadra's avatar
      coda: add hinting support for partial file caching · a9fba24c
      Pedro Cuadra authored
      
      
      This adds support for partial file caching in Coda.  Every read, write
      and mmap informs the userspace cache manager about what part of a file
      is about to be accessed so that the cache manager can ensure the
      relevant parts are available before the operation is allowed to proceed.
      
      When a read or write operation completes, this is also reported to allow
      the cache manager to track when partially cached content can be
      released.
      
      If the cache manager does not support partial file caching, or when the
      entire file has been fetched into the local cache, the cache manager may
      return an EOPNOTSUPP error to indicate that intent upcalls are no longer
      necessary until the file is closed.
      
      [akpm@linux-foundation.org: little whitespace fixup]
      Link: http://lkml.kernel.org/r/20190618181301.6960-1-jaharkes@cs.cmu.edu
      Signed-off-by: default avatarPedro Cuadra <pjcuadra@gmail.com>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a9fba24c
    • Fabian Frederick's avatar
      coda: ftoc validity check integration · 5bb44810
      Fabian Frederick authored
      
      
      This patch moves cfi check in coda_ftoc() instead of repeating it in the
      wild.
      
        Module size
           text	   data	    bss	    dec	    hex	filename
          28297	   1040	    700	  30037	   7555	fs/coda/coda.ko.before
          28263	    980	    700	  29943	   74f7	fs/coda/coda.ko.after
      
      Link: http://lkml.kernel.org/r/a2c27663ec4547018c92d71c63b1dff4650b6546.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarFabian Frederick <fabf@skynet.be>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5bb44810
    • Fabian Frederick's avatar
      coda: remove sb test in coda_fid_to_inode() · 7f6118ce
      Fabian Frederick authored
      
      
      coda_fid_to_inode() is only called by coda_downcall() where sb is already
      being tested.
      
      Link: http://lkml.kernel.org/r/d2163b3136348faf83ba47dc2d65a5d0a9a135dd.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarFabian Frederick <fabf@skynet.be>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7f6118ce
    • Fabian Frederick's avatar
      coda: remove sysctl object from module when unused · 6975259a
      Fabian Frederick authored
      
      
      Inspired by NFS sysctl process
      
      Link: http://lkml.kernel.org/r/9afcc2cd09490849b309786bbf47fef75de7f91c.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarFabian Frederick <fabf@skynet.be>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6975259a
    • Fabian Frederick's avatar
      coda: add __init to init_coda_psdev() · f9484528
      Fabian Frederick authored
      
      
      init_coda_psdev() was only called by __init function.
      
      Link: http://lkml.kernel.org/r/a12a5a135fa6b0ea997e1a0af4be0a235c463a24.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarFabian Frederick <fabf@skynet.be>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f9484528
    • Fabian Frederick's avatar
      coda: use SIZE() for stat · 50e9a6ef
      Fabian Frederick authored
      
      
      max_t expression was already defined in coda sources
      
      Link: http://lkml.kernel.org/r/e6cda497ce8691db155cb35f8d13ea44ca6cedeb.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarFabian Frederick <fabf@skynet.be>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      50e9a6ef
    • Fabian Frederick's avatar
      coda: destroy mutex in put_super() · 79a0d65e
      Fabian Frederick authored
      
      
      We can safely destroy vc_mutex at the end of umount process.
      
      Link: http://lkml.kernel.org/r/f436f68908c467c5663bc6a9251b52cd7b95d2a5.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarFabian Frederick <fabf@skynet.be>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      79a0d65e
    • Jan Harkes's avatar
      coda: remove uapi/linux/coda_psdev.h · 6dc280eb
      Jan Harkes authored
      
      
      Nothing is left in this header that is used by userspace.
      
      Link: http://lkml.kernel.org/r/bb11378cef94739f2cf89425dd6d302a52c64480.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Fabian Frederick <fabf@skynet.be>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6dc280eb
    • David Howells's avatar
      coda: move internal defs out of include/linux/ [ver #2] · 8fc8b9df
      David Howells authored
      
      
      Move include/linux/coda_psdev.h to fs/coda/ as there's nothing else that
      uses it.
      
      Link: http://lkml.kernel.org/r/3ceeee0415a929b89fb02700b6b4b3a07938acb8.1558117389.git.jaharkes@cs.cmu.edu
      Link: https://patchwork.kernel.org/patch/10590257/
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Jan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: Fabian Frederick <fabf@skynet.be>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8fc8b9df
    • Jan Harkes's avatar
      coda: bump module version · b6a18c60
      Jan Harkes authored
      
      
      The out of tree module version had been bumped several times already,
      but we haven't kept this in-tree one in sync, partly because most
      changes go from here to the out-of-tree copy.
      
      Link: http://lkml.kernel.org/r/8b0ab50a2da2f0180ac32c79d91811b4d1d0bd8b.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Fabian Frederick <fabf@skynet.be>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b6a18c60
    • Dan Carpenter's avatar
      coda: get rid of CODA_FREE() · 936dae45
      Dan Carpenter authored
      
      
      The CODA_FREE() macro just calls kvfree().  We can call that directly
      instead.
      
      Link: http://lkml.kernel.org/r/4950a94fd30ec5f84835dd4ca0bb67c0448672f5.1558117389.git.jaharkes@cs.cmu.edu
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarJan Harkes <jaharkes@cs.cmu.edu>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Fabian Frederick <fabf@skynet.be>
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Sam Protsenko <semen.protsenko@linaro.org>
      Cc: Yann Droneaud <ydroneaud@opteya.com>
      Cc: Zhouyang Jia <jiazhouyang09@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      936dae45