commit 899c58731b77ce6bbf991286b016be278a23a2da
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Nov 22 09:56:59 2020 +0100

    Linux 4.4.245
    
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20201120104539.534424264@linuxfoundation.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 668d17c19be400d8353e5e429b93d079ffe0e71d
Author: David Edmondson <david.edmondson@oracle.com>
Date:   Tue Nov 3 12:04:00 2020 +0000

    KVM: x86: clflushopt should be treated as a no-op by emulation
    
    commit 51b958e5aeb1e18c00332e0b37c5d4e95a3eff84 upstream.
    
    The instruction emulator ignores clflush instructions, yet fails to
    support clflushopt. Treat both similarly.
    
    Fixes: 13e457e0eebf ("KVM: x86: Emulator does not decode clflush well")
    Signed-off-by: David Edmondson <david.edmondson@oracle.com>
    Message-Id: <20201103120400.240882-1-david.edmondson@oracle.com>
    Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3942f219f78903799829f6c7fd4f8c9f6a2909a7
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Oct 9 14:17:11 2020 +0200

    mac80211: always wind down STA state
    
    commit dcd479e10a0510522a5d88b29b8f79ea3467d501 upstream.
    
    When (for example) an IBSS station is pre-moved to AUTHORIZED
    before it's inserted, and then the insertion fails, we don't
    clean up the fast RX/TX states that might already have been
    created, since we don't go through all the state transitions
    again on the way down.
    
    Do that, if it hasn't been done already, when the station is
    freed. I considered only freeing the fast TX/RX state there,
    but we might add more state so it's more robust to wind down
    the state properly.
    
    Note that we warn if the station was ever inserted, it should
    have been properly cleaned up in that case, and the driver
    will probably not like things happening out of order.
    
    Reported-by: syzbot+2e293dbd67de2836ba42@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/20201009141710.7223b322a955.I95bd08b9ad0e039c034927cce0b75beea38e059b@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 640ede0a21a0b9bd68e47ccbca87fd747e38ea0a
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon Oct 26 13:36:17 2020 -0700

    Input: sunkbd - avoid use-after-free in teardown paths
    
    commit 77e70d351db7de07a46ac49b87a6c3c7a60fca7e upstream.
    
    We need to make sure we cancel the reinit work before we tear down the
    driver structures.
    
    Reported-by: Bodong Zhao <nopitydays@gmail.com>
    Tested-by: Bodong Zhao <nopitydays@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9ed6dbcb707742e89c5825a3743793ebf50a1bb9
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Mon Oct 12 08:54:31 2020 +0000

    powerpc/8xx: Always fault when _PAGE_ACCESSED is not set
    
    commit 29daf869cbab69088fe1755d9dd224e99ba78b56 upstream.
    
    The kernel expects pte_young() to work regardless of CONFIG_SWAP.
    
    Make sure a minor fault is taken to set _PAGE_ACCESSED when it
    is not already set, regardless of the selection of CONFIG_SWAP.
    
    This adds at least 3 instructions to the TLB miss exception
    handlers fast path. Following patch will reduce this overhead.
    
    Also update the rotation instruction to the correct number of bits
    to reflect all changes done to _PAGE_ACCESSED over time.
    
    Fixes: d069cb4373fe ("powerpc/8xx: Don't touch ACCESSED when no SWAP.")
    Fixes: 5f356497c384 ("powerpc/8xx: remove unused _PAGE_WRITETHRU")
    Fixes: e0a8e0d90a9f ("powerpc/8xx: Handle PAGE_USER via APG bits")
    Fixes: 5b2753fc3e8a ("powerpc/8xx: Implementation of PAGE_EXEC")
    Fixes: a891c43b97d3 ("powerpc/8xx: Prepare handlers for _PAGE_HUGE for 512k pages.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/af834e8a0f1fa97bfae65664950f0984a70c4750.1602492856.git.christophe.leroy@csgroup.eu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f17ef9beebc7c55c5a791aacdc5992880ea15d8c
Author: Dave Chinner <dchinner@redhat.com>
Date:   Tue Apr 17 17:17:34 2018 -0700

    xfs: validate cached inodes are free when allocated
    
    commit afca6c5b2595fc44383919fba740c194b0b76aff upstream
    
    A recent fuzzed filesystem image cached random dcache corruption
    when the reproducer was run. This often showed up as panics in
    lookup_slow() on a null inode->i_ops pointer when doing pathwalks.
    
    BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
    ....
    Call Trace:
     lookup_slow+0x44/0x60
     walk_component+0x3dd/0x9f0
     link_path_walk+0x4a7/0x830
     path_lookupat+0xc1/0x470
     filename_lookup+0x129/0x270
     user_path_at_empty+0x36/0x40
     path_listxattr+0x98/0x110
     SyS_listxattr+0x13/0x20
     do_syscall_64+0xf5/0x280
     entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    but had many different failure modes including deadlocks trying to
    lock the inode that was just allocated or KASAN reports of
    use-after-free violations.
    
    The cause of the problem was a corrupt INOBT on a v4 fs where the
    root inode was marked as free in the inobt record. Hence when we
    allocated an inode, it chose the root inode to allocate, found it in
    the cache and re-initialised it.
    
    We recently fixed a similar inode allocation issue caused by inobt
    record corruption problem in xfs_iget_cache_miss() in commit
    ee457001ed6c ("xfs: catch inode allocation state mismatch
    corruption"). This change adds similar checks to the cache-hit path
    to catch it, and turns the reproducer into a corruption shutdown
    situation.
    
    Reported-by: Wen Xu <wen.xu@gatech.edu>
    Signed-Off-By: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
    Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
    [darrick: fix typos in comment]
    Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
    [sudip: use ip->i_d.di_mode instead of VFS_I(ip)->i_mode]
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1494666927ceba80d44e842dc014850061cc1483
Author: Dave Chinner <dchinner@redhat.com>
Date:   Fri Mar 23 10:22:53 2018 -0700

    xfs: catch inode allocation state mismatch corruption
    
    commit ee457001ed6c6f31ddad69c24c1da8f377d8472d upstream
    
    We recently came across a V4 filesystem causing memory corruption
    due to a newly allocated inode being setup twice and being added to
    the superblock inode list twice. From code inspection, the only way
    this could happen is if a newly allocated inode was not marked as
    free on disk (i.e. di_mode wasn't zero).
    
    Running the metadump on an upstream debug kernel fails during inode
    allocation like so:
    
    XFS: Assertion failed: ip->i_d.di_nblocks == 0, file: fs/xfs/xfs_inod=
    e.c, line: 838
     ------------[ cut here ]------------
    kernel BUG at fs/xfs/xfs_message.c:114!
    invalid opcode: 0000 [#1] PREEMPT SMP
    CPU: 11 PID: 3496 Comm: mkdir Not tainted 4.16.0-rc5-dgc #442
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/0=
    1/2014
    RIP: 0010:assfail+0x28/0x30
    RSP: 0018:ffffc9000236fc80 EFLAGS: 00010202
    RAX: 00000000ffffffea RBX: 0000000000004000 RCX: 0000000000000000
    RDX: 00000000ffffffc0 RSI: 000000000000000a RDI: ffffffff8227211b
    RBP: ffffc9000236fce8 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000bec R11: f000000000000000 R12: ffffc9000236fd30
    R13: ffff8805c76bab80 R14: ffff8805c77ac800 R15: ffff88083fb12e10
    FS:  00007fac8cbff040(0000) GS:ffff88083fd00000(0000) knlGS:0000000000000=
    000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fffa6783ff8 CR3: 00000005c6e2b003 CR4: 00000000000606e0
    Call Trace:
     xfs_ialloc+0x383/0x570
     xfs_dir_ialloc+0x6a/0x2a0
     xfs_create+0x412/0x670
     xfs_generic_create+0x1f7/0x2c0
     ? capable_wrt_inode_uidgid+0x3f/0x50
     vfs_mkdir+0xfb/0x1b0
     SyS_mkdir+0xcf/0xf0
     do_syscall_64+0x73/0x1a0
     entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    Extracting the inode number we crashed on from an event trace and
    looking at it with xfs_db:
    
    xfs_db> inode 184452204
    xfs_db> p
    core.magic = 0x494e
    core.mode = 0100644
    core.version = 2
    core.format = 2 (extents)
    core.nlinkv2 = 1
    core.onlink = 0
    .....
    
    Confirms that it is not a free inode on disk. xfs_repair
    also trips over this inode:
    
    .....
    zero length extent (off = 0, fsbno = 0) in ino 184452204
    correcting nextents for inode 184452204
    bad attribute fork in inode 184452204, would clear attr fork
    bad nblocks 1 for inode 184452204, would reset to 0
    bad anextents 1 for inode 184452204, would reset to 0
    imap claims in-use inode 184452204 is free, would correct imap
    would have cleared inode 184452204
    .....
    disconnected inode 184452204, would move to lost+found
    
    And so we have a situation where the directory structure and the
    inobt thinks the inode is free, but the inode on disk thinks it is
    still in use. Where this corruption came from is not possible to
    diagnose, but we can detect it and prevent the kernel from oopsing
    on lookup. The reproducer now results in:
    
    $ sudo mkdir /mnt/scratch/{0,1,2,3,4,5}{0,1,2,3,4,5}
    mkdir: cannot create directory =E2=80=98/mnt/scratch/00=E2=80=99: File ex=
    ists
    mkdir: cannot create directory =E2=80=98/mnt/scratch/01=E2=80=99: File ex=
    ists
    mkdir: cannot create directory =E2=80=98/mnt/scratch/03=E2=80=99: Structu=
    re needs cleaning
    mkdir: cannot create directory =E2=80=98/mnt/scratch/04=E2=80=99: Input/o=
    utput error
    mkdir: cannot create directory =E2=80=98/mnt/scratch/05=E2=80=99: Input/o=
    utput error
    ....
    
    And this corruption shutdown:
    
    [   54.843517] XFS (loop0): Corruption detected! Free inode 0xafe846c not=
     marked free on disk
    [   54.845885] XFS (loop0): Internal error xfs_trans_cancel at line 1023 =
    of file fs/xfs/xfs_trans.c.  Caller xfs_create+0x425/0x670
    [   54.848994] CPU: 10 PID: 3541 Comm: mkdir Not tainted 4.16.0-rc5-dgc #=
    443
    [   54.850753] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIO=
    S 1.10.2-1 04/01/2014
    [   54.852859] Call Trace:
    [   54.853531]  dump_stack+0x85/0xc5
    [   54.854385]  xfs_trans_cancel+0x197/0x1c0
    [   54.855421]  xfs_create+0x425/0x670
    [   54.856314]  xfs_generic_create+0x1f7/0x2c0
    [   54.857390]  ? capable_wrt_inode_uidgid+0x3f/0x50
    [   54.858586]  vfs_mkdir+0xfb/0x1b0
    [   54.859458]  SyS_mkdir+0xcf/0xf0
    [   54.860254]  do_syscall_64+0x73/0x1a0
    [   54.861193]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
    [   54.862492] RIP: 0033:0x7fb73bddf547
    [   54.863358] RSP: 002b:00007ffdaa553338 EFLAGS: 00000246 ORIG_RAX: 0000=
    000000000053
    [   54.865133] RAX: ffffffffffffffda RBX: 00007ffdaa55449a RCX: 00007fb73=
    bddf547
    [   54.866766] RDX: 0000000000000001 RSI: 00000000000001ff RDI: 00007ffda=
    a55449a
    [   54.868432] RBP: 00007ffdaa55449a R08: 00000000000001ff R09: 00005623a=
    8670dd0
    [   54.870110] R10: 00007fb73be72d5b R11: 0000000000000246 R12: 000000000=
    00001ff
    [   54.871752] R13: 00007ffdaa5534b0 R14: 0000000000000000 R15: 00007ffda=
    a553500
    [   54.873429] XFS (loop0): xfs_do_force_shutdown(0x8) called from line 1=
    024 of file fs/xfs/xfs_trans.c.  Return address = ffffffff814cd050
    [   54.882790] XFS (loop0): Corruption of in-memory data detected.  Shutt=
    ing down filesystem
    [   54.884597] XFS (loop0): Please umount the filesystem and rectify the =
    problem(s)
    
    Note that this crash is only possible on v4 filesystemsi or v5
    filesystems mounted with the ikeep mount option. For all other V5
    filesystems, this problem cannot occur because we don't read inodes
    we are allocating from disk - we simply overwrite them with the new
    inode information.
    
    Signed-Off-By: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
    Tested-by: Carlos Maiolino <cmaiolino@redhat.com>
    Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
    [sudip: use ip->i_d.di_mode instead of VFS_I(ip)->i_mode]
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6e189fea16b3915ac71b6d6fc5fddb3e6f6acacb
Author: Krzysztof Kozlowski <krzk@kernel.org>
Date:   Sun Sep 20 23:12:38 2020 +0200

    i2c: imx: Fix external abort on interrupt in exit paths
    
    commit e50e4f0b85be308a01b830c5fbdffc657e1a6dd0 upstream
    
    If interrupt comes late, during probe error path or device remove (could
    be triggered with CONFIG_DEBUG_SHIRQ), the interrupt handler
    i2c_imx_isr() will access registers with the clock being disabled.  This
    leads to external abort on non-linefetch on Toradex Colibri VF50 module
    (with Vybrid VF5xx):
    
        Unhandled fault: external abort on non-linefetch (0x1008) at 0x8882d003
        Internal error: : 1008 [#1] ARM
        Modules linked in:
        CPU: 0 PID: 1 Comm: swapper Not tainted 5.7.0 #607
        Hardware name: Freescale Vybrid VF5xx/VF6xx (Device Tree)
          (i2c_imx_isr) from [<8017009c>] (free_irq+0x25c/0x3b0)
          (free_irq) from [<805844ec>] (release_nodes+0x178/0x284)
          (release_nodes) from [<80580030>] (really_probe+0x10c/0x348)
          (really_probe) from [<80580380>] (driver_probe_device+0x60/0x170)
          (driver_probe_device) from [<80580630>] (device_driver_attach+0x58/0x60)
          (device_driver_attach) from [<805806bc>] (__driver_attach+0x84/0xc0)
          (__driver_attach) from [<8057e228>] (bus_for_each_dev+0x68/0xb4)
          (bus_for_each_dev) from [<8057f3ec>] (bus_add_driver+0x144/0x1ec)
          (bus_add_driver) from [<80581320>] (driver_register+0x78/0x110)
          (driver_register) from [<8010213c>] (do_one_initcall+0xa8/0x2f4)
          (do_one_initcall) from [<80c0100c>] (kernel_init_freeable+0x178/0x1dc)
          (kernel_init_freeable) from [<80807048>] (kernel_init+0x8/0x110)
          (kernel_init) from [<80100114>] (ret_from_fork+0x14/0x20)
    
    Additionally, the i2c_imx_isr() could wake up the wait queue
    (imx_i2c_struct->queue) before its initialization happens.
    
    The resource-managed framework should not be used for interrupt handling,
    because the resource will be released too late - after disabling clocks.
    The interrupt handler is not prepared for such case.
    
    Fixes: 1c4b6c3bcf30 ("i2c: imx: implement bus recovery")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    [sudip: manual backport with extra label for goto]
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f579da2a8c318e5fd1bef6ad5c300386eff9fe7d
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Fri Nov 20 11:07:04 2020 +1100

    powerpc/64s: flush L1D after user accesses
    
    commit 9a32a7e78bd0cd9a9b6332cbdc345ee5ffd0c5de upstream.
    
    IBM Power9 processors can speculatively operate on data in the L1 cache before
    it has been completely validated, via a way-prediction mechanism. It is not possible
    for an attacker to determine the contents of impermissible memory using this method,
    since these systems implement a combination of hardware and software security measures
    to prevent scenarios where protected data could be leaked.
    
    However these measures don't address the scenario where an attacker induces
    the operating system to speculatively execute instructions using data that the
    attacker controls. This can be used for example to speculatively bypass "kernel
    user access prevention" techniques, as discovered by Anthony Steinhauser of
    Google's Safeside Project. This is not an attack by itself, but there is a possibility
    it could be used in conjunction with side-channels or other weaknesses in the
    privileged code to construct an attack.
    
    This issue can be mitigated by flushing the L1 cache between privilege boundaries
    of concern. This patch flushes the L1 cache after user accesses.
    
    This is part of the fix for CVE-2020-4788.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit be78196243245bf1615a50d3c22bed323a835cf3
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Fri Nov 20 11:07:03 2020 +1100

    powerpc/uaccess: Evaluate macro arguments once, before user access is allowed
    
    commit d02f6b7dab8228487268298ea1f21081c0b4b3eb upstream.
    
    get/put_user() can be called with nontrivial arguments. fs/proc/page.c
    has a good example:
    
        if (put_user(stable_page_flags(ppage), out)) {
    
    stable_page_flags() is quite a lot of code, including spin locks in
    the page allocator.
    
    Ensure these arguments are evaluated before user access is allowed.
    
    This improves security by reducing code with access to userspace, but
    it also fixes a PREEMPT bug with KUAP on powerpc/64s:
    stable_page_flags() is currently called with AMR set to allow writes,
    it ends up calling spin_unlock(), which can call preempt_schedule. But
    the task switch code can not be called with AMR set (it relies on
    interrupts saving the register), so this blows up.
    
    It's fine if the code inside allow_user_access() is preemptible,
    because a timer or IPI will save the AMR, but it's not okay to
    explicitly cause a reschedule.
    
    Fixes: de78a9c42a79 ("powerpc: Add a framework for Kernel Userspace Access Protection")
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20200407041245.600651-1-npiggin@gmail.com
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 452e2a83ea2355ad817c9933aa5b56d2d8423aa5
Author: Andrew Donnellan <ajd@linux.ibm.com>
Date:   Fri Nov 20 11:07:02 2020 +1100

    powerpc: Fix __clear_user() with KUAP enabled
    
    commit 61e3acd8c693a14fc69b824cb5b08d02cb90a6e7 upstream.
    
    The KUAP implementation adds calls in clear_user() to enable and
    disable access to userspace memory. However, it doesn't add these to
    __clear_user(), which is used in the ptrace regset code.
    
    As there's only one direct user of __clear_user() (the regset code),
    and the time taken to set the AMR for KUAP purposes is going to
    dominate the cost of a quick access_ok(), there's not much point
    having a separate path.
    
    Rename __clear_user() to __arch_clear_user(), and make __clear_user()
    just call clear_user().
    
    Reported-by: syzbot+f25ecf4b2982d8c7a640@syzkaller-ppc64.appspotmail.com
    Reported-by: Daniel Axtens <dja@axtens.net>
    Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
    Fixes: de78a9c42a79 ("powerpc: Add a framework for Kernel Userspace Access Protection")
    Signed-off-by: Andrew Donnellan <ajd@linux.ibm.com>
    [mpe: Use __arch_clear_user() for the asm version like arm64 & nds32]
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20191209132221.15328-1-ajd@linux.ibm.com
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 79e649b1c1c9f6a007d0877fad10f638a88c65c9
Author: Christophe Leroy <christophe.leroy@c-s.fr>
Date:   Fri Nov 20 11:07:01 2020 +1100

    powerpc: Implement user_access_begin and friends
    
    commit 5cd623333e7cf4e3a334c70529268b65f2a6c2c7 upstream.
    
    Today, when a function like strncpy_from_user() is called,
    the userspace access protection is de-activated and re-activated
    for every word read.
    
    By implementing user_access_begin and friends, the protection
    is de-activated at the beginning of the copy and re-activated at the
    end.
    
    Implement user_access_begin(), user_access_end() and
    unsafe_get_user(), unsafe_put_user() and unsafe_copy_to_user()
    
    For the time being, we keep user_access_save() and
    user_access_restore() as nops.
    
    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/36d4fbf9e56a75994aca4ee2214c77b26a5a8d35.1579866752.git.christophe.leroy@c-s.fr
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 70c74d463fbf4467ee3d176b8a73b1a59227296e
Author: Christophe Leroy <christophe.leroy@c-s.fr>
Date:   Fri Nov 20 11:07:00 2020 +1100

    powerpc: Add a framework for user access tracking
    
    Backported from commit de78a9c42a79 ("powerpc: Add a framework
    for Kernel Userspace Access Protection"). Here we don't try to
    add the KUAP framework, we just want the helper functions
    because we want to put uaccess flush helpers in them.
    
    In terms of fixes, we don't need commit 1d8f739b07bd ("powerpc/kuap:
    Fix set direction in allow/prevent_user_access()") as we don't have
    real KUAP. Likewise as all our allows are noops and all our prevents
    are just flushes, we don't need commit 9dc086f1e9ef ("powerpc/futex:
    Fix incorrect user access blocking") The other 2 fixes we do need.
    
    The original description is:
    
    This patch implements a framework for Kernel Userspace Access
    Protection.
    
    Then subarches will have the possibility to provide their own
    implementation by providing setup_kuap() and
    allow/prevent_user_access().
    
    Some platforms will need to know the area accessed and whether it is
    accessed from read, write or both. Therefore source, destination and
    size and handed over to the two functions.
    
    mpe: Rename to allow/prevent rather than unlock/lock, and add
    read/write wrappers. Drop the 32-bit code for now until we have an
    implementation for it. Add kuap to pt_regs for 64-bit as well as
    32-bit. Don't split strings, use pr_crit_ratelimited().
    
    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: Russell Currey <ruscur@russell.cc>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4a1e90af718d1489ffcecc8f52486c4f5dc0f7a6
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Fri Nov 20 11:06:59 2020 +1100

    powerpc/64s: flush L1D on kernel entry
    
    commit f79643787e0a0762d2409b7b8334e83f22d85695 upstream.
    
    IBM Power9 processors can speculatively operate on data in the L1 cache before
    it has been completely validated, via a way-prediction mechanism. It is not possible
    for an attacker to determine the contents of impermissible memory using this method,
    since these systems implement a combination of hardware and software security measures
    to prevent scenarios where protected data could be leaked.
    
    However these measures don't address the scenario where an attacker induces
    the operating system to speculatively execute instructions using data that the
    attacker controls. This can be used for example to speculatively bypass "kernel
    user access prevention" techniques, as discovered by Anthony Steinhauser of
    Google's Safeside Project. This is not an attack by itself, but there is a possibility
    it could be used in conjunction with side-channels or other weaknesses in the
    privileged code to construct an attack.
    
    This issue can be mitigated by flushing the L1 cache between privilege boundaries
    of concern. This patch flushes the L1 cache on kernel entry.
    
    This is part of the fix for CVE-2020-4788.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f65bd491ca41e2a19edc92715ddb04e87cca0db9
Author: Daniel Axtens <dja@axtens.net>
Date:   Fri Nov 20 11:06:58 2020 +1100

    powerpc/64s: move some exception handlers out of line
    
    (backport only)
    
    We're about to grow the exception handlers, which will make a bunch of them
    no longer fit within the space available. We move them out of line.
    
    This is a fiddly and error-prone business, so in the interests of reviewability
    I haven't merged this in with the addition of the entry flush.
    
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 39901d249eade12ff1251636078ddf146dde946a
Author: Daniel Axtens <dja@axtens.net>
Date:   Fri Nov 20 11:06:57 2020 +1100

    powerpc/64s: Define MASKABLE_RELON_EXCEPTION_PSERIES_OOL
    
    Add a definition provided by mpe and fixed up for 4.4. It doesn't exist
    for 4.4 and we'd quite like to use it.
    
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>