commit 82dddebfe7da9d2670977ab723da2fdac3eff5b0
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 27 16:42:03 2020 +0200

    Linux 4.9.225

commit 5bb2fcf9eb24fe9aea2daafcca1e1694e1d85da0
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Wed May 6 05:52:06 2020 +0200

    iio: sca3000: Remove an erroneous 'get_device()'
    
    [ Upstream commit 928edefbc18cd8433f7df235c6e09a9306e7d580 ]
    
    This looks really unusual to have a 'get_device()' hidden in a 'dev_err()'
    call.
    Remove it.
    
    While at it add a missing \n at the end of the message.
    
    Fixes: 574fb258d636 ("Staging: IIO: VTI sca3000 series accelerometer driver (spi)")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ba324dbbc25fa83c3e569a5f43b0bd69350ae722
Author: John Hubbard <jhubbard@nvidia.com>
Date:   Fri May 22 22:22:48 2020 -0700

    rapidio: fix an error in get_user_pages_fast() error handling
    
    commit ffca476a0a8d26de767cc41d62b8ca7f540ecfdd upstream.
    
    In the case of get_user_pages_fast() returning fewer pages than
    requested, rio_dma_transfer() does not quite do the right thing.  It
    attempts to release all the pages that were requested, rather than just
    the pages that were pinned.
    
    Fix the error handling so that only the pages that were successfully
    pinned are released.
    
    Fixes: e8de370188d0 ("rapidio: add mport char device driver")
    Signed-off-by: John Hubbard <jhubbard@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
    Cc: Matt Porter <mporter@kernel.crashing.org>
    Cc: Alexandre Bounine <alex.bou9@gmail.com>
    Cc: Sumit Semwal <sumit.semwal@linaro.org>
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Cc: <stable@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20200517235620.205225-2-jhubbard@nvidia.com
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ca2e298cb7ebb1bb3725f6492892057d3b5d70a0
Author: Alexander Usyskin <alexander.usyskin@intel.com>
Date:   Wed May 13 01:31:40 2020 +0300

    mei: release me_cl object reference
    
    commit fc9c03ce30f79b71807961bfcb42be191af79873 upstream.
    
    Allow me_cl object to be freed by releasing the reference
    that was acquired  by one of the search functions:
    __mei_me_cl_by_uuid_id() or __mei_me_cl_by_uuid()
    
    Cc: <stable@vger.kernel.org>
    Reported-by: 亿一 <teroincn@gmail.com>
    Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
    Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
    Link: https://lore.kernel.org/r/20200512223140.32186-1-tomas.winkler@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 119590e9db9738f274343fac14ad4109d957f364
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Apr 26 21:44:03 2020 +0200

    iio: dac: vf610: Fix an error handling path in 'vf610_dac_probe()'
    
    commit aad4742fbf0a560c25827adb58695a4497ffc204 upstream.
    
    A call to 'vf610_dac_exit()' is missing in an error handling path.
    
    Fixes: 1b983bf42fad ("iio: dac: vf610_dac: Add IIO DAC driver for Vybrid SoC")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b193514ac4befbe45cad13abfe8f7df3e1e3e92a
Author: Oscar Carter <oscar.carter@gmx.com>
Date:   Sun May 10 12:14:26 2020 +0200

    staging: greybus: Fix uninitialized scalar variable
    
    commit 34625c1931f8204c234c532b446b9f53c69f4b68 upstream.
    
    In the "gb_tty_set_termios" function the "newline" variable is declared
    but not initialized. So the "flow_control" member is not initialized and
    the OR / AND operations with itself results in an undefined value in
    this member.
    
    The purpose of the code is to set the flow control type, so remove the
    OR / AND self operator and set the value directly.
    
    Addresses-Coverity-ID: 1374016 ("Uninitialized scalar variable")
    Fixes: e55c25206d5c9 ("greybus: uart: Handle CRTSCTS flag in termios")
    Signed-off-by: Oscar Carter <oscar.carter@gmx.com>
    Cc: stable <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20200510101426.23631-1-oscar.carter@gmx.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 15e86bf56dc28d43656c5e3a910e689dd7301a40
Author: Dragos Bogdan <dragos.bogdan@analog.com>
Date:   Wed Apr 29 10:21:29 2020 +0300

    staging: iio: ad2s1210: Fix SPI reading
    
    commit 5e4f99a6b788047b0b8a7496c2e0c8f372f6edf2 upstream.
    
    If the serial interface is used, the 8-bit address should be latched using
    the rising edge of the WR/FSYNC signal.
    
    This basically means that a CS change is required between the first byte
    sent, and the second one.
    This change splits the single-transfer transfer of 2 bytes into 2 transfers
    with a single byte, and CS change in-between.
    
    Note fixes tag is not accurate, but reflects a point beyond which there
    are too many refactors to make backporting straight forward.
    
    Fixes: b19e9ad5e2cb ("staging:iio:resolver:ad2s1210 general driver cleanup.")
    Signed-off-by: Dragos Bogdan <dragos.bogdan@analog.com>
    Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f085290608d81f76b36687b595f8eb6d49467e73
Author: Bob Peterson <rpeterso@redhat.com>
Date:   Fri May 8 15:01:25 2020 -0500

    Revert "gfs2: Don't demote a glock until its revokes are written"
    
    [ Upstream commit b14c94908b1b884276a6608dea3d0b1b510338b7 ]
    
    This reverts commit df5db5f9ee112e76b5202fbc331f990a0fc316d6.
    
    This patch fixes a regression: patch df5db5f9ee112 allowed function
    run_queue() to bypass its call to do_xmote() if revokes were queued for
    the glock. That's wrong because its call to do_xmote() is what is
    responsible for calling the go_sync() glops functions to sync both
    the ail list and any revokes queued for it. By bypassing the call,
    gfs2 could get into a stand-off where the glock could not be demoted
    until its revokes are written back, but the revokes would not be
    written back because do_xmote() was never called.
    
    It "sort of" works, however, because there are other mechanisms like
    the log flush daemon (logd) that can sync the ail items and revokes,
    if it deems it necessary. The problem is: without file system pressure,
    it might never deem it necessary.
    
    Signed-off-by: Bob Peterson <rpeterso@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 51077718a61ee9ef654e37811fe5fab5f80e60e8
Author: Arjun Vynipadath <arjun@chelsio.com>
Date:   Tue Nov 20 12:11:39 2018 +0530

    cxgb4/cxgb4vf: Fix mac_hlist initialization and free
    
    [ Upstream commit b539ea60f5043b9acd7562f04fa2117f18776cbb ]
    
    Null pointer dereference seen when cxgb4vf driver is unloaded
    without bringing up any interfaces, moving mac_hlist initialization
    to driver probe and free the mac_hlist in remove to fix the issue.
    
    Fixes: 24357e06ba51 ("cxgb4vf: fix memleak in mac_hlist initialization")
    Signed-off-by: Arjun Vynipadath <arjun@chelsio.com>
    Signed-off-by: Casey Leedom <leedom@chelsio.com>
    Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 138545f91bb6b766322007b40bf1200253b8e65b
Author: Arjun Vynipadath <arjun@chelsio.com>
Date:   Fri Nov 9 14:50:25 2018 +0530

    cxgb4: free mac_hlist properly
    
    [ Upstream commit 2a8d84bf513823ba398f4b2dec41b8decf4041af ]
    
    The locally maintained list for tracking hash mac table was
    not freed during driver remove.
    
    Signed-off-by: Arjun Vynipadath <arjun@chelsio.com>
    Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit da9de008fb6a9b2c0161712ec4f708f1e96b0327
Author: Vishal Verma <vishal.l.verma@intel.com>
Date:   Wed Feb 27 17:06:26 2019 -0700

    libnvdimm/btt: Remove unnecessary code in btt_freelist_init
    
    [ Upstream commit 2f8c9011151337d0bc106693f272f9bddbccfab2 ]
    
    We call btt_log_read() twice, once to get the 'old' log entry, and again
    to get the 'new' entry. However, we have no use for the 'old' entry, so
    remove it.
    
    Cc: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 5307944aa5e4942670ba9dcf8d9184e49c077ce2
Author: Colin Ian King <colin.king@canonical.com>
Date:   Sat Mar 30 00:17:12 2019 +0000

    platform/x86: alienware-wmi: fix kfree on potentially uninitialized pointer
    
    commit 98e2630284ab741804bd0713e932e725466f2f84 upstream.
    
    Currently the kfree of output.pointer can be potentially freeing
    an uninitalized pointer in the case where out_data is NULL. Fix this
    by reworking the case where out_data is not-null to perform the
    ACPI status check and also the kfree of outpoint.pointer in one block
    and hence ensuring the pointer is only freed when it has been used.
    
    Also replace the if (ptr != NULL) idiom with just if (ptr).
    
    Fixes: ff0e9f26288d ("platform/x86: alienware-wmi: Correct a memory leak")
    Signed-off-by: Colin Ian King <colin.king@canonical.com>
    Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eff8c0335c31624795ce687845e5a66be9c3a73f
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Aug 2 21:48:58 2019 -0700

    ubsan: build ubsan.c more conservatively
    
    commit af700eaed0564d5d3963a7a51cb0843629d7fe3d upstream.
    
    objtool points out several conditions that it does not like, depending
    on the combination with other configuration options and compiler
    variants:
    
    stack protector:
      lib/ubsan.o: warning: objtool: __ubsan_handle_type_mismatch()+0xbf: call to __stack_chk_fail() with UACCESS enabled
      lib/ubsan.o: warning: objtool: __ubsan_handle_type_mismatch_v1()+0xbe: call to __stack_chk_fail() with UACCESS enabled
    
    stackleak plugin:
      lib/ubsan.o: warning: objtool: __ubsan_handle_type_mismatch()+0x4a: call to stackleak_track_stack() with UACCESS enabled
      lib/ubsan.o: warning: objtool: __ubsan_handle_type_mismatch_v1()+0x4a: call to stackleak_track_stack() with UACCESS enabled
    
    kasan:
      lib/ubsan.o: warning: objtool: __ubsan_handle_type_mismatch()+0x25: call to memcpy() with UACCESS enabled
      lib/ubsan.o: warning: objtool: __ubsan_handle_type_mismatch_v1()+0x25: call to memcpy() with UACCESS enabled
    
    The stackleak and kasan options just need to be disabled for this file
    as we do for other files already.  For the stack protector, we already
    attempt to disable it, but this fails on clang because the check is
    mixed with the gcc specific -fno-conserve-stack option.  According to
    Andrey Ryabinin, that option is not even needed, dropping it here fixes
    the stackprotector issue.
    
    Link: http://lkml.kernel.org/r/20190722125139.1335385-1-arnd@arndb.de
    Link: https://lore.kernel.org/lkml/20190617123109.667090-1-arnd@arndb.de/t/
    Link: https://lore.kernel.org/lkml/20190722091050.2188664-1-arnd@arndb.de/t/
    Fixes: d08965a27e84 ("x86/uaccess, ubsan: Fix UBSAN vs. SMAP")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bd44630a88e86d1f7cea808d1264a82ce6d1d522
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Wed Apr 3 09:40:16 2019 +0200

    x86/uaccess, ubsan: Fix UBSAN vs. SMAP
    
    commit d08965a27e84ca090b504844d50c24fc98587b11 upstream.
    
    UBSAN can insert extra code in random locations; including AC=1
    sections. Typically this code is not safe and needs wrapping.
    
    So far, only __ubsan_handle_type_mismatch* have been observed in AC=1
    sections and therefore only those are annotated.
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [stable backport: only take the lib/Makefile change to resolve gcc-10
     build issues]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e6cfc1098ef08ba5d1398f1d9c21530538d9005b
Author: R. Parameswaran <parameswaran.r7@gmail.com>
Date:   Wed Apr 12 18:31:04 2017 -0700

    l2tp: device MTU setup, tunnel socket needs a lock
    
    commit 57240d007816486131bee88cd474c2a71f0fe224 upstream.
    
    The MTU overhead calculation in L2TP device set-up
    merged via commit b784e7ebfce8cfb16c6f95e14e8532d0768ab7ff
    needs to be adjusted to lock the tunnel socket while
    referencing the sub-data structures to derive the
    socket's IP overhead.
    
    Reported-by: Guillaume Nault <g.nault@alphalink.fr>
    Tested-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: R. Parameswaran <rparames@brocade.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6ec8ac2b45c0d92fb5650b60feb19d9c4c17b70d
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 16 23:42:05 2020 +0200

    dmaengine: tegra210-adma: Fix an error handling path in 'tegra_adma_probe()'
    
    commit 3a5fd0dbd87853f8bd2ea275a5b3b41d6686e761 upstream.
    
    Commit b53611fb1ce9 ("dmaengine: tegra210-adma: Fix crash during probe")
    has moved some code in the probe function and reordered the error handling
    path accordingly.
    However, a goto has been missed.
    
    Fix it and goto the right label if 'dma_async_device_register()' fails, so
    that all resources are released.
    
    Fixes: b53611fb1ce9 ("dmaengine: tegra210-adma: Fix crash during probe")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://lore.kernel.org/r/20200516214205.276266-1-christophe.jaillet@wanadoo.fr
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bf77564f845b4ac67003044244220aa3414c8474
Author: Brent Lu <brent.lu@intel.com>
Date:   Mon May 18 12:30:38 2020 +0800

    ALSA: pcm: fix incorrect hw_base increase
    
    commit e7513c5786f8b33f0c107b3759e433bc6cbb2efa upstream.
    
    There is a corner case that ALSA keeps increasing the hw_ptr but DMA
    already stop working/updating the position for a long time.
    
    In following log we can see the position returned from DMA driver does
    not move at all but the hw_ptr got increased at some point of time so
    snd_pcm_avail() will return a large number which seems to be a buffer
    underrun event from user space program point of view. The program
    thinks there is space in the buffer and fill more data.
    
    [  418.510086] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 4096 avail 12368
    [  418.510149] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 6910 avail 9554
    ...
    [  418.681052] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 15102 avail 1362
    [  418.681130] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 16464 avail 0
    [  418.726515] sound pcmC0D5p: pos 96 hw_ptr 16464 appl_ptr 16464 avail 16368
    
    This is because the hw_base will be increased by runtime->buffer_size
    frames unconditionally if the hw_ptr is not updated for over half of
    buffer time. As the hw_base increases, so does the hw_ptr increased
    by the same number.
    
    The avail value returned from snd_pcm_avail() could exceed the limit
    (buffer_size) easily becase the hw_ptr itself got increased by same
    buffer_size samples when the corner case happens. In following log,
    the buffer_size is 16368 samples but the avail is 21810 samples so
    CRAS server complains about it.
    
    [  418.851755] sound pcmC0D5p: pos 96 hw_ptr 16464 appl_ptr 27390 avail 5442
    [  418.926491] sound pcmC0D5p: pos 96 hw_ptr 32832 appl_ptr 27390 avail 21810
    
    cras_server[1907]: pcm_avail returned frames larger than buf_size:
    sof-glkda7219max: :0,5: 21810 > 16368
    
    By updating runtime->hw_ptr_jiffies each time the HWSYNC is called,
    the hw_base will keep the same when buffer stall happens at long as
    the interval between each HWSYNC call is shorter than half of buffer
    time.
    
    Following is a log captured by a patched kernel. The hw_base/hw_ptr
    value is fixed in this corner case and user space program should be
    aware of the buffer stall and handle it.
    
    [  293.525543] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 4096 avail 12368
    [  293.525606] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 6880 avail 9584
    [  293.525975] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 10976 avail 5488
    [  293.611178] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 15072 avail 1392
    [  293.696429] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 16464 avail 0
    ...
    [  381.139517] sound pcmC0D5p: pos 96 hw_ptr 96 appl_ptr 16464 avail 0
    
    Signed-off-by: Brent Lu <brent.lu@intel.com>
    Reviewed-by: Jaroslav Kysela <perex@perex.cz>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/1589776238-23877-1-git-send-email-brent.lu@intel.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ad6c13e25f89f41d417b9280ca7065175ead1a94
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:37 2020 +0100

    l2tp: initialise PPP sessions before registering them
    
    commit f98be6c6359e7e4a61aaefb9964c1db31cb9ec0c upstream.
    
    pppol2tp_connect() initialises L2TP sessions after they've been exposed
    to the rest of the system by l2tp_session_register(). This puts
    sessions into transient states that are the source of several races, in
    particular with session's deletion path.
    
    This patch centralises the initialisation code into
    pppol2tp_session_init(), which is called before the registration phase.
    The only field that can't be set before session registration is the
    pppol2tp socket pointer, which has already been converted to RCU. So
    pppol2tp_connect() should now be race-free.
    
    The session's .session_close() callback is now set before registration.
    Therefore, it's always called when l2tp_core deletes the session, even
    if it was created by pppol2tp_session_create() and hasn't been plugged
    to a pppol2tp socket yet. That'd prevent session free because the extra
    reference taken by pppol2tp_session_close() wouldn't be dropped by the
    socket's ->sk_destruct() callback (pppol2tp_session_destruct()).
    We could set .session_close() only while connecting a session to its
    pppol2tp socket, or teach pppol2tp_session_close() to avoid grabbing a
    reference when the session isn't connected, but that'd require adding
    some form of synchronisation to be race free.
    
    Instead of that, we can just let the pppol2tp socket hold a reference
    on the session as soon as it starts depending on it (that is, in
    pppol2tp_connect()). Then we don't need to utilise
    pppol2tp_session_close() to hold a reference at the last moment to
    prevent l2tp_core from dropping it.
    
    When releasing the socket, pppol2tp_release() now deletes the session
    using the standard l2tp_session_delete() function, instead of merely
    removing it from hash tables. l2tp_session_delete() drops the reference
    the sessions holds on itself, but also makes sure it doesn't remove a
    session twice. So it can safely be called, even if l2tp_core already
    tried, or is concurrently trying, to remove the session.
    Finally, pppol2tp_session_destruct() drops the reference held by the
    socket.
    
    Fixes: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5803ecd7f6ac6f747582e775caa62ac9d0489261
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:36 2020 +0100

    l2tp: protect sock pointer of struct pppol2tp_session with RCU
    
    commit ee40fb2e1eb5bc0ddd3f2f83c6e39a454ef5a741 upstream.
    
    pppol2tp_session_create() registers sessions that can't have their
    corresponding socket initialised. This socket has to be created by
    userspace, then connected to the session by pppol2tp_connect().
    Therefore, we need to protect the pppol2tp socket pointer of L2TP
    sessions, so that it can safely be updated when userspace is connecting
    or closing the socket. This will eventually allow pppol2tp_connect()
    to avoid generating transient states while initialising its parts of the
    session.
    
    To this end, this patch protects the pppol2tp socket pointer using RCU.
    
    The pppol2tp socket pointer is still set in pppol2tp_connect(), but
    only once we know the function isn't going to fail. It's eventually
    reset by pppol2tp_release(), which now has to wait for a grace period
    to elapse before it can drop the last reference on the socket. This
    ensures that pppol2tp_session_get_sock() can safely grab a reference
    on the socket, even after ps->sk is reset to NULL but before this
    operation actually gets visible from pppol2tp_session_get_sock().
    
    The rest is standard RCU conversion: pppol2tp_recv(), which already
    runs in atomic context, is simply enclosed by rcu_read_lock() and
    rcu_read_unlock(), while other functions are converted to use
    pppol2tp_session_get_sock() followed by sock_put().
    pppol2tp_session_setsockopt() is a special case. It used to retrieve
    the pppol2tp socket from the L2TP session, which itself was retrieved
    from the pppol2tp socket. Therefore we can just avoid dereferencing
    ps->sk and directly use the original socket pointer instead.
    
    With all users of ps->sk now handling NULL and concurrent updates, the
    L2TP ->ref() and ->deref() callbacks aren't needed anymore. Therefore,
    rather than converting pppol2tp_session_sock_hold() and
    pppol2tp_session_sock_put(), we can just drop them.
    
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 96985edde9dfe3c1a5b0251842ca400274b287ed
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:35 2020 +0100

    l2tp: initialise l2tp_eth sessions before registering them
    
    commit ee28de6bbd78c2e18111a0aef43ea746f28d2073 upstream.
    
    Sessions must be initialised before being made externally visible by
    l2tp_session_register(). Otherwise the session may be concurrently
    deleted before being initialised, which can confuse the deletion path
    and eventually lead to kernel oops.
    
    Therefore, we need to move l2tp_session_register() down in
    l2tp_eth_create(), but also handle the intermediate step where only the
    session or the netdevice has been registered.
    
    We can't just call l2tp_session_register() in ->ndo_init() because
    we'd have no way to properly undo this operation in ->ndo_uninit().
    Instead, let's register the session and the netdevice in two different
    steps and protect the session's device pointer with RCU.
    
    And now that we allow the session's .dev field to be NULL, we don't
    need to prevent the netdevice from being removed anymore. So we can
    drop the dev_hold() and dev_put() calls in l2tp_eth_create() and
    l2tp_eth_dev_uninit().
    
    Backporting Notes
    
    l2tp_eth.c: In l2tp_eth_create the "out" label was renamed to "err".
    There was one extra occurrence of "goto out" to update.
    
    Fixes: d9e31d17ceba ("l2tp: Add L2TP ethernet pseudowire support")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 12b5fb58ac993c24210cf8cbc72d407d3a4e6490
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:34 2020 +0100

    l2tp: don't register sessions in l2tp_session_create()
    
    commit 3953ae7b218df4d1e544b98a393666f9ae58a78c upstream.
    
    Sessions created by l2tp_session_create() aren't fully initialised:
    some pseudo-wire specific operations need to be done before making the
    session usable. Therefore the PPP and Ethernet pseudo-wires continue
    working on the returned l2tp session while it's already been exposed to
    the rest of the system.
    This can lead to various issues. In particular, the session may enter
    the deletion process before having been fully initialised, which will
    confuse the session removal code.
    
    This patch moves session registration out of l2tp_session_create(), so
    that callers can control when the session is exposed to the rest of the
    system. This is done by the new l2tp_session_register() function.
    
    Only pppol2tp_session_create() can be easily converted to avoid
    modifying its session after registration (the debug message is dropped
    in order to avoid the need for holding a reference on the session).
    
    For pppol2tp_connect() and l2tp_eth_create()), more work is needed.
    That'll be done in followup patches. For now, let's just register the
    session right after its creation, like it was done before. The only
    difference is that we can easily take a reference on the session before
    registering it, so, at least, we're sure it's not going to be freed
    while we're working on it.
    
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1ede832fb82fbda56c1bd7c57fb581dfab9c6e49
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:33 2020 +0100

    l2tp: fix l2tp_eth module loading
    
    commit 9f775ead5e570e7e19015b9e4e2f3dd6e71a5935 upstream.
    
    The l2tp_eth module crashes if its netlink callbacks are run when the
    pernet data aren't initialised.
    
    We should normally register_pernet_device() before the genl callbacks.
    However, the pernet data only maintain a list of l2tpeth interfaces,
    and this list is never used. So let's just drop pernet handling
    instead.
    
    Fixes: d9e31d17ceba ("l2tp: Add L2TP ethernet pseudowire support")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit feaed88dccc4742805c41260040103fa8a7f0df2
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:32 2020 +0100

    l2tp: pass tunnel pointer to ->session_create()
    
    commit f026bc29a8e093edfbb2a77700454b285c97e8ad upstream.
    
    Using l2tp_tunnel_find() in pppol2tp_session_create() and
    l2tp_eth_create() is racy, because no reference is held on the
    returned session. These functions are only used to implement the
    ->session_create callback which is run by l2tp_nl_cmd_session_create().
    Therefore searching for the parent tunnel isn't necessary because
    l2tp_nl_cmd_session_create() already has a pointer to it and holds a
    reference.
    
    This patch modifies ->session_create()'s prototype to directly pass the
    the parent tunnel as parameter, thus avoiding searching for it in
    pppol2tp_session_create() and l2tp_eth_create().
    
    Since we have to touch the ->session_create() call in
    l2tp_nl_cmd_session_create(), let's also remove the useless conditional:
    we know that ->session_create isn't NULL at this point because it's
    already been checked earlier in this same function.
    
    Finally, one might be tempted to think that the removed
    l2tp_tunnel_find() calls were harmless because they would return the
    same tunnel as the one held by l2tp_nl_cmd_session_create() anyway.
    But that tunnel might be removed and a new one created with same tunnel
    Id before the l2tp_tunnel_find() call. In this case l2tp_tunnel_find()
    would return the new tunnel which wouldn't be protected by the
    reference held by l2tp_nl_cmd_session_create().
    
    Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
    Fixes: d9e31d17ceba ("l2tp: Add L2TP ethernet pseudowire support")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 880cd40d130cf08df6e1be87e5e8a082cac60cda
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:31 2020 +0100

    l2tp: prevent creation of sessions on terminated tunnels
    
    commit f3c66d4e144a0904ea9b95d23ed9f8eb38c11bfb upstream.
    
    l2tp_tunnel_destruct() sets tunnel->sock to NULL, then removes the
    tunnel from the pernet list and finally closes all its sessions.
    Therefore, it's possible to add a session to a tunnel that is still
    reachable, but for which tunnel->sock has already been reset. This can
    make l2tp_session_create() dereference a NULL pointer when calling
    sock_hold(tunnel->sock).
    
    This patch adds the .acpt_newsess field to struct l2tp_tunnel, which is
    used by l2tp_tunnel_closeall() to prevent addition of new sessions to
    tunnels. Resetting tunnel->sock is done after l2tp_tunnel_closeall()
    returned, so that l2tp_session_add_to_tunnel() can safely take a
    reference on it when .acpt_newsess is true.
    
    The .acpt_newsess field is modified in l2tp_tunnel_closeall(), rather
    than in l2tp_tunnel_destruct(), so that it benefits all tunnel removal
    mechanisms. E.g. on UDP tunnels, a session could be added to a tunnel
    after l2tp_udp_encap_destroy() proceeded. This would prevent the tunnel
    from being removed because of the references held by this new session
    on the tunnel and its socket. Even though the session could be removed
    manually later on, this defeats the purpose of
    commit 9980d001cec8 ("l2tp: add udp encap socket destroy handler").
    
    Fixes: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e20c980a2bf6991507d70ff7d221af394db07c76
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:30 2020 +0100

    l2tp: hold tunnel used while creating sessions with netlink
    
    commit e702c1204eb57788ef189c839c8c779368267d70 upstream.
    
    Use l2tp_tunnel_get() to retrieve tunnel, so that it can't go away on
    us. Otherwise l2tp_tunnel_destruct() might release the last reference
    count concurrently, thus freeing the tunnel while we're using it.
    
    Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4c15cdb962d27d5b095fd444156c0746993df377
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:29 2020 +0100

    l2tp: hold tunnel while handling genl TUNNEL_GET commands
    
    commit 4e4b21da3acc68a7ea55f850cacc13706b7480e9 upstream.
    
    Use l2tp_tunnel_get() instead of l2tp_tunnel_find() so that we get
    a reference on the tunnel, preventing l2tp_tunnel_destruct() from
    freeing it from under us.
    
    Also move l2tp_tunnel_get() below nlmsg_new() so that we only take
    the reference when needed.
    
    Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 00cf4055d5a14584833a2b355d846a56f74ce96b
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:28 2020 +0100

    l2tp: hold tunnel while handling genl tunnel updates
    
    commit 8c0e421525c9eb50d68e8f633f703ca31680b746 upstream.
    
    We need to make sure the tunnel is not going to be destroyed by
    l2tp_tunnel_destruct() concurrently.
    
    Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0b21fa707d1fc1b229020c468fefa0aa46d9e266
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:27 2020 +0100

    l2tp: hold tunnel while processing genl delete command
    
    commit bb0a32ce4389e17e47e198d2cddaf141561581ad upstream.
    
    l2tp_nl_cmd_tunnel_delete() needs to take a reference on the tunnel, to
    prevent it from being concurrently freed by l2tp_tunnel_destruct().
    
    Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 523e6d7f31868172536d63280a6d10d2d5a94e95
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:26 2020 +0100

    l2tp: hold tunnel while looking up sessions in l2tp_netlink
    
    commit 54652eb12c1b72e9602d09cb2821d5760939190f upstream.
    
    l2tp_tunnel_find() doesn't take a reference on the returned tunnel.
    Therefore, it's unsafe to use it because the returned tunnel can go
    away on us anytime.
    
    Fix this by defining l2tp_tunnel_get(), which works like
    l2tp_tunnel_find(), but takes a reference on the returned tunnel.
    Caller then has to drop this reference using l2tp_tunnel_dec_refcount().
    
    As l2tp_tunnel_dec_refcount() needs to be moved to l2tp_core.h, let's
    simplify the patch and not move the L2TP_REFCNT_DEBUG part. This code
    has been broken (not even compiling) in May 2012 by
    commit a4ca44fa578c ("net: l2tp: Standardize logging styles")
    and fixed more than two years later by
    commit 29abe2fda54f ("l2tp: fix missing line continuation"). So it
    doesn't appear to be used by anyone.
    
    Same thing for l2tp_tunnel_free(); instead of moving it to l2tp_core.h,
    let's just simplify things and call kfree_rcu() directly in
    l2tp_tunnel_dec_refcount(). Extra assertions and debugging code
    provided by l2tp_tunnel_free() didn't help catching any of the
    reference counting and socket handling issues found while working on
    this series.
    
    Backporting Notes
    
    l2tp_core.c: This patch deletes some code / moves some code to
    l2tp_core.h and follows the patch (not including in this series) that
    switched from atomic to refcount_t. Moved code changed back to atomic.
    
    Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 11a083724be9f877e9490b7c807cd897b9e6819d
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:25 2020 +0100

    l2tp: initialise session's refcount before making it reachable
    
    commit 9ee369a405c57613d7c83a3967780c3e30c52ecc upstream.
    
    Sessions must be fully initialised before calling
    l2tp_session_add_to_tunnel(). Otherwise, there's a short time frame
    where partially initialised sessions can be accessed by external users.
    
    Backporting Notes
    
    l2tp_core.c: moving code that had been converted from atomic to
    refcount_t by an earlier change (which isn't being included in this
    patch series).
    
    Fixes: dbdbc73b4478 ("l2tp: fix duplicate session creation")
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d4504d1eba9563ca60bf87194a68faee1e6fa11e
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:24 2020 +0100

    l2tp: define parameters of l2tp_tunnel_find*() as "const"
    
    commit 2f858b928bf5a8174911aaec76b8b72a9ca0533d upstream.
    
    l2tp_tunnel_find() and l2tp_tunnel_find_nth() don't modify "net".
    
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eb61cabde73d8824145bcd7dec729987a50baa27
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:23 2020 +0100

    l2tp: define parameters of l2tp_session_get*() as "const"
    
    commit 9aaef50c44f132e040dcd7686c8e78a3390037c5 upstream.
    
    Make l2tp_pernet()'s parameter constant, so that l2tp_session_get*() can
    declare their "net" variable as "const".
    Also constify "ifname" in l2tp_session_get_by_ifname().
    
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e27738d0c5b109f07998f35548ba0a622f156693
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:22 2020 +0100

    l2tp: remove l2tp_session_find()
    
    commit 55a3ce3b9d98f752df9e2cfb1cba7e715522428a upstream.
    
    This function isn't used anymore.
    
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6729e7334c230a08eac5c55e5c0ee81952df5ba8
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri May 22 00:39:21 2020 +0100

    l2tp: remove useless duplicate session detection in l2tp_netlink
    
    commit af87ae465abdc070de0dc35d6c6a9e7a8cd82987 upstream.
    
    There's no point in checking for duplicate sessions at the beginning of
    l2tp_nl_cmd_session_create(); the ->session_create() callbacks already
    return -EEXIST when the session already exists.
    
    Furthermore, even if l2tp_session_find() returns NULL, a new session
    might be created right after the test. So relying on ->session_create()
    to avoid duplicate session is the only sane behaviour.
    
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fa5b41cda1bede3df441ccc3ab2a3cbcc0eb153b
Author: R. Parameswaran <parameswaran.r7@gmail.com>
Date:   Fri May 22 00:39:20 2020 +0100

    L2TP:Adjust intf MTU, add underlay L3, L2 hdrs.
    
    commit b784e7ebfce8cfb16c6f95e14e8532d0768ab7ff upstream.
    
    Existing L2TP kernel code does not derive the optimal MTU for Ethernet
    pseudowires and instead leaves this to a userspace L2TP daemon or
    operator. If an MTU is not specified, the existing kernel code chooses
    an MTU that does not take account of all tunnel header overheads, which
    can lead to unwanted IP fragmentation. When L2TP is used without a
    control plane (userspace daemon), we would prefer that the kernel does a
    better job of choosing a default pseudowire MTU, taking account of all
    tunnel header overheads, including IP header options, if any. This patch
    addresses this.
    
    Change-set here uses the new kernel function, kernel_sock_ip_overhead(),
    to factor the outer IP overhead on the L2TP tunnel socket (including
    IP Options, if any) when calculating the default MTU for an Ethernet
    pseudowire, along with consideration of the inner Ethernet header.
    
    Signed-off-by: R. Parameswaran <rparames@brocade.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b25415f9f0d539c587a80a608c3e2211f1c079af
Author: R. Parameswaran <parameswaran.r7@gmail.com>
Date:   Fri May 22 00:39:19 2020 +0100

    New kernel function to get IP overhead on a socket.
    
    commit 113c3075931a334f899008f6c753abe70a3a9323 upstream.
    
    A new function, kernel_sock_ip_overhead(), is provided
    to calculate the cumulative overhead imposed by the IP
    Header and IP options, if any, on a socket's payload.
    The new function returns an overhead of zero for sockets
    that do not belong to the IPv4 or IPv6 address families.
    This is used in the L2TP code path to compute the
    total outer IP overhead on the L2TP tunnel socket when
    calculating the default MTU for Ethernet pseudowires.
    
    Signed-off-by: R. Parameswaran <rparames@brocade.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6df792e20933d5ef670457d67a6bb9f497344bcf
Author: Asbjørn Sloth Tønnesen <asbjorn@asbjorn.st>
Date:   Fri May 22 00:39:18 2020 +0100

    net: l2tp: ppp: change PPPOL2TP_MSG_* => L2TP_MSG_*
    
    commit fba40c632c6473fa89660e870a6042c0fe733f8c upstream.
    
    Signed-off-by: Asbjoern Sloth Toennesen <asbjorn@asbjorn.st>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cc84b4ddee15d4082da6653ea5548c04ff32057b
Author: Asbjørn Sloth Tønnesen <asbjorn@asbjorn.st>
Date:   Fri May 22 00:39:17 2020 +0100

    net: l2tp: deprecate PPPOL2TP_MSG_* in favour of L2TP_MSG_*
    
    commit 47c3e7783be4e142b861d34b5c2e223330b05d8a upstream.
    
    PPPOL2TP_MSG_* and L2TP_MSG_* are duplicates, and are being used
    interchangeably in the kernel, so let's standardize on L2TP_MSG_*
    internally, and keep PPPOL2TP_MSG_* defined in UAPI for compatibility.
    
    Signed-off-by: Asbjoern Sloth Toennesen <asbjorn@asbjorn.st>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 18dc6fbbd9d7416b69cff63a1568365836ec22eb
Author: Asbjørn Sloth Tønnesen <asbjorn@asbjorn.st>
Date:   Fri May 22 00:39:16 2020 +0100

    net: l2tp: export debug flags to UAPI
    
    commit 41c43fbee68f4f9a2a9675d83bca91c77862d7f0 upstream.
    
    Move the L2TP_MSG_* definitions to UAPI, as it is part of
    the netlink API.
    
    Signed-off-by: Asbjoern Sloth Toennesen <asbjorn@asbjorn.st>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Giuliano Procida <gprocida@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f76905ce52653e8a821963c35d9013cff19b1399
Author: Kevin Hao <haokexin@gmail.com>
Date:   Tue Oct 8 19:29:34 2019 +0800

    watchdog: Fix the race between the release of watchdog_core_data and cdev
    
    commit 72139dfa2464e43957d330266994740bb7be2535 upstream.
    
    The struct cdev is embedded in the struct watchdog_core_data. In the
    current code, we manage the watchdog_core_data with a kref, but the
    cdev is manged by a kobject. There is no any relationship between
    this kref and kobject. So it is possible that the watchdog_core_data is
    freed before the cdev is entirely released. We can easily get the
    following call trace with CONFIG_DEBUG_KOBJECT_RELEASE and
    CONFIG_DEBUG_OBJECTS_TIMERS enabled.
      ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x38
      WARNING: CPU: 23 PID: 1028 at lib/debugobjects.c:481 debug_print_object+0xb0/0xf0
      Modules linked in: softdog(-) deflate ctr twofish_generic twofish_common camellia_generic serpent_generic blowfish_generic blowfish_common cast5_generic cast_common cmac xcbc af_key sch_fq_codel openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4
      CPU: 23 PID: 1028 Comm: modprobe Not tainted 5.3.0-next-20190924-yoctodev-standard+ #180
      Hardware name: Marvell OcteonTX CN96XX board (DT)
      pstate: 00400009 (nzcv daif +PAN -UAO)
      pc : debug_print_object+0xb0/0xf0
      lr : debug_print_object+0xb0/0xf0
      sp : ffff80001cbcfc70
      x29: ffff80001cbcfc70 x28: ffff800010ea2128
      x27: ffff800010bad000 x26: 0000000000000000
      x25: ffff80001103c640 x24: ffff80001107b268
      x23: ffff800010bad9e8 x22: ffff800010ea2128
      x21: ffff000bc2c62af8 x20: ffff80001103c600
      x19: ffff800010e867d8 x18: 0000000000000060
      x17: 0000000000000000 x16: 0000000000000000
      x15: ffff000bd7240470 x14: 6e6968207473696c
      x13: 5f72656d6974203a x12: 6570797420746365
      x11: 6a626f2029302065 x10: 7461747320657669
      x9 : 7463612820657669 x8 : 3378302f3078302b
      x7 : 0000000000001d7a x6 : ffff800010fd5889
      x5 : 0000000000000000 x4 : 0000000000000000
      x3 : 0000000000000000 x2 : ffff000bff948548
      x1 : 276a1c9e1edc2300 x0 : 0000000000000000
      Call trace:
       debug_print_object+0xb0/0xf0
       debug_check_no_obj_freed+0x1e8/0x210
       kfree+0x1b8/0x368
       watchdog_cdev_unregister+0x88/0xc8
       watchdog_dev_unregister+0x38/0x48
       watchdog_unregister_device+0xa8/0x100
       softdog_exit+0x18/0xfec4 [softdog]
       __arm64_sys_delete_module+0x174/0x200
       el0_svc_handler+0xd0/0x1c8
       el0_svc+0x8/0xc
    
    This is a common issue when using cdev embedded in a struct.
    Fortunately, we already have a mechanism to solve this kind of issue.
    Please see commit 233ed09d7fda ("chardev: add helper function to
    register char devs with a struct device") for more detail.
    
    In this patch, we choose to embed the struct device into the
    watchdog_core_data, and use the API provided by the commit 233ed09d7fda
    to make sure that the release of watchdog_core_data and cdev are
    in sequence.
    
    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20191008112934.29669-1-haokexin@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    [bwh: Backported to 4.9:
     - There's no reboot notifier here
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a5233a3fee3b6afb9aed3aa8db81e271a6dca9ef
Author: Christoph Hellwig <hch@lst.de>
Date:   Thu May 21 15:44:34 2020 +0100

    arm64: fix the flush_icache_range arguments in machine_kexec
    
    Commit d51c214541c5154dda3037289ee895ea3ded5ebd upstream.
    
    The second argument is the end "pointer", not the length.
    
    Fixes: d28f6df1305a ("arm64/kexec: Add core kexec support")
    Cc: <stable@vger.kernel.org> # 4.8.x-
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit bae3b5078a8782865316d4a3fc3c1f95d063cd3a
Author: Daniel Jordan <daniel.m.jordan@oracle.com>
Date:   Thu May 21 16:48:47 2020 -0400

    padata: purge get_cpu and reorder_via_wq from padata_do_serial
    
    [ Upstream commit 065cf577135a4977931c7a1e1edf442bfd9773dd ]
    
    With the removal of the padata timer, padata_do_serial no longer
    needs special CPU handling, so remove it.
    
    Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: linux-crypto@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 52a3af1c9321ff2bc7d91b2465af9843f1afabf3
Author: Daniel Jordan <daniel.m.jordan@oracle.com>
Date:   Thu May 21 16:48:46 2020 -0400

    padata: initialize pd->cpu with effective cpumask
    
    [ Upstream commit ec9c7d19336ee98ecba8de80128aa405c45feebb ]
    
    Exercising CPU hotplug on a 5.2 kernel with recent padata fixes from
    cryptodev-2.6.git in an 8-CPU kvm guest...
    
        # modprobe tcrypt alg="pcrypt(rfc4106(gcm(aes)))" type=3
        # echo 0 > /sys/devices/system/cpu/cpu1/online
        # echo c > /sys/kernel/pcrypt/pencrypt/parallel_cpumask
        # modprobe tcrypt mode=215
    
    ...caused the following crash:
    
        BUG: kernel NULL pointer dereference, address: 0000000000000000
        #PF: supervisor read access in kernel mode
        #PF: error_code(0x0000) - not-present page
        PGD 0 P4D 0
        Oops: 0000 [#1] SMP PTI
        CPU: 2 PID: 134 Comm: kworker/2:2 Not tainted 5.2.0-padata-base+ #7
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-<snip>
        Workqueue: pencrypt padata_parallel_worker
        RIP: 0010:padata_reorder+0xcb/0x180
        ...
        Call Trace:
         padata_do_serial+0x57/0x60
         pcrypt_aead_enc+0x3a/0x50 [pcrypt]
         padata_parallel_worker+0x9b/0xe0
         process_one_work+0x1b5/0x3f0
         worker_thread+0x4a/0x3c0
         ...
    
    In padata_alloc_pd, pd->cpu is set using the user-supplied cpumask
    instead of the effective cpumask, and in this case cpumask_first picked
    an offline CPU.
    
    The offline CPU's reorder->list.next is NULL in padata_reorder because
    the list wasn't initialized in padata_init_pqueues, which only operates
    on CPUs in the effective mask.
    
    Fix by using the effective mask in padata_alloc_pd.
    
    Fixes: 6fc4dbcf0276 ("padata: Replace delayed timer with immediate workqueue in padata_reorder")
    Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: linux-crypto@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit f501513bd2dda34c73bf12785163bfe713af0d99
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu May 21 16:48:45 2020 -0400

    padata: Replace delayed timer with immediate workqueue in padata_reorder
    
    [ Upstream commit 6fc4dbcf0276279d488c5fbbfabe94734134f4fa ]
    
    The function padata_reorder will use a timer when it cannot progress
    while completed jobs are outstanding (pd->reorder_objects > 0).  This
    is suboptimal as if we do end up using the timer then it would have
    introduced a gratuitous delay of one second.
    
    In fact we can easily distinguish between whether completed jobs
    are outstanding and whether we can make progress.  All we have to
    do is look at the next pqueue list.
    
    This patch does that by replacing pd->processed with pd->cpu so
    that the next pqueue is more accessible.
    
    A work queue is used instead of the original try_again to avoid
    hogging the CPU.
    
    Note that we don't bother removing the work queue in
    padata_flush_queues because the whole premise is broken.  You
    cannot flush async crypto requests so it makes no sense to even
    try.  A subsequent patch will fix it by replacing it with a ref
    counting scheme.
    
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    [dj: - adjust context
         - corrected setup_timer -> timer_setup to delete hunk
         - skip padata_flush_queues() hunk, function already removed
           in 4.9]
    Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 251716d96a1dd6cfb2bef917eccae63372aa37f2
Author: Mathias Krause <minipli@googlemail.com>
Date:   Thu May 21 16:48:44 2020 -0400

    padata: set cpu_index of unused CPUs to -1
    
    [ Upstream commit 1bd845bcb41d5b7f83745e0cb99273eb376f2ec5 ]
    
    The parallel queue per-cpu data structure gets initialized only for CPUs
    in the 'pcpu' CPU mask set. This is not sufficient as the reorder timer
    may run on a different CPU and might wrongly decide it's the target CPU
    for the next reorder item as per-cpu memory gets memset(0) and we might
    be waiting for the first CPU in cpumask.pcpu, i.e. cpu_index 0.
    
    Make the '__this_cpu_read(pd->pqueue->cpu_index) == next_queue->cpu_index'
    compare in padata_get_next() fail in this case by initializing the
    cpu_index member of all per-cpu parallel queues. Use -1 for unused ones.
    
    Signed-off-by: Mathias Krause <minipli@googlemail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit c0d34399045609eda76882fa6d01fdfaf5b20d38
Author: Kevin Hao <haokexin@gmail.com>
Date:   Fri Oct 11 23:00:14 2019 +0800

    i2c: dev: Fix the race between the release of i2c_dev and cdev
    
    [ Upstream commit 1413ef638abae4ab5621901cf4d8ef08a4a48ba6 ]
    
    The struct cdev is embedded in the struct i2c_dev. In the current code,
    we would free the i2c_dev struct directly in put_i2c_dev(), but the
    cdev is manged by a kobject, and the release of it is not predictable.
    So it is very possible that the i2c_dev is freed before the cdev is
    entirely released. We can easily get the following call trace with
    CONFIG_DEBUG_KOBJECT_RELEASE and CONFIG_DEBUG_OBJECTS_TIMERS enabled.
      ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x38
      WARNING: CPU: 19 PID: 1 at lib/debugobjects.c:325 debug_print_object+0xb0/0xf0
      Modules linked in:
      CPU: 19 PID: 1 Comm: swapper/0 Tainted: G        W         5.2.20-yocto-standard+ #120
      Hardware name: Marvell OcteonTX CN96XX board (DT)
      pstate: 80c00089 (Nzcv daIf +PAN +UAO)
      pc : debug_print_object+0xb0/0xf0
      lr : debug_print_object+0xb0/0xf0
      sp : ffff00001292f7d0
      x29: ffff00001292f7d0 x28: ffff800b82151788
      x27: 0000000000000001 x26: ffff800b892c0000
      x25: ffff0000124a2558 x24: 0000000000000000
      x23: ffff00001107a1d8 x22: ffff0000116b5088
      x21: ffff800bdc6afca8 x20: ffff000012471ae8
      x19: ffff00001168f2c8 x18: 0000000000000010
      x17: 00000000fd6f304b x16: 00000000ee79de43
      x15: ffff800bc0e80568 x14: 79616c6564203a74
      x13: 6e6968207473696c x12: 5f72656d6974203a
      x11: ffff0000113f0018 x10: 0000000000000000
      x9 : 000000000000001f x8 : 0000000000000000
      x7 : ffff0000101294cc x6 : 0000000000000000
      x5 : 0000000000000000 x4 : 0000000000000001
      x3 : 00000000ffffffff x2 : 0000000000000000
      x1 : 387fc15c8ec0f200 x0 : 0000000000000000
      Call trace:
       debug_print_object+0xb0/0xf0
       __debug_check_no_obj_freed+0x19c/0x228
       debug_check_no_obj_freed+0x1c/0x28
       kfree+0x250/0x440
       put_i2c_dev+0x68/0x78
       i2cdev_detach_adapter+0x60/0xc8
       i2cdev_notifier_call+0x3c/0x70
       notifier_call_chain+0x8c/0xe8
       blocking_notifier_call_chain+0x64/0x88
       device_del+0x74/0x380
       device_unregister+0x54/0x78
       i2c_del_adapter+0x278/0x2d0
       unittest_i2c_bus_remove+0x3c/0x80
       platform_drv_remove+0x30/0x50
       device_release_driver_internal+0xf4/0x1c0
       driver_detach+0x58/0xa0
       bus_remove_driver+0x84/0xd8
       driver_unregister+0x34/0x60
       platform_driver_unregister+0x20/0x30
       of_unittest_overlay+0x8d4/0xbe0
       of_unittest+0xae8/0xb3c
       do_one_initcall+0xac/0x450
       do_initcall_level+0x208/0x224
       kernel_init_freeable+0x2d8/0x36c
       kernel_init+0x18/0x108
       ret_from_fork+0x10/0x1c
      irq event stamp: 3934661
      hardirqs last  enabled at (3934661): [<ffff00001009fa04>] debug_exception_exit+0x4c/0x58
      hardirqs last disabled at (3934660): [<ffff00001009fb14>] debug_exception_enter+0xa4/0xe0
      softirqs last  enabled at (3934654): [<ffff000010081d94>] __do_softirq+0x46c/0x628
      softirqs last disabled at (3934649): [<ffff0000100b4a1c>] irq_exit+0x104/0x118
    
    This is a common issue when using cdev embedded in a struct.
    Fortunately, we already have a mechanism to solve this kind of issue.
    Please see commit 233ed09d7fda ("chardev: add helper function to
    register char devs with a struct device") for more detail.
    
    In this patch, we choose to embed the struct device into the i2c_dev,
    and use the API provided by the commit 233ed09d7fda to make sure that
    the release of i2c_dev and cdev are in sequence.
    
    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 7a5c2b73e522db3200a69f4772beeb72f786a0b9
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Tue Apr 14 11:07:22 2020 +0200

    ARM: futex: Address build warning
    
    [ Upstream commit 8101b5a1531f3390b3a69fa7934c70a8fd6566ad ]
    
    Stephen reported the following build warning on a ARM multi_v7_defconfig
    build with GCC 9.2.1:
    
    kernel/futex.c: In function 'do_futex':
    kernel/futex.c:1676:17: warning: 'oldval' may be used uninitialized in this function [-Wmaybe-uninitialized]
     1676 |   return oldval == cmparg;
          |          ~~~~~~~^~~~~~~~~
    kernel/futex.c:1652:6: note: 'oldval' was declared here
     1652 |  int oldval, ret;
          |      ^~~~~~
    
    introduced by commit a08971e9488d ("futex: arch_futex_atomic_op_inuser()
    calling conventions change").
    
    While that change should not make any difference it confuses GCC which
    fails to work out that oldval is not referenced when the return value is
    not zero.
    
    GCC fails to properly analyze arch_futex_atomic_op_inuser(). It's not the
    early return, the issue is with the assembly macros. GCC fails to detect
    that those either set 'ret' to 0 and set oldval or set 'ret' to -EFAULT
    which makes oldval uninteresting. The store to the callsite supplied oldval
    pointer is conditional on ret == 0.
    
    The straight forward way to solve this is to make the store unconditional.
    
    Aside of addressing the build warning this makes sense anyway because it
    removes the conditional from the fastpath. In the error case the stored
    value is uninteresting and the extra store does not matter at all.
    
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/87pncao2ph.fsf@nanos.tec.linutronix.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e09cb4c341d7cbdfd80f63cf0daa2fb9eb41943e
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Thu Apr 23 00:05:59 2020 +0200

    platform/x86: asus-nb-wmi: Do not load on Asus T100TA and T200TA
    
    [ Upstream commit 3bd12da7f50b8bc191fcb3bab1f55c582234df59 ]
    
    asus-nb-wmi does not add any extra functionality on these Asus
    Transformer books. They have detachable keyboards, so the hotkeys are
    send through a HID device (and handled by the hid-asus driver) and also
    the rfkill functionality is not used on these devices.
    
    Besides not adding any extra functionality, initializing the WMI interface
    on these devices actually has a negative side-effect. For some reason
    the \_SB.ATKD.INIT() function which asus_wmi_platform_init() calls drives
    GPO2 (INT33FC:02) pin 8, which is connected to the front facing webcam LED,
    high and there is no (WMI or other) interface to drive this low again
    causing the LED to be permanently on, even during suspend.
    
    This commit adds a blacklist of DMI system_ids on which not to load the
    asus-nb-wmi and adds these Transformer books to this list. This fixes
    the webcam LED being permanently on under Linux.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 21851aa8868ad79788fccb6c0f781abb790c2600
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Fri May 1 16:07:28 2020 -0400

    USB: core: Fix misleading driver bug report
    
    [ Upstream commit ac854131d9844f79e2fdcef67a7707227538d78a ]
    
    The syzbot fuzzer found a race between URB submission to endpoint 0
    and device reset.  Namely, during the reset we call usb_ep0_reinit()
    because the characteristics of ep0 may have changed (if the reset
    follows a firmware update, for example).  While usb_ep0_reinit() is
    running there is a brief period during which the pointers stored in
    udev->ep_in[0] and udev->ep_out[0] are set to NULL, and if an URB is
    submitted to ep0 during that period, usb_urb_ep_type_check() will
    report it as a driver bug.  In the absence of those pointers, the
    routine thinks that the endpoint doesn't exist.  The log message looks
    like this:
    
    ------------[ cut here ]------------
    usb 2-1: BOGUS urb xfer, pipe 2 != type 2
    WARNING: CPU: 0 PID: 9241 at drivers/usb/core/urb.c:478
    usb_submit_urb+0x1188/0x1460 drivers/usb/core/urb.c:478
    
    Now, although submitting an URB while the device is being reset is a
    questionable thing to do, it shouldn't count as a driver bug as severe
    as submitting an URB for an endpoint that doesn't exist.  Indeed,
    endpoint 0 always exists, even while the device is in its unconfigured
    state.
    
    To prevent these misleading driver bug reports, this patch updates
    usb_disable_endpoint() to avoid clearing the ep_in[] and ep_out[]
    pointers when the endpoint being disabled is ep0.  There's no danger
    of leaving a stale pointer in place, because the usb_host_endpoint
    structure being pointed to is stored permanently in udev->ep0; it
    doesn't get deallocated until the entire usb_device structure does.
    
    Reported-and-tested-by: syzbot+db339689b2101f6f6071@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    
    Link: https://lore.kernel.org/r/Pine.LNX.4.44L0.2005011558590.903-100000@netrider.rowland.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 1de356b13c9960cfe5dc180cf9774af92b6a9b91
Author: Wu Bo <wubo40@huawei.com>
Date:   Thu Apr 30 14:12:49 2020 +0800

    ceph: fix double unlock in handle_cap_export()
    
    [ Upstream commit 4d8e28ff3106b093d98bfd2eceb9b430c70a8758 ]
    
    If the ceph_mdsc_open_export_target_session() return fails, it will
    do a "goto retry", but the session mutex has already been unlocked.
    Re-lock the mutex in that case to ensure that we don't unlock it
    twice.
    
    Signed-off-by: Wu Bo <wubo40@huawei.com>
    Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2e7f7b28c449de743d365a5a3d063b9cdda64c0b
Author: Yoshiyuki Kurauchi <ahochauwaaaaa@gmail.com>
Date:   Thu Apr 30 14:01:36 2020 +0900

    gtp: set NLM_F_MULTI flag in gtp_genl_dump_pdp()
    
    [ Upstream commit 846c68f7f1ac82c797a2f1db3344a2966c0fe2e1 ]
    
    In drivers/net/gtp.c, gtp_genl_dump_pdp() should set NLM_F_MULTI
    flag since it returns multipart message.
    This patch adds a new arg "flags" in gtp_genl_fill_info() so that
    flags can be set by the callers.
    
    Signed-off-by: Yoshiyuki Kurauchi <ahochauwaaaaa@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2700d2c22e5429020145e83673b29c2697692ef4
Author: James Hilliard <james.hilliard1@gmail.com>
Date:   Sat Apr 11 13:02:41 2020 -0600

    component: Silence bind error on -EPROBE_DEFER
    
    [ Upstream commit 7706b0a76a9697021e2bf395f3f065c18f51043d ]
    
    If a component fails to bind due to -EPROBE_DEFER we should not log an
    error as this is not a real failure.
    
    Fixes messages like:
    vc4-drm soc:gpu: failed to bind 3f902000.hdmi (ops vc4_hdmi_ops): -517
    vc4-drm soc:gpu: master bind failed: -517
    
    Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
    Link: https://lore.kernel.org/r/20200411190241.89404-1-james.hilliard1@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 1957df4975448f4b1169f8f3a83f273ccb41f5e3
Author: Xiyu Yang <xiyuyang19@fudan.edu.cn>
Date:   Sat Apr 25 20:52:26 2020 +0800

    configfs: fix config_item refcnt leak in configfs_rmdir()
    
    [ Upstream commit 8aebfffacfa379ba400da573a5bf9e49634e38cb ]
    
    configfs_rmdir() invokes configfs_get_config_item(), which returns a
    reference of the specified config_item object to "parent_item" with
    increased refcnt.
    
    When configfs_rmdir() returns, local variable "parent_item" becomes
    invalid, so the refcount should be decreased to keep refcount balanced.
    
    The reference counting issue happens in one exception handling path of
    configfs_rmdir(). When down_write_killable() fails, the function forgets
    to decrease the refcnt increased by configfs_get_config_item(), causing
    a refcnt leak.
    
    Fix this issue by calling config_item_put() when down_write_killable()
    fails.
    
    Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
    Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit f477b49c2c103c40b7930104215b8f2e47c28566
Author: Sebastian Reichel <sebastian.reichel@collabora.com>
Date:   Mon Apr 13 18:02:37 2020 +0200

    HID: multitouch: add eGalaxTouch P80H84 support
    
    [ Upstream commit f9e82295eec141a0569649d400d249333d74aa91 ]
    
    Add support for P80H84 touchscreen from eGalaxy:
    
      idVendor           0x0eef D-WAV Scientific Co., Ltd
      idProduct          0xc002
      iManufacturer           1 eGalax Inc.
      iProduct                2 eGalaxTouch P80H84 2019 vDIVA_1204_T01 k4.02.146
    
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ebf9988ee7aae149595a23b52624282d03169d70
Author: Frédéric Pierret (fepitre) <frederic.pierret@qubes-os.org>
Date:   Tue Apr 7 13:32:59 2020 +0200

    gcc-common.h: Update for GCC 10
    
    [ Upstream commit c7527373fe28f97d8a196ab562db5589be0d34b9 ]
    
    Remove "params.h" include, which has been dropped in GCC 10.
    
    Remove is_a_helper() macro, which is now defined in gimple.h, as seen
    when running './scripts/gcc-plugin.sh g++ g++ gcc':
    
    In file included from <stdin>:1:
    ./gcc-plugins/gcc-common.h:852:13: error: redefinition of ‘static bool is_a_helper<T>::test(U*) [with U = const gimple; T = const ggoto*]’
      852 | inline bool is_a_helper<const ggoto *>::test(const_gimple gs)
          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from ./gcc-plugins/gcc-common.h:125,
                     from <stdin>:1:
    /usr/lib/gcc/x86_64-redhat-linux/10/plugin/include/gimple.h:1037:1: note: ‘static bool is_a_helper<T>::test(U*) [with U = const gimple; T = const ggoto*]’ previously declared here
     1037 | is_a_helper <const ggoto *>::test (const gimple *gs)
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Add -Wno-format-diag to scripts/gcc-plugins/Makefile to avoid
    meaningless warnings from error() formats used by plugins:
    
    scripts/gcc-plugins/structleak_plugin.c: In function ‘int plugin_init(plugin_name_args*, plugin_gcc_version*)’:
    scripts/gcc-plugins/structleak_plugin.c:253:12: warning: unquoted sequence of 2 consecutive punctuation characters ‘'-’ in format [-Wformat-diag]
      253 |   error(G_("unknown option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
          |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Signed-off-by: Frédéric Pierret (fepitre) <frederic.pierret@qubes-os.org>
    Link: https://lore.kernel.org/r/20200407113259.270172-1-frederic.pierret@qubes-os.org
    [kees: include -Wno-format-diag for plugin builds]
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 350d523b27eac2d19890fa06b90242e40b70416e
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Wed May 6 21:21:00 2020 +0200

    i2c: mux: demux-pinctrl: Fix an error handling path in 'i2c_demux_pinctrl_probe()'
    
    [ Upstream commit e9d1a0a41d4486955e96552293c1fcf1fce61602 ]
    
    A call to 'i2c_demux_deactivate_master()' is missing in the error handling
    path, as already done in the remove function.
    
    Fixes: 50a5ba876908 ("i2c: mux: demux-pinctrl: add driver")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 57dd229d420af7b7397ab13ae9af736c04874469
Author: Alexander Monakov <amonakov@ispras.ru>
Date:   Mon May 11 10:23:52 2020 +0000

    iommu/amd: Fix over-read of ACPI UID from IVRS table
    
    [ Upstream commit e461b8c991b9202b007ea2059d953e264240b0c9 ]
    
    IVRS parsing code always tries to read 255 bytes from memory when
    retrieving ACPI device path, and makes an assumption that firmware
    provides a zero-terminated string. Both of those are bugs: the entry
    is likely to be shorter than 255 bytes, and zero-termination is not
    guaranteed.
    
    With Acer SF314-42 firmware these issues manifest visibly in dmesg:
    
    AMD-Vi: ivrs, add hid:AMDI0020, uid:\_SB.FUR0\xf0\xa5, rdevid:160
    AMD-Vi: ivrs, add hid:AMDI0020, uid:\_SB.FUR1\xf0\xa5, rdevid:160
    AMD-Vi: ivrs, add hid:AMDI0020, uid:\_SB.FUR2\xf0\xa5, rdevid:160
    AMD-Vi: ivrs, add hid:AMDI0020, uid:\_SB.FUR3>\x83e\x8d\x9a\xd1...
    
    The first three lines show how the code over-reads adjacent table
    entries into the UID, and in the last line it even reads garbage data
    beyond the end of the IVRS table itself.
    
    Since each entry has the length of the UID (uidl member of ivhd_entry
    struct), use that for memcpy, and manually add a zero terminator.
    
    Avoid zero-filling hid and uid arrays up front, and instead ensure
    the uid array is always zero-terminated. No change needed for the hid
    array, as it was already properly zero-terminated.
    
    Fixes: 2a0cb4e2d423c ("iommu/amd: Add new map for storing IVHD dev entry type HID")
    
    Signed-off-by: Alexander Monakov <amonakov@ispras.ru>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: iommu@lists.linux-foundation.org
    Link: https://lore.kernel.org/r/20200511102352.1831-1-amonakov@ispras.ru
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 26204c47c87966ec458258a74555bc11ce6fca68
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Tue May 19 17:48:52 2020 -0400

    fix multiplication overflow in copy_fdtable()
    
    [ Upstream commit 4e89b7210403fa4a8acafe7c602b6212b7af6c3b ]
    
    cpy and set really should be size_t; we won't get an overflow on that,
    since sysctl_nr_open can't be set above ~(size_t)0 / sizeof(void *),
    so nr that would've managed to overflow size_t on that multiplication
    won't get anywhere near copy_fdtable() - we'll fail with EMFILE
    before that.
    
    Cc: stable@kernel.org # v2.6.25+
    Fixes: 9cfe015aa424 (get rid of NR_OPEN and introduce a sysctl_nr_open)
    Reported-by: Thiago Macieira <thiago.macieira@intel.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit d8d4da8a96b0763eca94656940c0ccdff1a1f39f
Author: Roberto Sassu <roberto.sassu@huawei.com>
Date:   Mon Apr 27 12:31:28 2020 +0200

    ima: Fix return value of ima_write_policy()
    
    [ Upstream commit 2e3a34e9f409ebe83d1af7cd2f49fca7af97dfac ]
    
    This patch fixes the return value of ima_write_policy() when a new policy
    is directly passed to IMA and the current policy requires appraisal of the
    file containing the policy. Currently, if appraisal is not in ENFORCE mode,
    ima_write_policy() returns 0 and leads user space applications to an
    endless loop. Fix this issue by denying the operation regardless of the
    appraisal mode.
    
    Cc: stable@vger.kernel.org # 4.10.x
    Fixes: 19f8a84713edc ("ima: measure and appraise the IMA policy itself")
    Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
    Reviewed-by: Krzysztof Struczynski <krzysztof.struczynski@huawei.com>
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ab97e5a9fdda460e4ef43cae75139193a46b12eb
Author: Roberto Sassu <roberto.sassu@huawei.com>
Date:   Mon Apr 27 12:28:56 2020 +0200

    evm: Check also if *tfm is an error pointer in init_desc()
    
    [ Upstream commit 53de3b080d5eae31d0de219617155dcc34e7d698 ]
    
    This patch avoids a kernel panic due to accessing an error pointer set by
    crypto_alloc_shash(). It occurs especially when there are many files that
    require an unsupported algorithm, as it would increase the likelihood of
    the following race condition:
    
    Task A: *tfm = crypto_alloc_shash() <= error pointer
    Task B: if (*tfm == NULL) <= *tfm is not NULL, use it
    Task B: rc = crypto_shash_init(desc) <= panic
    Task A: *tfm = NULL
    
    This patch uses the IS_ERR_OR_NULL macro to determine whether or not a new
    crypto context must be created.
    
    Cc: stable@vger.kernel.org
    Fixes: d46eb3699502b ("evm: crypto hash replaced by shash")
    Co-developed-by: Krzysztof Struczynski <krzysztof.struczynski@huawei.com>
    Signed-off-by: Krzysztof Struczynski <krzysztof.struczynski@huawei.com>
    Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 6953f88cd3e7ba0be11863604215a7e68d8e203d
Author: Mathias Krause <minipli@googlemail.com>
Date:   Fri Sep 8 20:57:11 2017 +0200

    padata: ensure padata_do_serial() runs on the correct CPU
    
    commit 350ef88e7e922354f82a931897ad4a4ce6c686ff upstream.
    
    If the algorithm we're parallelizing is asynchronous we might change
    CPUs between padata_do_parallel() and padata_do_serial(). However, we
    don't expect this to happen as we need to enqueue the padata object into
    the per-cpu reorder queue we took it from, i.e. the same-cpu's parallel
    queue.
    
    Ensure we're not switching CPUs for a given padata object by tracking
    the CPU within the padata object. If the serial callback gets called on
    the wrong CPU, defer invoking padata_reorder() via a kernel worker on
    the CPU we're expected to run on.
    
    Signed-off-by: Mathias Krause <minipli@googlemail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 08257da7e755584852c972d35f3d3ac32b297685
Author: Mathias Krause <minipli@googlemail.com>
Date:   Fri Sep 8 20:57:10 2017 +0200

    padata: ensure the reorder timer callback runs on the correct CPU
    
    commit cf5868c8a22dc2854b96e9569064bb92365549ca upstream.
    
    The reorder timer function runs on the CPU where the timer interrupt was
    handled which is not necessarily one of the CPUs of the 'pcpu' CPU mask
    set.
    
    Ensure the padata_reorder() callback runs on the correct CPU, which is
    one in the 'pcpu' CPU mask set and, preferrably, the next expected one.
    Do so by comparing the current CPU with the expected target CPU. If they
    match, call padata_reorder() right away. If they differ, schedule a work
    item on the target CPU that does the padata_reorder() call for us.
    
    Signed-off-by: Mathias Krause <minipli@googlemail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7174609f3a75b96c1ea8a99588218daded337a2d
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Wed Apr 12 10:40:19 2017 +0200

    padata: get_next is never NULL
    
    commit 69b348449bda0f9588737539cfe135774c9939a7 upstream.
    
    Per Dan's static checker warning, the code that returns NULL was removed
    in 2010, so this patch updates the comments and fixes the code
    assumptions.
    
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c4c5322aa67da57585f68fc2c04f8b6484914947
Author: Tobias Klauser <tklauser@distanz.ch>
Date:   Mon Oct 17 12:16:08 2016 +0200

    padata: Remove unused but set variables
    
    commit 119a0798dc42ed4c4f96d39b8b676efcea73aec6 upstream.
    
    Remove the unused but set variable pinst in padata_parallel_worker to
    fix the following warning when building with 'W=1':
    
      kernel/padata.c: In function ‘padata_parallel_worker’:
      kernel/padata.c:68:26: warning: variable ‘pinst’ set but not used [-Wunused-but-set-variable]
    
    Also remove the now unused variable pd which is only used to set pinst.
    
    Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
    Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0b3bc1fbff6f92674ed6e4007710fbd8eb58e182
Author: Cao jin <caoj.fnst@cn.fujitsu.com>
Date:   Tue Nov 8 15:06:20 2016 +0800

    igb: use igb_adapter->io_addr instead of e1000_hw->hw_addr
    
    commit 629823b872402451b42462414da08dddd0e2c93d upstream.
    
    When running as guest, under certain condition, it will oops as following.
    writel() in igb_configure_tx_ring() results in oops, because hw->hw_addr
    is NULL. While other register access won't oops kernel because they use
    wr32/rd32 which have a defense against NULL pointer.
    
        [  141.225449] pcieport 0000:00:1c.0: AER: Multiple Uncorrected (Fatal)
        error received: id=0101
        [  141.225523] igb 0000:01:00.1: PCIe Bus Error:
        severity=Uncorrected (Fatal), type=Unaccessible,
        id=0101(Unregistered Agent ID)
        [  141.299442] igb 0000:01:00.1: broadcast error_detected message
        [  141.300539] igb 0000:01:00.0 enp1s0f0: PCIe link lost, device now
        detached
        [  141.351019] igb 0000:01:00.1 enp1s0f1: PCIe link lost, device now
        detached
        [  143.465904] pcieport 0000:00:1c.0: Root Port link has been reset
        [  143.465994] igb 0000:01:00.1: broadcast slot_reset message
        [  143.466039] igb 0000:01:00.0: enabling device (0000 -> 0002)
        [  144.389078] igb 0000:01:00.1: enabling device (0000 -> 0002)
        [  145.312078] igb 0000:01:00.1: broadcast resume message
        [  145.322211] BUG: unable to handle kernel paging request at
        0000000000003818
        [  145.361275] IP: [<ffffffffa02fd38d>]
        igb_configure_tx_ring+0x14d/0x280 [igb]
        [  145.400048] PGD 0
        [  145.438007] Oops: 0002 [#1] SMP
    
    A similar issue & solution could be found at:
        http://patchwork.ozlabs.org/patch/689592/
    
    Signed-off-by: Cao jin <caoj.fnst@cn.fujitsu.com>
    Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>
    Tested-by: Aaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>