Skip to content
Snippets Groups Projects
  1. Jun 14, 2022
    • Greg Kroah-Hartman's avatar
      Linux 4.19.118 · 352192d3
      Greg Kroah-Hartman authored
      352192d3
    • Daniel Borkmann's avatar
      bpf: fix buggy r0 retval refinement for tracing helpers · 1171d6ca
      Daniel Borkmann authored
      [ no upstream commit ]
      
      See the glory details in 100605035e15 ("bpf: Verifier, do_refine_retval_range
      may clamp umin to 0 incorrectly") for why 849fa506 ("bpf/verifier: refine
      retval R0 state for bpf_get_stack helper") is buggy. The whole series however
      is not suitable for stable since it adds significant amount [0] of verifier
      complexity in order to add 32bit subreg tracking. Something simpler is needed.
      
      Unfortunately, reverting 849fa506 ("bpf/verifier: refine retval R0 state
      for bpf_get_stack helper") or just cherry-picking 100605035e15 ("bpf: Verifier,
      do_refine_retval_range may clamp umin to 0 incorrectly") is not an option since
      it will break existing tracing programs badly (at least those that are using
      bpf_get_stack() and bpf_probe_read_str() helpers). Not fixing it in stable is
      also not an option since on 4.19 kernels an error will cause a soft-lockup due
      to hitting dead-code sanitized branch since we don't hard-wire such branches
      in old kernels yet. But even then for 5.x 849fa506 ("bpf/verifier: refine
      retval R0 state for bpf_get_stack helper") would cause wrong bounds on the
      verifier simluation when an error is hit.
      
      In one of the earlier iterations of mentioned patch series for upstream there
      was the concern that just using smax_value in do_refine_retval_range() would
      nuke bounds by subsequent <<32 >>32 shifts before the comparison against 0 [1]
      which eventually led to the 32bit subreg tracking in the first place. While I
      initially went for implementing the idea [1] to pattern match the two shift
      operations, it turned out to be more complex than actually needed, meaning, we
      could simply treat do_refine_retval_range() similarly to how we branch off
      verification for conditionals or under speculation, that is, pushing a new
      reg state to the stack for later verification. This means, instead of verifying
      the current path with the ret_reg in [S32MIN, msize_max_value] interval where
      later bounds would get nuked, we split this into two: i) for the success case
      where ret_reg can be in [0, msize_max_value], and ii) for the error case with
      ret_reg known to be in interval [S32MIN, -1]. Latter will preserve the bounds
      during these shift patterns and can match reg < 0 test. test_progs also succeed
      with this approach.
      
        [0] https://lore.kernel.org/bpf/158507130343.15666.8018068546764556975.stgit@john-Precision-5820-Tower/
        [1] https://lore.kernel.org/bpf/158015334199.28573.4940395881683556537.stgit@john-XPS-13-9370/T/#m2e0ad1d5949131014748b6daa48a3495e7f0456d
      
      
      
      Fixes: 849fa506 ("bpf/verifier: refine retval R0 state for bpf_get_stack helper")
      Reported-by: default avatarLorenzo Fontana <fontanalorenz@gmail.com>
      Reported-by: default avatarLeonardo Di Donato <leodidonato@gmail.com>
      Reported-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Tested-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Tested-by: default avatarLorenzo Fontana <fontanalorenz@gmail.com>
      Tested-by: default avatarLeonardo Di Donato <leodidonato@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1171d6ca
    • Waiman Long's avatar
      KEYS: Don't write out to userspace while holding key semaphore · badc4863
      Waiman Long authored
      
      commit d3ec10aa95819bff18a0d936b18884c7816d0914 upstream.
      
      A lockdep circular locking dependency report was seen when running a
      keyutils test:
      
      [12537.027242] ======================================================
      [12537.059309] WARNING: possible circular locking dependency detected
      [12537.088148] 4.18.0-147.7.1.el8_1.x86_64+debug #1 Tainted: G OE    --------- -  -
      [12537.125253] ------------------------------------------------------
      [12537.153189] keyctl/25598 is trying to acquire lock:
      [12537.175087] 000000007c39f96c (&mm->mmap_sem){++++}, at: __might_fault+0xc4/0x1b0
      [12537.208365]
      [12537.208365] but task is already holding lock:
      [12537.234507] 000000003de5b58d (&type->lock_class){++++}, at: keyctl_read_key+0x15a/0x220
      [12537.270476]
      [12537.270476] which lock already depends on the new lock.
      [12537.270476]
      [12537.307209]
      [12537.307209] the existing dependency chain (in reverse order) is:
      [12537.340754]
      [12537.340754] -> #3 (&type->lock_class){++++}:
      [12537.367434]        down_write+0x4d/0x110
      [12537.385202]        __key_link_begin+0x87/0x280
      [12537.405232]        request_key_and_link+0x483/0xf70
      [12537.427221]        request_key+0x3c/0x80
      [12537.444839]        dns_query+0x1db/0x5a5 [dns_resolver]
      [12537.468445]        dns_resolve_server_name_to_ip+0x1e1/0x4d0 [cifs]
      [12537.496731]        cifs_reconnect+0xe04/0x2500 [cifs]
      [12537.519418]        cifs_readv_from_socket+0x461/0x690 [cifs]
      [12537.546263]        cifs_read_from_socket+0xa0/0xe0 [cifs]
      [12537.573551]        cifs_demultiplex_thread+0x311/0x2db0 [cifs]
      [12537.601045]        kthread+0x30c/0x3d0
      [12537.617906]        ret_from_fork+0x3a/0x50
      [12537.636225]
      [12537.636225] -> #2 (root_key_user.cons_lock){+.+.}:
      [12537.664525]        __mutex_lock+0x105/0x11f0
      [12537.683734]        request_key_and_link+0x35a/0xf70
      [12537.705640]        request_key+0x3c/0x80
      [12537.723304]        dns_query+0x1db/0x5a5 [dns_resolver]
      [12537.746773]        dns_resolve_server_name_to_ip+0x1e1/0x4d0 [cifs]
      [12537.775607]        cifs_reconnect+0xe04/0x2500 [cifs]
      [12537.798322]        cifs_readv_from_socket+0x461/0x690 [cifs]
      [12537.823369]        cifs_read_from_socket+0xa0/0xe0 [cifs]
      [12537.847262]        cifs_demultiplex_thread+0x311/0x2db0 [cifs]
      [12537.873477]        kthread+0x30c/0x3d0
      [12537.890281]        ret_from_fork+0x3a/0x50
      [12537.908649]
      [12537.908649] -> #1 (&tcp_ses->srv_mutex){+.+.}:
      [12537.935225]        __mutex_lock+0x105/0x11f0
      [12537.954450]        cifs_call_async+0x102/0x7f0 [cifs]
      [12537.977250]        smb2_async_readv+0x6c3/0xc90 [cifs]
      [12538.000659]        cifs_readpages+0x120a/0x1e50 [cifs]
      [12538.023920]        read_pages+0xf5/0x560
      [12538.041583]        __do_page_cache_readahead+0x41d/0x4b0
      [12538.067047]        ondemand_readahead+0x44c/0xc10
      [12538.092069]        filemap_fault+0xec1/0x1830
      [12538.111637]        __do_fault+0x82/0x260
      [12538.129216]        do_fault+0x419/0xfb0
      [12538.146390]        __handle_mm_fault+0x862/0xdf0
      [12538.167408]        handle_mm_fault+0x154/0x550
      [12538.187401]        __do_page_fault+0x42f/0xa60
      [12538.207395]        do_page_fault+0x38/0x5e0
      [12538.225777]        page_fault+0x1e/0x30
      [12538.243010]
      [12538.243010] -> #0 (&mm->mmap_sem){++++}:
      [12538.267875]        lock_acquire+0x14c/0x420
      [12538.286848]        __might_fault+0x119/0x1b0
      [12538.306006]        keyring_read_iterator+0x7e/0x170
      [12538.327936]        assoc_array_subtree_iterate+0x97/0x280
      [12538.352154]        keyring_read+0xe9/0x110
      [12538.370558]        keyctl_read_key+0x1b9/0x220
      [12538.391470]        do_syscall_64+0xa5/0x4b0
      [12538.410511]        entry_SYSCALL_64_after_hwframe+0x6a/0xdf
      [12538.435535]
      [12538.435535] other info that might help us debug this:
      [12538.435535]
      [12538.472829] Chain exists of:
      [12538.472829]   &mm->mmap_sem --> root_key_user.cons_lock --> &type->lock_class
      [12538.472829]
      [12538.524820]  Possible unsafe locking scenario:
      [12538.524820]
      [12538.551431]        CPU0                    CPU1
      [12538.572654]        ----                    ----
      [12538.595865]   lock(&type->lock_class);
      [12538.613737]                                lock(root_key_user.cons_lock);
      [12538.644234]                                lock(&type->lock_class);
      [12538.672410]   lock(&mm->mmap_sem);
      [12538.687758]
      [12538.687758]  *** DEADLOCK ***
      [12538.687758]
      [12538.714455] 1 lock held by keyctl/25598:
      [12538.732097]  #0: 000000003de5b58d (&type->lock_class){++++}, at: keyctl_read_key+0x15a/0x220
      [12538.770573]
      [12538.770573] stack backtrace:
      [12538.790136] CPU: 2 PID: 25598 Comm: keyctl Kdump: loaded Tainted: G
      [12538.844855] Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 Gen9, BIOS P89 12/27/2015
      [12538.881963] Call Trace:
      [12538.892897]  dump_stack+0x9a/0xf0
      [12538.907908]  print_circular_bug.isra.25.cold.50+0x1bc/0x279
      [12538.932891]  ? save_trace+0xd6/0x250
      [12538.948979]  check_prev_add.constprop.32+0xc36/0x14f0
      [12538.971643]  ? keyring_compare_object+0x104/0x190
      [12538.992738]  ? check_usage+0x550/0x550
      [12539.009845]  ? sched_clock+0x5/0x10
      [12539.025484]  ? sched_clock_cpu+0x18/0x1e0
      [12539.043555]  __lock_acquire+0x1f12/0x38d0
      [12539.061551]  ? trace_hardirqs_on+0x10/0x10
      [12539.080554]  lock_acquire+0x14c/0x420
      [12539.100330]  ? __might_fault+0xc4/0x1b0
      [12539.119079]  __might_fault+0x119/0x1b0
      [12539.135869]  ? __might_fault+0xc4/0x1b0
      [12539.153234]  keyring_read_iterator+0x7e/0x170
      [12539.172787]  ? keyring_read+0x110/0x110
      [12539.190059]  assoc_array_subtree_iterate+0x97/0x280
      [12539.211526]  keyring_read+0xe9/0x110
      [12539.227561]  ? keyring_gc_check_iterator+0xc0/0xc0
      [12539.249076]  keyctl_read_key+0x1b9/0x220
      [12539.266660]  do_syscall_64+0xa5/0x4b0
      [12539.283091]  entry_SYSCALL_64_after_hwframe+0x6a/0xdf
      
      One way to prevent this deadlock scenario from happening is to not
      allow writing to userspace while holding the key semaphore. Instead,
      an internal buffer is allocated for getting the keys out from the
      read method first before copying them out to userspace without holding
      the lock.
      
      That requires taking out the __user modifier from all the relevant
      read methods as well as additional changes to not use any userspace
      write helpers. That is,
      
        1) The put_user() call is replaced by a direct copy.
        2) The copy_to_user() call is replaced by memcpy().
        3) All the fault handling code is removed.
      
      Compiling on a x86-64 system, the size of the rxrpc_read() function is
      reduced from 3795 bytes to 2384 bytes with this patch.
      
      Fixes: ^1da177e4 ("Linux-2.6.12-rc2")
      Reviewed-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
      Signed-off-by: default avatarWaiman Long <longman@redhat.com>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      badc4863
    • Wen Yang's avatar
      mtd: phram: fix a double free issue in error path · 4537e5c9
      Wen Yang authored
      
      commit 49c64df880570034308e4a9a49c4bc95cf8cdb33 upstream.
      
      The variable 'name' is released multiple times in the error path,
      which may cause double free issues.
      This problem is avoided by adding a goto label to release the memory
      uniformly. And this change also makes the code a bit more cleaner.
      
      Fixes: 4f678a58 ("mtd: fix memory leaks in phram_setup")
      Signed-off-by: default avatarWen Yang <wenyang@linux.alibaba.com>
      Cc: Joern Engel <joern@lazybastard.org>
      Cc: Miquel Raynal <miquel.raynal@bootlin.com>
      Cc: Richard Weinberger <richard@nod.at>
      Cc: Vignesh Raghavendra <vigneshr@ti.com>
      Cc: linux-mtd@lists.infradead.org
      Cc: linux-kernel@vger.kernel.org
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20200318153156.25612-1-wenyang@linux.alibaba.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4537e5c9
    • Dan Carpenter's avatar
      mtd: lpddr: Fix a double free in probe() · 39a2ce24
      Dan Carpenter authored
      
      commit 4da0ea71ea934af18db4c63396ba2af1a679ef02 upstream.
      
      This function is only called from lpddr_probe().  We free "lpddr" both
      here and in the caller, so it's a double free.  The best place to free
      "lpddr" is in lpddr_probe() so let's delete this one.
      
      Fixes: 8dc00439 ("[MTD] LPDDR qinfo probing.")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20200228092554.o57igp3nqhyvf66t@kili.mountain
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      39a2ce24
    • Frieder Schrempf's avatar
      mtd: spinand: Explicitly use MTD_OPS_RAW to write the bad block marker to OOB · 7e8a79a2
      Frieder Schrempf authored
      
      commit 621a7b780bd8b7054647d53d5071961f2c9e0873 upstream.
      
      When writing the bad block marker to the OOB area the access mode
      should be set to MTD_OPS_RAW as it is done for reading the marker.
      Currently this only works because req.mode is initialized to
      MTD_OPS_PLACE_OOB (0) and spinand_write_to_cache_op() checks for
      req.mode != MTD_OPS_AUTO_OOB.
      
      Fix this by explicitly setting req.mode to MTD_OPS_RAW.
      
      Fixes: 7529df46 ("mtd: nand: Add core infrastructure to support SPI NANDs")
      Signed-off-by: default avatarFrieder Schrempf <frieder.schrempf@kontron.de>
      Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20200218100432.32433-3-frieder.schrempf@kontron.de
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7e8a79a2
    • Paul E. McKenney's avatar
      locktorture: Print ratio of acquisitions, not failures · 2e8e2499
      Paul E. McKenney authored
      
      commit 80c503e0e68fbe271680ab48f0fe29bc034b01b7 upstream.
      
      The __torture_print_stats() function in locktorture.c carefully
      initializes local variable "min" to statp[0].n_lock_acquired, but
      then compares it to statp[i].n_lock_fail.  Given that the .n_lock_fail
      field should normally be zero, and given the initialization, it seems
      reasonable to display the maximum and minimum number acquisitions
      instead of miscomputing the maximum and minimum number of failures.
      This commit therefore switches from failures to acquisitions.
      
      And this turns out to be not only a day-zero bug, but entirely my
      own fault.  I hate it when that happens!
      
      Fixes: 0af3fe1e ("locktorture: Add a lock-torture kernel module")
      Reported-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Acked-by: default avatarWill Deacon <will@kernel.org>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Josh Triplett <josh@joshtriplett.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2e8e2499
    • Stephen Rothwell's avatar
      tty: evh_bytechan: Fix out of bounds accesses · 4f21fb22
      Stephen Rothwell authored
      
      commit 3670664b5da555a2a481449b3baafff113b0ac35 upstream.
      
      ev_byte_channel_send() assumes that its third argument is a 16 byte
      array. Some places where it is called it may not be (or we can't
      easily tell if it is). Newer compilers have started producing warnings
      about this, so make sure we actually pass a 16 byte array.
      
      There may be more elegant solutions to this, but the driver is quite
      old and hasn't been updated in many years.
      
      The warnings (from a powerpc allyesconfig build) are:
      
        In file included from include/linux/byteorder/big_endian.h:5,
                         from arch/powerpc/include/uapi/asm/byteorder.h:14,
                         from include/asm-generic/bitops/le.h:6,
                         from arch/powerpc/include/asm/bitops.h:250,
                         from include/linux/bitops.h:29,
                         from include/linux/kernel.h:12,
                         from include/asm-generic/bug.h:19,
                         from arch/powerpc/include/asm/bug.h:109,
                         from include/linux/bug.h:5,
                         from include/linux/mmdebug.h:5,
                         from include/linux/gfp.h:5,
                         from include/linux/slab.h:15,
                         from drivers/tty/ehv_bytechan.c:24:
        drivers/tty/ehv_bytechan.c: In function ‘ehv_bc_udbg_putc’:
        arch/powerpc/include/asm/epapr_hcalls.h:298:20: warning: array subscript 1 is outside array bounds of ‘const char[1]’ [-Warray-bounds]
          298 |  r6 = be32_to_cpu(p[1]);
        include/uapi/linux/byteorder/big_endian.h:40:51: note: in definition of macro ‘__be32_to_cpu’
           40 | #define __be32_to_cpu(x) ((__force __u32)(__be32)(x))
              |                                                   ^
        arch/powerpc/include/asm/epapr_hcalls.h:298:7: note: in expansion of macro ‘be32_to_cpu’
          298 |  r6 = be32_to_cpu(p[1]);
              |       ^~~~~~~~~~~
        drivers/tty/ehv_bytechan.c:166:13: note: while referencing ‘data’
          166 | static void ehv_bc_udbg_putc(char c)
              |             ^~~~~~~~~~~~~~~~
      
      Fixes: dcd83aaf ("tty/powerpc: introduce the ePAPR embedded hypervisor byte channel driver")
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Tested-by: default avatarLaurentiu Tudor <laurentiu.tudor@nxp.com>
      [mpe: Trim warnings from change log]
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200109183912.5fcb52aa@canb.auug.org.au
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4f21fb22
    • Maxime Roussin-Bélanger's avatar
      iio: si1133: read 24-bit signed integer for measurement · 3b3ccd62
      Maxime Roussin-Bélanger authored
      
      commit 328b50e9a0ad1fe8accdf8c19923deebab5e0c01 upstream.
      
      The chip is configured in 24 bit mode. The values read from
      it must always be treated as is. This fixes the issue by
      replacing the previous 16 bits value by a 24 bits buffer.
      
      This changes affects the value output by previous version of
      the driver, since the least significant byte was missing.
      The upper half of 16 bit values previously output are now
      the upper half of a 24 bit value.
      
      Fixes: e01e7eaf ("iio: light: introduce si1133")
      
      Reported-by: default avatarSimon Goyette <simon.goyette@gmail.com>
      Co-authored-by: default avatarGuillaume Champagne <champagne.guillaume.c@gmail.com>
      Signed-off-by: default avatarMaxime Roussin-Bélanger <maxime.roussinbelanger@gmail.com>
      Signed-off-by: default avatarGuillaume Champagne <champagne.guillaume.c@gmail.com>
      Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3b3ccd62
    • Dan Carpenter's avatar
      fbdev: potential information leak in do_fb_ioctl() · 1b46ab83
      Dan Carpenter authored
      
      commit d3d19d6fc5736a798b118971935ce274f7deaa82 upstream.
      
      The "fix" struct has a 2 byte hole after ->ywrapstep and the
      "fix = info->fix;" assignment doesn't necessarily clear it.  It depends
      on the compiler.  The solution is just to replace the assignment with an
      memcpy().
      
      Fixes: 1f5e31d7 ("fbmem: don't call copy_from/to_user() with mutex held")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Andrea Righi <righi.andrea@gmail.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Daniel Thompson <daniel.thompson@linaro.org>
      Cc: Peter Rosin <peda@axentia.se>
      Cc: Jani Nikula <jani.nikula@intel.com>
      Cc: Gerd Hoffmann <kraxel@redhat.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200113100132.ixpaymordi24n3av@kili.mountain
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1b46ab83
    • Florian Fainelli's avatar
      net: dsa: bcm_sf2: Fix overflow checks · 679ca182
      Florian Fainelli authored
      
      commit d0802dc411f469569a537283b6f3833af47aece9 upstream.
      
      Commit f949a12fd697 ("net: dsa: bcm_sf2: fix buffer overflow doing
      set_rxnfc") tried to fix the some user controlled buffer overflows in
      bcm_sf2_cfp_rule_set() and bcm_sf2_cfp_rule_del() but the fix was using
      CFP_NUM_RULES, which while it is correct not to overflow the bitmaps, is
      not representative of what the device actually supports. Correct that by
      using bcm_sf2_cfp_rule_size() instead.
      
      The latter subtracts the number of rules by 1, so change the checks from
      greater than or equal to greater than accordingly.
      
      Fixes: f949a12fd697 ("net: dsa: bcm_sf2: fix buffer overflow doing set_rxnfc")
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      679ca182
    • Chao Yu's avatar
      f2fs: fix to wait all node page writeback · 470c5d09
      Chao Yu authored
      
      [ Upstream commit dc5a941223edd803f476a153abd950cc3a83c3e1 ]
      
      There is a race condition that we may miss to wait for all node pages
      writeback, fix it.
      
      - fsync()				- shrink
       - f2fs_do_sync_file
      					 - __write_node_page
      					  - set_page_writeback(page#0)
      					  : remove DIRTY/TOWRITE flag
        - f2fs_fsync_node_pages
        : won't find page #0 as TOWRITE flag was removeD
        - f2fs_wait_on_node_pages_writeback
        : wont' wait page #0 writeback as it was not in fsync_node_list list.
      					   - f2fs_add_fsync_node_entry
      
      Fixes: 50fa53ec ("f2fs: fix to avoid broken of dnode block list")
      Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      470c5d09
    • Adrian Huang's avatar
      iommu/amd: Fix the configuration of GCR3 table root pointer · 5a442297
      Adrian Huang authored
      
      [ Upstream commit c20f36534666e37858a14e591114d93cc1be0d34 ]
      
      The SPA of the GCR3 table root pointer[51:31] masks 20 bits. However,
      this requires 21 bits (Please see the AMD IOMMU specification).
      This leads to the potential failure when the bit 51 of SPA of
      the GCR3 table root pointer is 1'.
      
      Signed-off-by: default avatarAdrian Huang <ahuang12@lenovo.com>
      Fixes: 52815b75 ("iommu/amd: Add support for IOMMUv2 domain mode")
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5a442297
    • Dan Carpenter's avatar
      libnvdimm: Out of bounds read in __nd_ioctl() · ad92eca5
      Dan Carpenter authored
      
      [ Upstream commit f84afbdd3a9e5e10633695677b95422572f920dc ]
      
      The "cmd" comes from the user and it can be up to 255.  It it's more
      than the number of bits in long, it results out of bounds read when we
      check test_bit(cmd, &cmd_mask).  The highest valid value for "cmd" is
      ND_CMD_CALL (10) so I added a compare against that.
      
      Fixes: 62232e45 ("libnvdimm: control (ioctl) messages for nvdimm_bus and nvdimm devices")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Link: https://lore.kernel.org/r/20200225162055.amtosfy7m35aivxg@kili.mountain
      
      
      Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ad92eca5
    • Jeffery Miller's avatar
      power: supply: axp288_fuel_gauge: Broaden vendor check for Intel Compute Sticks. · c23a320d
      Jeffery Miller authored
      
      [ Upstream commit e42fe5b29ac07210297e75f36deefe54edbdbf80 ]
      
      The Intel Compute Stick `STK1A32SC` can have a system vendor of
      "Intel(R) Client Systems".
      Broaden the Intel Compute Stick DMI checks so that they match "Intel
      Corporation" as well as "Intel(R) Client Systems".
      
      This fixes an issue where the STK1A32SC compute sticks were still
      exposing a battery with the existing blacklist entry.
      
      Signed-off-by: default avatarJeffery Miller <jmiller@neverware.com>
      Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c23a320d
    • Jan Kara's avatar
      ext2: fix debug reference to ext2_xattr_cache · 06fc6bb9
      Jan Kara authored
      
      [ Upstream commit 32302085a8d90859c40cf1a5e8313f575d06ec75 ]
      
      Fix a debug-only build error in ext2/xattr.c:
      
      When building without extra debugging, (and with another patch that uses
      no_printk() instead of <empty> for the ext2-xattr debug-print macros,
      this build error happens:
      
      ../fs/ext2/xattr.c: In function ‘ext2_xattr_cache_insert’:
      ../fs/ext2/xattr.c:869:18: error: ‘ext2_xattr_cache’ undeclared (first use in
      this function); did you mean ‘ext2_xattr_list’?
           atomic_read(&ext2_xattr_cache->c_entry_count));
      
      Fix the problem by removing cached entry count from the debug message
      since otherwise we'd have to export the mbcache structure just for that.
      
      Fixes: be0726d3 ("ext2: convert to mbcache2")
      Reported-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      06fc6bb9
    • Randy Dunlap's avatar
      ext2: fix empty body warnings when -Wextra is used · 918101b3
      Randy Dunlap authored
      [ Upstream commit 44a52022e7f15cbaab957df1c14f7a4f527ef7cf ]
      
      When EXT2_ATTR_DEBUG is not defined, modify the 2 debug macros
      to use the no_printk() macro instead of <nothing>.
      This fixes gcc warnings when -Wextra is used:
      
      ../fs/ext2/xattr.c:252:42: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]
      ../fs/ext2/xattr.c:258:42: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]
      ../fs/ext2/xattr.c:330:42: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]
      ../fs/ext2/xattr.c:872:45: warning: suggest braces around empty body in an ‘else’ statement [-Wempty-body]
      
      I have verified that the only object code change (with gcc 7.5.0) is
      the reversal of some instructions from 'cmp a,b' to 'cmp b,a'.
      
      Link: https://lore.kernel.org/r/e18a7395-61fb-2093-18e8-ed4f8cf56248@infradead.org
      
      
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Cc: Jan Kara <jack@suse.com>
      Cc: linux-ext4@vger.kernel.org
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      918101b3
    • Jacob Pan's avatar
      iommu/vt-d: Fix mm reference leak · 05b16c2c
      Jacob Pan authored
      
      [ Upstream commit 902baf61adf6b187f0a6b789e70d788ea71ff5bc ]
      
      Move canonical address check before mmget_not_zero() to avoid mm
      reference leak.
      
      Fixes: 9d8c3af3 ("iommu/vt-d: IOMMU Page Request needs to check if address is canonical.")
      Signed-off-by: default avatarJacob Pan <jacob.jun.pan@linux.intel.com>
      Acked-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      05b16c2c
    • Nicolas Saenz Julienne's avatar
      drm/vc4: Fix HDMI mode validation · 2279caf3
      Nicolas Saenz Julienne authored
      
      [ Upstream commit b1e7396a1d0e6af6806337fdaaa44098d6b3343c ]
      
      Current mode validation impedes setting up some video modes which should
      be supported otherwise. Namely 1920x1200@60Hz.
      
      Fix this by lowering the minimum HDMI state machine clock to pixel clock
      ratio allowed.
      
      Fixes: 32e823c6 ("drm/vc4: Reject HDMI modes with too high of clocks.")
      Reported-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
      Suggested-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
      Signed-off-by: default avatarNicolas Saenz Julienne <nsaenzjulienne@suse.de>
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200326122001.22215-1-nsaenzjulienne@suse.de
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2279caf3
    • Chao Yu's avatar
      f2fs: fix NULL pointer dereference in f2fs_write_begin() · 488d0223
      Chao Yu authored
      
      [ Upstream commit 62f63eea291b50a5677ae7503ac128803174698a ]
      
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      RIP: 0010:f2fs_write_begin+0x823/0xb90 [f2fs]
      Call Trace:
       f2fs_quota_write+0x139/0x1d0 [f2fs]
       write_blk+0x36/0x80 [quota_tree]
       get_free_dqblk+0x42/0xa0 [quota_tree]
       do_insert_tree+0x235/0x4a0 [quota_tree]
       do_insert_tree+0x26e/0x4a0 [quota_tree]
       do_insert_tree+0x26e/0x4a0 [quota_tree]
       do_insert_tree+0x26e/0x4a0 [quota_tree]
       qtree_write_dquot+0x70/0x190 [quota_tree]
       v2_write_dquot+0x43/0x90 [quota_v2]
       dquot_acquire+0x77/0x100
       f2fs_dquot_acquire+0x2f/0x60 [f2fs]
       dqget+0x310/0x450
       dquot_transfer+0x7e/0x120
       f2fs_setattr+0x11a/0x4a0 [f2fs]
       notify_change+0x349/0x480
       chown_common+0x168/0x1c0
       do_fchownat+0xbc/0xf0
       __x64_sys_fchownat+0x20/0x30
       do_syscall_64+0x5f/0x220
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Passing fsdata parameter to .write_{begin,end} in f2fs_quota_write(),
      so that if quota file is compressed one, we can avoid above NULL
      pointer dereference when updating quota content.
      
      Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      488d0223
    • Trond Myklebust's avatar
      NFS: Fix memory leaks in nfs_pageio_stop_mirroring() · 9bf09280
      Trond Myklebust authored
      
      [ Upstream commit 862f35c94730c9270833f3ad05bd758a29f204ed ]
      
      If we just set the mirror count to 1 without first clearing out
      the mirrors, we can leak queued up requests.
      
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9bf09280
    • Jack Zhang's avatar
      drm/amdkfd: kfree the wrong pointer · 1ccf734a
      Jack Zhang authored
      
      [ Upstream commit 3148a6a0ef3cf93570f30a477292768f7eb5d3c3 ]
      
      Originally, it kfrees the wrong pointer for mem_obj.
      It would cause memory leak under stress test.
      
      Signed-off-by: default avatarJack Zhang <Jack.Zhang1@amd.com>
      Acked-by: default avatarNirmoy Das <nirmoy.das@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1ccf734a
    • Qian Cai's avatar
      x86: ACPI: fix CPU hotplug deadlock · f5d8e5c6
      Qian Cai authored
      
      [ Upstream commit 696ac2e3bf267f5a2b2ed7d34e64131f2287d0ad ]
      
      Similar to commit 0266d81e ("acpi/processor: Prevent cpu hotplug
      deadlock") except this is for acpi_processor_ffh_cstate_probe():
      
      "The problem is that the work is scheduled on the current CPU from the
      hotplug thread associated with that CPU.
      
      It's not required to invoke these functions via the workqueue because
      the hotplug thread runs on the target CPU already.
      
      Check whether current is a per cpu thread pinned on the target CPU and
      invoke the function directly to avoid the workqueue."
      
       WARNING: possible circular locking dependency detected
       ------------------------------------------------------
       cpuhp/1/15 is trying to acquire lock:
       ffffc90003447a28 ((work_completion)(&wfc.work)){+.+.}-{0:0}, at: __flush_work+0x4c6/0x630
      
       but task is already holding lock:
       ffffffffafa1c0e8 (cpuidle_lock){+.+.}-{3:3}, at: cpuidle_pause_and_lock+0x17/0x20
      
       which lock already depends on the new lock.
      
       the existing dependency chain (in reverse order) is:
      
       -> #1 (cpu_hotplug_lock){++++}-{0:0}:
       cpus_read_lock+0x3e/0xc0
       irq_calc_affinity_vectors+0x5f/0x91
       __pci_enable_msix_range+0x10f/0x9a0
       pci_alloc_irq_vectors_affinity+0x13e/0x1f0
       pci_alloc_irq_vectors_affinity at drivers/pci/msi.c:1208
       pqi_ctrl_init+0x72f/0x1618 [smartpqi]
       pqi_pci_probe.cold.63+0x882/0x892 [smartpqi]
       local_pci_probe+0x7a/0xc0
       work_for_cpu_fn+0x2e/0x50
       process_one_work+0x57e/0xb90
       worker_thread+0x363/0x5b0
       kthread+0x1f4/0x220
       ret_from_fork+0x27/0x50
      
       -> #0 ((work_completion)(&wfc.work)){+.+.}-{0:0}:
       __lock_acquire+0x2244/0x32a0
       lock_acquire+0x1a2/0x680
       __flush_work+0x4e6/0x630
       work_on_cpu+0x114/0x160
       acpi_processor_ffh_cstate_probe+0x129/0x250
       acpi_processor_evaluate_cst+0x4c8/0x580
       acpi_processor_get_power_info+0x86/0x740
       acpi_processor_hotplug+0xc3/0x140
       acpi_soft_cpu_online+0x102/0x1d0
       cpuhp_invoke_callback+0x197/0x1120
       cpuhp_thread_fun+0x252/0x2f0
       smpboot_thread_fn+0x255/0x440
       kthread+0x1f4/0x220
       ret_from_fork+0x27/0x50
      
       other info that might help us debug this:
      
       Chain exists of:
       (work_completion)(&wfc.work) --> cpuhp_state-up --> cpuidle_lock
      
       Possible unsafe locking scenario:
      
       CPU0                    CPU1
       ----                    ----
       lock(cpuidle_lock);
                               lock(cpuhp_state-up);
                               lock(cpuidle_lock);
       lock((work_completion)(&wfc.work));
      
       *** DEADLOCK ***
      
       3 locks held by cpuhp/1/15:
       #0: ffffffffaf51ab10 (cpu_hotplug_lock){++++}-{0:0}, at: cpuhp_thread_fun+0x69/0x2f0
       #1: ffffffffaf51ad40 (cpuhp_state-up){+.+.}-{0:0}, at: cpuhp_thread_fun+0x69/0x2f0
       #2: ffffffffafa1c0e8 (cpuidle_lock){+.+.}-{3:3}, at: cpuidle_pause_and_lock+0x17/0x20
      
       Call Trace:
       dump_stack+0xa0/0xea
       print_circular_bug.cold.52+0x147/0x14c
       check_noncircular+0x295/0x2d0
       __lock_acquire+0x2244/0x32a0
       lock_acquire+0x1a2/0x680
       __flush_work+0x4e6/0x630
       work_on_cpu+0x114/0x160
       acpi_processor_ffh_cstate_probe+0x129/0x250
       acpi_processor_evaluate_cst+0x4c8/0x580
       acpi_processor_get_power_info+0x86/0x740
       acpi_processor_hotplug+0xc3/0x140
       acpi_soft_cpu_online+0x102/0x1d0
       cpuhp_invoke_callback+0x197/0x1120
       cpuhp_thread_fun+0x252/0x2f0
       smpboot_thread_fn+0x255/0x440
       kthread+0x1f4/0x220
       ret_from_fork+0x27/0x50
      
      Signed-off-by: default avatarQian Cai <cai@lca.pw>
      Tested-by: default avatarBorislav Petkov <bp@suse.de>
      [ rjw: Subject ]
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f5d8e5c6
    • David Hildenbrand's avatar
      KVM: s390: vsie: Fix possible race when shadowing region 3 tables · b019512c
      David Hildenbrand authored
      
      [ Upstream commit 1493e0f944f3c319d11e067c185c904d01c17ae5 ]
      
      We have to properly retry again by returning -EINVAL immediately in case
      somebody else instantiated the table concurrently. We missed to add the
      goto in this function only. The code now matches the other, similar
      shadowing functions.
      
      We are overwriting an existing region 2 table entry. All allocated pages
      are added to the crst_list to be freed later, so they are not lost
      forever. However, when unshadowing the region 2 table, we wouldn't trigger
      unshadowing of the original shadowed region 3 table that we replaced. It
      would get unshadowed when the original region 3 table is modified. As it's
      not connected to the page table hierarchy anymore, it's not going to get
      used anymore. However, for a limited time, this page table will stick
      around, so it's in some sense a temporary memory leak.
      
      Identified by manual code inspection. I don't think this classifies as
      stable material.
      
      Fixes: 998f637c ("s390/mm: avoid races on region/segment/page table shadowing")
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Link: https://lore.kernel.org/r/20200403153050.20569-4-david@redhat.com
      
      
      Reviewed-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
      Reviewed-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b019512c
    • Vegard Nossum's avatar
      compiler.h: fix error in BUILD_BUG_ON() reporting · d37b5530
      Vegard Nossum authored
      
      [ Upstream commit af9c5d2e3b355854ff0e4acfbfbfadcd5198a349 ]
      
      compiletime_assert() uses __LINE__ to create a unique function name.  This
      means that if you have more than one BUILD_BUG_ON() in the same source
      line (which can happen if they appear e.g.  in a macro), then the error
      message from the compiler might output the wrong condition.
      
      For this source file:
      
      	#include <linux/build_bug.h>
      
      	#define macro() \
      		BUILD_BUG_ON(1); \
      		BUILD_BUG_ON(0);
      
      	void foo()
      	{
      		macro();
      	}
      
      gcc would output:
      
      ./include/linux/compiler.h:350:38: error: call to `__compiletime_assert_9' declared with attribute error: BUILD_BUG_ON failed: 0
        _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
      
      However, it was not the BUILD_BUG_ON(0) that failed, so it should say 1
      instead of 0. With this patch, we use __COUNTER__ instead of __LINE__, so
      each BUILD_BUG_ON() gets a different function name and the correct
      condition is printed:
      
      ./include/linux/compiler.h:350:38: error: call to `__compiletime_assert_0' declared with attribute error: BUILD_BUG_ON failed: 1
        _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
      
      Signed-off-by: default avatarVegard Nossum <vegard.nossum@oracle.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarDaniel Santos <daniel.santos@pobox.com>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Ian Abbott <abbotti@mev.co.uk>
      Cc: Joe Perches <joe@perches.com>
      Link: http://lkml.kernel.org/r/20200331112637.25047-1-vegard.nossum@oracle.com
      
      
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d37b5530
    • Qian Cai's avatar
      percpu_counter: fix a data race at vm_committed_as · 745bf92d
      Qian Cai authored
      
      [ Upstream commit 7e2345200262e4a6056580f0231cccdaffc825f3 ]
      
      "vm_committed_as.count" could be accessed concurrently as reported by
      KCSAN,
      
       BUG: KCSAN: data-race in __vm_enough_memory / percpu_counter_add_batch
      
       write to 0xffffffff9451c538 of 8 bytes by task 65879 on cpu 35:
        percpu_counter_add_batch+0x83/0xd0
        percpu_counter_add_batch at lib/percpu_counter.c:91
        __vm_enough_memory+0xb9/0x260
        dup_mm+0x3a4/0x8f0
        copy_process+0x2458/0x3240
        _do_fork+0xaa/0x9f0
        __do_sys_clone+0x125/0x160
        __x64_sys_clone+0x70/0x90
        do_syscall_64+0x91/0xb05
        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
       read to 0xffffffff9451c538 of 8 bytes by task 66773 on cpu 19:
        __vm_enough_memory+0x199/0x260
        percpu_counter_read_positive at include/linux/percpu_counter.h:81
        (inlined by) __vm_enough_memory at mm/util.c:839
        mmap_region+0x1b2/0xa10
        do_mmap+0x45c/0x700
        vm_mmap_pgoff+0xc0/0x130
        ksys_mmap_pgoff+0x6e/0x300
        __x64_sys_mmap+0x33/0x40
        do_syscall_64+0x91/0xb05
        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      The read is outside percpu_counter::lock critical section which results in
      a data race.  Fix it by adding a READ_ONCE() in
      percpu_counter_read_positive() which could also service as the existing
      compiler memory barrier.
      
      Signed-off-by: default avatarQian Cai <cai@lca.pw>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarMarco Elver <elver@google.com>
      Link: http://lkml.kernel.org/r/1582302724-2804-1-git-send-email-cai@lca.pw
      
      
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      745bf92d
    • Steven Price's avatar
      include/linux/swapops.h: correct guards for non_swap_entry() · 8d70e223
      Steven Price authored
      
      [ Upstream commit 3f3673d7d324d872d9d8ddb73b3e5e47fbf12e0d ]
      
      If CONFIG_DEVICE_PRIVATE is defined, but neither CONFIG_MEMORY_FAILURE nor
      CONFIG_MIGRATION, then non_swap_entry() will return 0, meaning that the
      condition (non_swap_entry(entry) && is_device_private_entry(entry)) in
      zap_pte_range() will never be true even if the entry is a device private
      one.
      
      Equally any other code depending on non_swap_entry() will not function as
      expected.
      
      I originally spotted this just by looking at the code, I haven't actually
      observed any problems.
      
      Looking a bit more closely it appears that actually this situation
      (currently at least) cannot occur:
      
      DEVICE_PRIVATE depends on ZONE_DEVICE
      ZONE_DEVICE depends on MEMORY_HOTREMOVE
      MEMORY_HOTREMOVE depends on MIGRATION
      
      Fixes: 5042db43 ("mm/ZONE_DEVICE: new type of ZONE_DEVICE for unaddressable memory")
      Signed-off-by: default avatarSteven Price <steven.price@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Jérôme Glisse <jglisse@redhat.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: John Hubbard <jhubbard@nvidia.com>
      Link: http://lkml.kernel.org/r/20200305130550.22693-1-steven.price@arm.com
      
      
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8d70e223
    • Long Li's avatar
      cifs: Allocate encryption header through kmalloc · b0e585e5
      Long Li authored
      
      [ Upstream commit 3946d0d04bb360acca72db5efe9ae8440012d9dc ]
      
      When encryption is used, smb2_transform_hdr is defined on the stack and is
      passed to the transport. This doesn't work with RDMA as the buffer needs to
      be DMA'ed.
      
      Fix it by using kmalloc.
      
      Signed-off-by: default avatarLong Li <longli@microsoft.com>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b0e585e5
    • Gabriel Krisman Bertazi's avatar
      um: ubd: Prevent buffer overrun on command completion · f33e37cc
      Gabriel Krisman Bertazi authored
      
      [ Upstream commit 6e682d53fc1ef73a169e2a5300326cb23abb32ee ]
      
      On the hypervisor side, when completing commands and the pipe is full,
      we retry writing only the entries that failed, by offsetting
      io_req_buffer, but we don't reduce the number of bytes written, which
      can cause a buffer overrun of io_req_buffer, and write garbage to the
      pipe.
      
      Cc: Martyn Welch <martyn.welch@collabora.com>
      Signed-off-by: default avatarGabriel Krisman Bertazi <krisman@collabora.com>
      Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f33e37cc
    • Eric Sandeen's avatar
      ext4: do not commit super on read-only bdev · d53bebc2
      Eric Sandeen authored
      
      [ Upstream commit c96e2b8564adfb8ac14469ebc51ddc1bfecb3ae2 ]
      
      Under some circumstances we may encounter a filesystem error on a
      read-only block device, and if we try to save the error info to the
      superblock and commit it, we'll wind up with a noisy error and
      backtrace, i.e.:
      
      [ 3337.146838] EXT4-fs error (device pmem1p2): ext4_get_journal_inode:4634: comm mount: inode #0: comm mount: iget: illegal inode #
      ------------[ cut here ]------------
      generic_make_request: Trying to write to read-only block-device pmem1p2 (partno 2)
      WARNING: CPU: 107 PID: 115347 at block/blk-core.c:788 generic_make_request_checks+0x6b4/0x7d0
      ...
      
      To avoid this, commit the error info in the superblock only if the
      block device is writable.
      
      Reported-by: default avatarRitesh Harjani <riteshh@linux.ibm.com>
      Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
      Reviewed-by: default avatarAndreas Dilger <adilger@dilger.ca>
      Link: https://lore.kernel.org/r/4b6e774d-cc00-3469-7abb-108eb151071a@sandeen.net
      
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d53bebc2
    • Thomas Richter's avatar
      s390/cpum_sf: Fix wrong page count in error message · e0ca1745
      Thomas Richter authored
      
      [ Upstream commit 4141b6a5e9f171325effc36a22eb92bf961e7a5c ]
      
      When perf record -e SF_CYCLES_BASIC_DIAG runs with very high
      frequency, the samples arrive faster than the perf process can
      save them to file. Eventually, for longer running processes, this
      leads to the siutation where the trace buffers allocated by perf
      slowly fills up. At one point the auxiliary trace buffer is full
      and  the CPU Measurement sampling facility is turned off. Furthermore
      a warning is printed to the kernel log buffer:
      
      cpum_sf: The AUX buffer with 0 pages for the diagnostic-sampling
      	mode is full
      
      The number of allocated pages for the auxiliary trace buffer is shown
      as zero pages. That is wrong.
      
      Fix this by saving the number of allocated pages before entering the
      work loop in the interrupt handler. When the interrupt handler processes
      the samples, it may detect the buffer full condition and stop sampling,
      reducing the buffer size to zero.
      Print the correct value in the error message:
      
      cpum_sf: The AUX buffer with 256 pages for the diagnostic-sampling
      	mode is full
      
      Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e0ca1745
    • Nathan Chancellor's avatar
      powerpc/maple: Fix declaration made after definition · 77f81982
      Nathan Chancellor authored
      
      [ Upstream commit af6cf95c4d003fccd6c2ecc99a598fb854b537e7 ]
      
      When building ppc64 defconfig, Clang errors (trimmed for brevity):
      
        arch/powerpc/platforms/maple/setup.c:365:1: error: attribute declaration
        must precede definition [-Werror,-Wignored-attributes]
        machine_device_initcall(maple, maple_cpc925_edac_setup);
        ^
      
      machine_device_initcall expands to __define_machine_initcall, which in
      turn has the macro machine_is used in it, which declares mach_##name
      with an __attribute__((weak)). define_machine actually defines
      mach_##name, which in this file happens before the declaration, hence
      the warning.
      
      To fix this, move define_machine after machine_device_initcall so that
      the declaration occurs before the definition, which matches how
      machine_device_initcall and define_machine work throughout
      arch/powerpc.
      
      While we're here, remove some spaces before tabs.
      
      Fixes: 8f101a05 ("edac: cpc925 MC platform device setup")
      Reported-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Suggested-by: default avatarIlie Halip <ilie.halip@gmail.com>
      Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200323222729.15365-1-natechancellor@gmail.com
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      77f81982
    • Alexander Gordeev's avatar
      s390/cpuinfo: fix wrong output when CPU0 is offline · e75daebd
      Alexander Gordeev authored
      
      [ Upstream commit 872f27103874a73783aeff2aac2b41a489f67d7c ]
      
      /proc/cpuinfo should not print information about CPU 0 when it is offline.
      
      Fixes: 281eaa8c ("s390/cpuinfo: simplify locking and skip offline cpus early")
      Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
      Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      [heiko.carstens@de.ibm.com: shortened commit message]
      Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e75daebd
    • Misono Tomohiro's avatar
      NFS: direct.c: Fix memory leak of dreq when nfs_get_lock_context fails · 12d97eaf
      Misono Tomohiro authored
      
      [ Upstream commit 8605cf0e852af3b2c771c18417499dc4ceed03d5 ]
      
      When dreq is allocated by nfs_direct_req_alloc(), dreq->kref is
      initialized to 2. Therefore we need to call nfs_direct_req_release()
      twice to release the allocated dreq. Usually it is called in
      nfs_file_direct_{read, write}() and nfs_direct_complete().
      
      However, current code only calls nfs_direct_req_relese() once if
      nfs_get_lock_context() fails in nfs_file_direct_{read, write}().
      So, that case would result in memory leak.
      
      Fix this by adding the missing call.
      
      Signed-off-by: default avatarMisono Tomohiro <misono.tomohiro@jp.fujitsu.com>
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      12d97eaf
    • Trond Myklebust's avatar
      NFSv4/pnfs: Return valid stateids in nfs_layout_find_inode_by_stateid() · bcb54d0e
      Trond Myklebust authored
      
      [ Upstream commit d911c57a19551c6bef116a3b55c6b089901aacb0 ]
      
      Make sure to test the stateid for validity so that we catch instances
      where the server may have been reusing stateids in
      nfs_layout_find_inode_by_stateid().
      
      Fixes: 7b410d9c ("pNFS: Delay getting the layout header in CB_LAYOUTRECALL handlers")
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bcb54d0e
    • Alexandre Belloni's avatar
      rtc: 88pm860x: fix possible race condition · 0c91d98d
      Alexandre Belloni authored
      [ Upstream commit 9cf4789e6e4673d0b2c96fa6bb0c35e81b43111a ]
      
      The RTC IRQ is requested before the struct rtc_device is allocated,
      this may lead to a NULL pointer dereference in the IRQ handler.
      
      To fix this issue, allocating the rtc_device struct before requesting
      the RTC IRQ using devm_rtc_allocate_device, and use rtc_register_device
      to register the RTC device.
      
      Also remove the unnecessary error message as the core already prints the
      info.
      
      Link: https://lore.kernel.org/r/20200311223956.51352-1-alexandre.belloni@bootlin.com
      
      
      Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0c91d98d
    • Lucas Stach's avatar
      soc: imx: gpc: fix power up sequencing · 34a082a7
      Lucas Stach authored
      
      [ Upstream commit e0ea2d11f8a08ba7066ff897e16c5217215d1e68 ]
      
      Currently we wait only until the PGC inverts the isolation setting
      before disabling the peripheral clocks. This doesn't ensure that the
      reset is properly propagated through the peripheral devices in the
      power domain.
      
      Wait until the PGC signals that the power up request is done and
      wait a bit for resets to propagate before disabling the clocks.
      
      Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
      Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      34a082a7
    • Sowjanya Komatineni's avatar
      clk: tegra: Fix Tegra PMC clock out parents · b301ccb9
      Sowjanya Komatineni authored
      
      [ Upstream commit 6fe38aa8cac3a5db38154331742835a4d9740788 ]
      
      Tegra PMC clocks clk_out_1, clk_out_2, and clk_out_3 supported parents
      are osc, osc_div2, osc_div4 and extern clock.
      
      Clock driver is using incorrect parents clk_m, clk_m_div2, clk_m_div4
      for PMC clocks.
      
      This patch fixes this.
      
      Tested-by: default avatarDmitry Osipenko <digetx@gmail.com>
      Reviewed-by: default avatarDmitry Osipenko <digetx@gmail.com>
      Signed-off-by: default avatarSowjanya Komatineni <skomatineni@nvidia.com>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b301ccb9
    • Dmitry Osipenko's avatar
      power: supply: bq27xxx_battery: Silence deferred-probe error · c14d2968
      Dmitry Osipenko authored
      
      [ Upstream commit 583b53ece0b0268c542a1eafadb62e3d4b0aab8c ]
      
      The driver fails to probe with -EPROBE_DEFER if battery's power supply
      (charger driver) isn't ready yet and this results in a bit noisy error
      message in KMSG during kernel's boot up. Let's silence the harmless
      error message.
      
      Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
      Reviewed-by: default avatarAndrew F. Davis <afd@ti.com>
      Reviewed-by: default avatarPali Rohár <pali@kernel.org>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c14d2968
    • Claudiu Beznea's avatar
      clk: at91: usb: continue if clk_hw_round_rate() return zero · e055cd28
      Claudiu Beznea authored
      
      [ Upstream commit b0ecf1c6c6e82da4847900fad0272abfd014666d ]
      
      clk_hw_round_rate() may call round rate function of its parents. In case
      of SAM9X60 two of USB parrents are PLLA and UPLL. These clocks are
      controlled by clk-sam9x60-pll.c driver. The round rate function for this
      driver is sam9x60_pll_round_rate() which call in turn
      sam9x60_pll_get_best_div_mul(). In case the requested rate is not in the
      proper range (rate < characteristics->output[0].min &&
      rate > characteristics->output[0].max) the sam9x60_pll_round_rate() will
      return a negative number to its caller (called by
      clk_core_round_rate_nolock()). clk_hw_round_rate() will return zero in
      case a negative number is returned by clk_core_round_rate_nolock(). With
      this, the USB clock will continue its rate computation even caller of
      clk_hw_round_rate() returned an error. With this, the USB clock on SAM9X60
      may not chose the best parent. I detected this after a suspend/resume
      cycle on SAM9X60.
      
      Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea@microchip.com>
      Link: https://lkml.kernel.org/r/1579261009-4573-2-git-send-email-claudiu.beznea@microchip.com
      
      
      Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e055cd28
Loading