Skip to content
  1. Oct 11, 2023
    • Ilya Maximets's avatar
      ipv6: tcp: add a missing nf_reset_ct() in 3WHS handling · 7f042041
      Ilya Maximets authored
      [ Upstream commit 9593c7cb ]
      
      Commit b0e214d2 ("netfilter: keep conntrack reference until
      IPsecv6 policy checks are done") is a direct copy of the old
      commit b59c2701 ("[NETFILTER]: Keep conntrack reference until
      IPsec policy checks are done") but for IPv6.  However, it also
      copies a bug that this old commit had.  That is: when the third
      packet of 3WHS connection establishment contains payload, it is
      added into socket receive queue without the XFRM check and the
      drop of connection tracking context.
      
      That leads to nf_conntrack module being impossible to unload as
      it waits for all the conntrack references to be dropped while
      the packet release is deferred in per-cpu cache indefinitely, if
      not consumed by the application.
      
      The issue for IPv4 was fixed in commit 6f0012e3 ("tcp: add a
      missing nf_reset_ct() in 3WHS handling") by adding a missing XFRM
      check and correctly dropping the conntrack context.  However, the
      issue was introduced to IPv6 code afterwards.  Fixing it the
      same way for IPv6 now.
      
      Fixes: b0e214d2
      
       ("netfilter: keep conntrack reference until IPsecv6 policy checks are done")
      Link: https://lore.kernel.org/netdev/d589a999-d4dd-2768-b2d5-89dec64a4a42@ovn.org/
      Signed-off-by: default avatarIlya Maximets <i.maximets@ovn.org>
      Acked-by: default avatarFlorian Westphal <fw@strlen.de>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20230922210530.2045146-1-i.maximets@ovn.org
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7f042041
    • Fabio Estevam's avatar
      net: dsa: mv88e6xxx: Avoid EEPROM timeout when EEPROM is absent · a003d499
      Fabio Estevam authored
      [ Upstream commit 6ccf50d4 ]
      
      Since commit 23d775f1 ("net: dsa: mv88e6xxx: Wait for EEPROM done
      before HW reset") the following error is seen on a imx8mn board with
      a 88E6320 switch:
      
      mv88e6085 30be0000.ethernet-1:00: Timeout waiting for EEPROM done
      
      This board does not have an EEPROM attached to the switch though.
      
      This problem is well explained by Andrew Lunn:
      
      "If there is an EEPROM, and the EEPROM contains a lot of data, it could
      be that when we perform a hardware reset towards the end of probe, it
      interrupts an I2C bus transaction, leaving the I2C bus in a bad state,
      and future reads of the EEPROM do not work.
      
      The work around for this was to poll the EEInt status and wait for it
      to go true before performing the hardware reset.
      
      However, we have discovered that for some boards which do not have an
      EEPROM, EEInt never indicates complete. As a result,
      mv88e6xxx_g1_wait_eeprom_done() spins for a second and then prints a
      warning.
      
      We probably need a different solution than calling
      mv88e6xxx_g1_wait_eeprom_done(). The datasheet for 6352 documents the
      EEPROM Command register:
      
      bit 15 is:
      
        EEPROM Unit Busy. This bit must be set to a one to start an EEPROM
        operation (see EEOp below). Only one EEPROM operation can be
        executing at one time so this bit must be zero before setting it to
        a one.  When the requested EEPROM operation completes this bit will
        automatically be cleared to a zero. The transition of this bit from
        a one to a zero can be used to generate an interrupt (the EEInt in
        Global 1, offset 0x00).
      
      and more interesting is bit 11:
      
        Register Loader Running. This bit is set to one whenever the
        register loader is busy executing instructions contained in the
        EEPROM."
      
      Change to using mv88e6xxx_g2_eeprom_wait() to fix the timeout error
      when the EEPROM chip is not present.
      
      Fixes: 23d775f1
      
       ("net: dsa: mv88e6xxx: Wait for EEPROM done before HW reset")
      Suggested-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarFabio Estevam <festevam@denx.de>
      Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a003d499
    • Dinghao Liu's avatar
      ptp: ocp: Fix error handling in ptp_ocp_device_init · 6a91ec7c
      Dinghao Liu authored
      [ Upstream commit caa0578c ]
      
      When device_add() fails, ptp_ocp_dev_release() will be called
      after put_device(). Therefore, it seems that the
      ptp_ocp_dev_release() before put_device() is redundant.
      
      Fixes: 773bda96
      
       ("ptp: ocp: Expose various resources on the timecard.")
      Signed-off-by: default avatarDinghao Liu <dinghao.liu@zju.edu.cn>
      Reviewed-by: default avatarVadim Feodrenko <vadim.fedorenko@linux.dev>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6a91ec7c
    • David Howells's avatar
      ipv4, ipv6: Fix handling of transhdrlen in __ip{,6}_append_data() · f6a71821
      David Howells authored
      [ Upstream commit 9d4c7580 ]
      
      Including the transhdrlen in length is a problem when the packet is
      partially filled (e.g. something like send(MSG_MORE) happened previously)
      when appending to an IPv4 or IPv6 packet as we don't want to repeat the
      transport header or account for it twice.  This can happen under some
      circumstances, such as splicing into an L2TP socket.
      
      The symptom observed is a warning in __ip6_append_data():
      
          WARNING: CPU: 1 PID: 5042 at net/ipv6/ip6_output.c:1800 __ip6_append_data.isra.0+0x1be8/0x47f0 net/ipv6/ip6_output.c:1800
      
      that occurs when MSG_SPLICE_PAGES is used to append more data to an already
      partially occupied skbuff.  The warning occurs when 'copy' is larger than
      the amount of data in the message iterator.  This is because the requested
      length includes the transport header length when it shouldn't.  This can be
      triggered by, for example:
      
              sfd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_L2TP);
              bind(sfd, ...); // ::1
              connect(sfd, ...); // ::1 port 7
              send(sfd, buffer, 4100, MSG_MORE);
              sendfile(sfd, dfd, NULL, 1024);
      
      Fix this by only adding transhdrlen into the length if the write queue is
      empty in l2tp_ip6_sendmsg(), analogously to how UDP does things.
      
      l2tp_ip_sendmsg() looks like it won't suffer from this problem as it builds
      the UDP packet itself.
      
      Fixes: a32e0eec
      
       ("l2tp: introduce L2TPv3 IP encapsulation support for IPv6")
      Reported-by: default avatar <syzbot+62cbf263225ae13ff153@syzkaller.appspotmail.com>
      Link: https://lore.kernel.org/r/0000000000001c12b30605378ce8@google.com/
      Suggested-by: default avatarWillem de Bruijn <willemdebruijn.kernel@gmail.com>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      cc: Eric Dumazet <edumazet@google.com>
      cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
      cc: "David S. Miller" <davem@davemloft.net>
      cc: David Ahern <dsahern@kernel.org>
      cc: Paolo Abeni <pabeni@redhat.com>
      cc: Jakub Kicinski <kuba@kernel.org>
      cc: netdev@vger.kernel.org
      cc: bpf@vger.kernel.org
      cc: syzkaller-bugs@googlegroups.com
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f6a71821
    • Eric Dumazet's avatar
      neighbour: fix data-races around n->output · a8ed1b2e
      Eric Dumazet authored
      [ Upstream commit 5baa0433 ]
      
      n->output field can be read locklessly, while a writer
      might change the pointer concurrently.
      
      Add missing annotations to prevent load-store tearing.
      
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a8ed1b2e
    • Eric Dumazet's avatar
      neighbour: switch to standard rcu, instead of rcu_bh · 2b76aad6
      Eric Dumazet authored
      [ Upstream commit 09eed119
      
       ]
      
      rcu_bh is no longer a win, especially for objects freed
      with standard call_rcu().
      
      Switch neighbour code to no longer disable BH when not necessary.
      
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Stable-dep-of: 5baa0433
      
       ("neighbour: fix data-races around n->output")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2b76aad6
    • Eric Dumazet's avatar
      neighbour: annotate lockless accesses to n->nud_state · 0526933c
      Eric Dumazet authored
      [ Upstream commit b071af52
      
       ]
      
      We have many lockless accesses to n->nud_state.
      
      Before adding another one in the following patch,
      add annotations to readers and writers.
      
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Reviewed-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Stable-dep-of: 5baa0433
      
       ("neighbour: fix data-races around n->output")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0526933c
    • Martin KaFai Lau's avatar
      bpf: Add BPF_FIB_LOOKUP_SKIP_NEIGH for bpf_fib_lookup · 8904d884
      Martin KaFai Lau authored
      [ Upstream commit 31de4105
      
       ]
      
      The bpf_fib_lookup() also looks up the neigh table.
      This was done before bpf_redirect_neigh() was added.
      
      In the use case that does not manage the neigh table
      and requires bpf_fib_lookup() to lookup a fib to
      decide if it needs to redirect or not, the bpf prog can
      depend only on using bpf_redirect_neigh() to lookup the
      neigh. It also keeps the neigh entries fresh and connected.
      
      This patch adds a bpf_fib_lookup flag, SKIP_NEIGH, to avoid
      the double neigh lookup when the bpf prog always call
      bpf_redirect_neigh() to do the neigh lookup. The params->smac
      output is skipped together when SKIP_NEIGH is set because
      bpf_redirect_neigh() will figure out the smac also.
      
      Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Link: https://lore.kernel.org/bpf/20230217205515.3583372-1-martin.lau@linux.dev
      Stable-dep-of: 5baa0433
      
       ("neighbour: fix data-races around n->output")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8904d884
    • Eric Dumazet's avatar
      net: fix possible store tearing in neigh_periodic_work() · f82aac81
      Eric Dumazet authored
      [ Upstream commit 25563b58 ]
      
      While looking at a related syzbot report involving neigh_periodic_work(),
      I found that I forgot to add an annotation when deleting an
      RCU protected item from a list.
      
      Readers use rcu_deference(*np), we need to use either
      rcu_assign_pointer() or WRITE_ONCE() on writer side
      to prevent store tearing.
      
      I use rcu_assign_pointer() to have lockdep support,
      this was the choice made in neigh_flush_dev().
      
      Fixes: 767e97e1
      
       ("neigh: RCU conversion of struct neighbour")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f82aac81
    • Mauricio Faria de Oliveira's avatar
      modpost: add missing else to the "of" check · 8ef7f9ac
      Mauricio Faria de Oliveira authored
      [ Upstream commit cbc3d00c ]
      
      Without this 'else' statement, an "usb" name goes into two handlers:
      the first/previous 'if' statement _AND_ the for-loop over 'devtable',
      but the latter is useless as it has no 'usb' device_id entry anyway.
      
      Tested with allmodconfig before/after patch; no changes to *.mod.c:
      
          git checkout v6.6-rc3
          make -j$(nproc) allmodconfig
          make -j$(nproc) olddefconfig
      
          make -j$(nproc)
          find . -name '*.mod.c' | cpio -pd /tmp/before
      
          # apply patch
      
          make -j$(nproc)
          find . -name '*.mod.c' | cpio -pd /tmp/after
      
          diff -r /tmp/before/ /tmp/after/
          # no difference
      
      Fixes: acbef7b7
      
       ("modpost: fix module autoloading for OF devices with generic compatible property")
      Signed-off-by: default avatarMauricio Faria de Oliveira <mfo@canonical.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8ef7f9ac
    • Jakub Sitnicki's avatar
      bpf, sockmap: Reject sk_msg egress redirects to non-TCP sockets · b8f97e47
      Jakub Sitnicki authored
      [ Upstream commit b80e31ba ]
      
      With a SOCKMAP/SOCKHASH map and an sk_msg program user can steer messages
      sent from one TCP socket (s1) to actually egress from another TCP
      socket (s2):
      
      tcp_bpf_sendmsg(s1)		// = sk_prot->sendmsg
        tcp_bpf_send_verdict(s1)	// __SK_REDIRECT case
          tcp_bpf_sendmsg_redir(s2)
            tcp_bpf_push_locked(s2)
      	tcp_bpf_push(s2)
      	  tcp_rate_check_app_limited(s2) // expects tcp_sock
      	  tcp_sendmsg_locked(s2)	 // ditto
      
      There is a hard-coded assumption in the call-chain, that the egress
      socket (s2) is a TCP socket.
      
      However in commit 122e6c79 ("sock_map: Update sock type checks for
      UDP") we have enabled redirects to non-TCP sockets. This was done for the
      sake of BPF sk_skb programs. There was no indention to support sk_msg
      send-to-egress use case.
      
      As a result, attempts to send-to-egress through a non-TCP socket lead to a
      crash due to invalid downcast from sock to tcp_sock:
      
       BUG: kernel NULL pointer dereference, address: 000000000000002f
       ...
       Call Trace:
        <TASK>
        ? show_regs+0x60/0x70
        ? __die+0x1f/0x70
        ? page_fault_oops+0x80/0x160
        ? do_user_addr_fault+0x2d7/0x800
        ? rcu_is_watching+0x11/0x50
        ? exc_page_fault+0x70/0x1c0
        ? asm_exc_page_fault+0x27/0x30
        ? tcp_tso_segs+0x14/0xa0
        tcp_write_xmit+0x67/0xce0
        __tcp_push_pending_frames+0x32/0xf0
        tcp_push+0x107/0x140
        tcp_sendmsg_locked+0x99f/0xbb0
        tcp_bpf_push+0x19d/0x3a0
        tcp_bpf_sendmsg_redir+0x55/0xd0
        tcp_bpf_send_verdict+0x407/0x550
        tcp_bpf_sendmsg+0x1a1/0x390
        inet_sendmsg+0x6a/0x70
        sock_sendmsg+0x9d/0xc0
        ? sockfd_lookup_light+0x12/0x80
        __sys_sendto+0x10e/0x160
        ? syscall_enter_from_user_mode+0x20/0x60
        ? __this_cpu_preempt_check+0x13/0x20
        ? lockdep_hardirqs_on+0x82/0x110
        __x64_sys_sendto+0x1f/0x30
        do_syscall_64+0x38/0x90
        entry_SYSCALL_64_after_hwframe+0x63/0xcd
      
      Reject selecting a non-TCP sockets as redirect target from a BPF sk_msg
      program to prevent the crash. When attempted, user will receive an EACCES
      error from send/sendto/sendmsg() syscall.
      
      Fixes: 122e6c79
      
       ("sock_map: Update sock type checks for UDP")
      Signed-off-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Link: https://lore.kernel.org/bpf/20230920102055.42662-1-jakub@cloudflare.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b8f97e47
    • John Fastabend's avatar
      bpf, sockmap: Do not inc copied_seq when PEEK flag set · c024db96
      John Fastabend authored
      [ Upstream commit da9e915e ]
      
      When data is peek'd off the receive queue we shouldn't considered it
      copied from tcp_sock side. When we increment copied_seq this will confuse
      tcp_data_ready() because copied_seq can be arbitrarily increased. From
      application side it results in poll() operations not waking up when
      expected.
      
      Notice tcp stack without BPF recvmsg programs also does not increment
      copied_seq.
      
      We broke this when we moved copied_seq into recvmsg to only update when
      actual copy was happening. But, it wasn't working correctly either before
      because the tcp_data_ready() tried to use the copied_seq value to see
      if data was read by user yet. See fixes tags.
      
      Fixes: e5c6de5f ("bpf, sockmap: Incorrectly handling copied_seq")
      Fixes: 04919bed
      
       ("tcp: Introduce tcp_read_skb()")
      Signed-off-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Reviewed-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
      Link: https://lore.kernel.org/bpf/20230926035300.135096-3-john.fastabend@gmail.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c024db96
    • John Fastabend's avatar
      bpf: tcp_read_skb needs to pop skb regardless of seq · 46052a98
      John Fastabend authored
      [ Upstream commit 9b7177b1 ]
      
      Before fix e5c6de5f tcp_read_skb() would increment the tp->copied-seq
      value. This (as described in the commit) would cause an error for apps
      because once that is incremented the application might believe there is no
      data to be read. Then some apps would stall or abort believing no data is
      available.
      
      However, the fix is incomplete because it introduces another issue in
      the skb dequeue. The loop does tcp_recv_skb() in a while loop to consume
      as many skbs as possible. The problem is the call is ...
      
        tcp_recv_skb(sk, seq, &offset)
      
      ... where 'seq' is:
      
        u32 seq = tp->copied_seq;
      
      Now we can hit a case where we've yet incremented copied_seq from BPF side,
      but then tcp_recv_skb() fails this test ...
      
       if (offset < skb->len || (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN))
      
      ... so that instead of returning the skb we call tcp_eat_recv_skb() which
      frees the skb. This is because the routine believes the SKB has been collapsed
      per comment:
      
       /* This looks weird, but this can happen if TCP collapsing
        * splitted a fat GRO packet, while we released socket lock
        * in skb_splice_bits()
        */
      
      This can't happen here we've unlinked the full SKB and orphaned it. Anyways
      it would confuse any BPF programs if the data were suddenly moved underneath
      it.
      
      To fix this situation do simpler operation and just skb_peek() the data
      of the queue followed by the unlink. It shouldn't need to check this
      condition and tcp_read_skb() reads entire skbs so there is no need to
      handle the 'offset!=0' case as we would see in tcp_read_sock().
      
      Fixes: e5c6de5f ("bpf, sockmap: Incorrectly handling copied_seq")
      Fixes: 04919bed
      
       ("tcp: Introduce tcp_read_skb()")
      Signed-off-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Reviewed-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
      Link: https://lore.kernel.org/bpf/20230926035300.135096-2-john.fastabend@gmail.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      46052a98
    • Trond Myklebust's avatar
      NFSv4: Fix a nfs4_state_manager() race · 99fe9a12
      Trond Myklebust authored
      [ Upstream commit ed1cc05a ]
      
      If the NFS4CLNT_RUN_MANAGER flag got set just before we cleared
      NFS4CLNT_MANAGER_RUNNING, then we might have won the race against
      nfs4_schedule_state_manager(), and are responsible for handling the
      recovery situation.
      
      Fixes: aeabb3c9
      
       ("NFSv4: Fix a NFSv4 state manager deadlock")
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      99fe9a12
    • Arnd Bergmann's avatar
      ima: rework CONFIG_IMA dependency block · 23acd178
      Arnd Bergmann authored
      [ Upstream commit 91e32656 ]
      
      Changing the direct dependencies of IMA_BLACKLIST_KEYRING and
      IMA_LOAD_X509 caused them to no longer depend on IMA, but a
      a configuration without IMA results in link failures:
      
      arm-linux-gnueabi-ld: security/integrity/iint.o: in function `integrity_load_keys':
      iint.c:(.init.text+0xd8): undefined reference to `ima_load_x509'
      
      aarch64-linux-ld: security/integrity/digsig_asymmetric.o: in function `asymmetric_verify':
      digsig_asymmetric.c:(.text+0x104): undefined reference to `ima_blacklist_keyring'
      
      Adding explicit dependencies on IMA would fix this, but a more reliable
      way to do this is to enclose the entire Kconfig file in an 'if IMA' block.
      This also allows removing the existing direct dependencies.
      
      Fixes: be210c6d
      
       ("ima: Finish deprecation of IMA_TRUSTED_KEYRING Kconfig")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      23acd178
    • Junxiao Bi's avatar
      scsi: target: core: Fix deadlock due to recursive locking · 6c5d7f54
      Junxiao Bi authored
      [ Upstream commit a154f5f6 ]
      
      The following call trace shows a deadlock issue due to recursive locking of
      mutex "device_mutex". First lock acquire is in target_for_each_device() and
      second in target_free_device().
      
       PID: 148266   TASK: ffff8be21ffb5d00  CPU: 10   COMMAND: "iscsi_ttx"
        #0 [ffffa2bfc9ec3b18] __schedule at ffffffffa8060e7f
        #1 [ffffa2bfc9ec3ba0] schedule at ffffffffa8061224
        #2 [ffffa2bfc9ec3bb8] schedule_preempt_disabled at ffffffffa80615ee
        #3 [ffffa2bfc9ec3bc8] __mutex_lock at ffffffffa8062fd7
        #4 [ffffa2bfc9ec3c40] __mutex_lock_slowpath at ffffffffa80631d3
        #5 [ffffa2bfc9ec3c50] mutex_lock at ffffffffa806320c
        #6 [ffffa2bfc9ec3c68] target_free_device at ffffffffc0935998 [target_core_mod]
        #7 [ffffa2bfc9ec3c90] target_core_dev_release at ffffffffc092f975 [target_core_mod]
        #8 [ffffa2bfc9ec3ca0] config_item_put at ffffffffa79d250f
        #9 [ffffa2bfc9ec3cd0] config_item_put at ffffffffa79d2583
       #10 [ffffa2bfc9ec3ce0] target_devices_idr_iter at ffffffffc0933f3a [target_core_mod]
       #11 [ffffa2bfc9ec3d00] idr_for_each at ffffffffa803f6fc
       #12 [ffffa2bfc9ec3d60] target_for_each_device at ffffffffc0935670 [target_core_mod]
       #13 [ffffa2bfc9ec3d98] transport_deregister_session at ffffffffc0946408 [target_core_mod]
       #14 [ffffa2bfc9ec3dc8] iscsit_close_session at ffffffffc09a44a6 [iscsi_target_mod]
       #15 [ffffa2bfc9ec3df0] iscsit_close_connection at ffffffffc09a4a88 [iscsi_target_mod]
       #16 [ffffa2bfc9ec3df8] finish_task_switch at ffffffffa76e5d07
       #17 [ffffa2bfc9ec3e78] iscsit_take_action_for_connection_exit at ffffffffc0991c23 [iscsi_target_mod]
       #18 [ffffa2bfc9ec3ea0] iscsi_target_tx_thread at ffffffffc09a403b [iscsi_target_mod]
       #19 [ffffa2bfc9ec3f08] kthread at ffffffffa76d8080
       #20 [ffffa2bfc9ec3f50] ret_from_fork at ffffffffa8200364
      
      Fixes: 36d4cb46
      
       ("scsi: target: Avoid that EXTENDED COPY commands trigger lock inversion")
      Signed-off-by: default avatarJunxiao Bi <junxiao.bi@oracle.com>
      Link: https://lore.kernel.org/r/20230918225848.66463-1-junxiao.bi@oracle.com
      Reviewed-by: default avatarMike Christie <michael.christie@oracle.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6c5d7f54
    • Oleksandr Tymoshenko's avatar
      ima: Finish deprecation of IMA_TRUSTED_KEYRING Kconfig · f23c35f0
      Oleksandr Tymoshenko authored
      [ Upstream commit be210c6d ]
      
      The removal of IMA_TRUSTED_KEYRING made IMA_LOAD_X509
      and IMA_BLACKLIST_KEYRING unavailable because the latter
      two depend on the former. Since IMA_TRUSTED_KEYRING was
      deprecated in favor of INTEGRITY_TRUSTED_KEYRING use it
      as a dependency for the two Kconfigs affected by the
      deprecation.
      
      Fixes: 5087fd9e
      
       ("ima: Remove deprecated IMA_TRUSTED_KEYRING Kconfig")
      Signed-off-by: default avatarOleksandr Tymoshenko <ovt@google.com>
      Reviewed-by: default avatarNayna Jain <nayna@linux.ibm.com>
      Signed-off-by: default avatarMimi Zohar <zohar@linux.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f23c35f0
    • Michał Mirosław's avatar
      regulator/core: regulator_register: set device->class earlier · 937ec443
      Michał Mirosław authored
      [ Upstream commit 8adb4e64 ]
      
      When fixing a memory leak in commit d3c73156 ("regulator: plug
      of_node leak in regulator_register()'s error path") it moved the
      device_initialize() call earlier, but did not move the `dev->class`
      initialization.  The bug was spotted and fixed by reverting part of
      the commit (in commit 5f4b204b "regulator: core: fix kobject
      release warning and memory leak in regulator_register()") but
      introducing a different bug: now early error paths use `kfree(dev)`
      instead of `put_device()` for an already initialized `struct device`.
      
      Move the missing assignments to just after `device_initialize()`.
      
      Fixes: d3c73156
      
       ("regulator: plug of_node leak in regulator_register()'s error path")
      Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
      Link: https://lore.kernel.org/r/b5b19cb458c40c9d02f3d5a7bd1ba7d97ba17279.1695077303.git.mirq-linux@rere.qmqm.pl
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      937ec443
    • Yong Wu's avatar
      iommu/mediatek: Fix share pgtable for iova over 4GB · fbac416e
      Yong Wu authored
      [ Upstream commit b07eba71 ]
      
      In mt8192/mt8186, there is only one MM IOMMU that supports 16GB iova
      space, which is shared by display, vcodec and camera. These two SoC use
      one pgtable and have not the flag SHARE_PGTABLE, we should also keep
      share pgtable for this case.
      
      In mtk_iommu_domain_finalise, MM IOMMU always share pgtable, thus remove
      the flag SHARE_PGTABLE checking. Infra IOMMU always uses independent
      pgtable.
      
      Fixes: cf69ef46
      
       ("iommu/mediatek: Fix two IOMMU share pagetable issue")
      Reported-by: default avatarLaura Nao <laura.nao@collabora.com>
      Closes: https://lore.kernel.org/linux-iommu/20230818154156.314742-1-laura.nao@collabora.com/
      Signed-off-by: default avatarYong Wu <yong.wu@mediatek.com>
      Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Tested-by: default avatarLaura Nao <laura.nao@collabora.com>
      Link: https://lore.kernel.org/r/20230819081443.8333-1-yong.wu@mediatek.com
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fbac416e
    • Breno Leitao's avatar
      perf/x86/amd: Do not WARN() on every IRQ · 183e0f9d
      Breno Leitao authored
      [ Upstream commit 599522d9 ]
      
      Zen 4 systems running buggy microcode can hit a WARN_ON() in the PMI
      handler, as shown below, several times while perf runs. A simple
      `perf top` run is enough to render the system unusable:
      
        WARNING: CPU: 18 PID: 20608 at arch/x86/events/amd/core.c:944 amd_pmu_v2_handle_irq+0x1be/0x2b0
      
      This happens because the Performance Counter Global Status Register
      (PerfCntGlobalStatus) has one or more bits set which are considered
      reserved according to the "AMD64 Architecture Programmer’s Manual,
      Volume 2: System Programming, 24593":
      
        https://www.amd.com/system/files/TechDocs/24593.pdf
      
      To make this less intrusive, warn just once if any reserved bit is set
      and prompt the user to update the microcode. Also sanitize the value to
      what the code is handling, so that the overflow events continue to be
      handled for the number of counters that are known to be sane.
      
      Going forward, the following microcode patch levels are recommended
      for Zen 4 processors in order to avoid such issues with reserved bits:
      
        Family=0x19 Model=0x11 Stepping=0x01: Patch=0x0a10113e
        Family=0x19 Model=0x11 Stepping=0x02: Patch=0x0a10123e
        Family=0x19 Model=0xa0 Stepping=0x01: Patch=0x0aa00116
        Family=0x19 Model=0xa0 Stepping=0x02: Patch=0x0aa00212
      
      Commit f2eb058afc57 ("linux-firmware: Update AMD cpu microcode") from
      the linux-firmware tree has binaries that meet the minimum required
      patch levels.
      
        [ sandipan: - add message to prompt users to update microcode
                    - rework commit message and call out required microcode levels ]
      
      Fixes: 7685665c
      
       ("perf/x86/amd/core: Add PerfMonV2 overflow handling")
      Reported-by: default avatarJirka Hladky <jhladky@redhat.com>
      Signed-off-by: default avatarBreno Leitao <leitao@debian.org>
      Signed-off-by: default avatarSandipan Das <sandipan.das@amd.com>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Link: https://lore.kernel.org/all/3540f985652f41041e54ee82aa53e7dbd55739ae.1694696888.git.sandipan.das@amd.com/
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      183e0f9d
    • Johannes Berg's avatar
      wifi: mac80211: fix potential key use-after-free · 2f4e16e3
      Johannes Berg authored
      [ Upstream commit 31db78a4
      
       ]
      
      When ieee80211_key_link() is called by ieee80211_gtk_rekey_add()
      but returns 0 due to KRACK protection (identical key reinstall),
      ieee80211_gtk_rekey_add() will still return a pointer into the
      key, in a potential use-after-free. This normally doesn't happen
      since it's only called by iwlwifi in case of WoWLAN rekey offload
      which has its own KRACK protection, but still better to fix, do
      that by returning an error code and converting that to success on
      the cfg80211 boundary only, leaving the error for bad callers of
      ieee80211_gtk_rekey_add().
      
      Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Fixes: fdf7cb41
      
       ("mac80211: accept key reinstall without changing anything")
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2f4e16e3
    • Richard Fitzgerald's avatar
      regmap: rbtree: Fix wrong register marked as in-cache when creating new node · 89192c6c
      Richard Fitzgerald authored
      [ Upstream commit 7a795ac8
      
       ]
      
      When regcache_rbtree_write() creates a new rbtree_node it was passing the
      wrong bit number to regcache_rbtree_set_register(). The bit number is the
      offset __in number of registers__, but in the case of creating a new block
      regcache_rbtree_write() was not dividing by the address stride to get the
      number of registers.
      
      Fix this by dividing by map->reg_stride.
      Compare with regcache_rbtree_read() where the bit is checked.
      
      This bug meant that the wrong register was marked as present. The register
      that was written to the cache could not be read from the cache because it
      was not marked as cached. But a nearby register could be marked as having
      a cached value even if it was never written to the cache.
      
      Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
      Fixes: 3f4ff561
      
       ("regmap: rbtree: Make cache_present bitmap per node")
      Link: https://lore.kernel.org/r/20230922153711.28103-1-rf@opensource.cirrus.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      89192c6c
    • Sandipan Das's avatar
      perf/x86/amd/core: Fix overflow reset on hotplug · e485a69d
      Sandipan Das authored
      [ Upstream commit 23d2626b ]
      
      Kernels older than v5.19 do not support PerfMonV2 and the PMI handler
      does not clear the overflow bits of the PerfCntrGlobalStatus register.
      Because of this, loading a recent kernel using kexec from an older
      kernel can result in inconsistent register states on Zen 4 systems.
      
      The PMI handler of the new kernel gets confused and shows a warning when
      an overflow occurs because some of the overflow bits are set even if the
      corresponding counters are inactive. These are remnants from overflows
      that were handled by the older kernel.
      
      During CPU hotplug, the PerfCntrGlobalCtl and PerfCntrGlobalStatus
      registers should always be cleared for PerfMonV2-capable processors.
      However, a condition used for NB event constaints applicable only to
      older processors currently prevents this from happening. Move the reset
      sequence to an appropriate place and also clear the LBR Freeze bit.
      
      Fixes: 21d59e3e
      
       ("perf/x86/amd/core: Detect PerfMonV2 support")
      Signed-off-by: default avatarSandipan Das <sandipan.das@amd.com>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Link: https://lore.kernel.org/r/882a87511af40792ba69bb0e9026f19a2e71e8a3.1694696888.git.sandipan.das@amd.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e485a69d
    • Felix Fietkau's avatar
      wifi: mt76: mt76x02: fix MT76x0 external LNA gain handling · 6150d459
      Felix Fietkau authored
      [ Upstream commit 684e45e1 ]
      
      On MT76x0, LNA gain should be applied for both external and internal LNA.
      On MT76x2, LNA gain should be treated as 0 for external LNA.
      Move the LNA type based logic to mt76x2 in order to fix mt76x0.
      
      Fixes: 2daa6758
      
       ("mt76x0: unify lna_gain parsing")
      Reported-by: default avatarShiji Yang <yangshiji66@outlook.com>
      Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
      Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
      Link: https://lore.kernel.org/r/20230919194747.31647-1-nbd@nbd.name
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6150d459
    • Alexandra Diupina's avatar
      drivers/net: process the result of hdlc_open() and add call of hdlc_close() in uhdlc_close() · b9eded28
      Alexandra Diupina authored
      [ Upstream commit a59addac ]
      
      Process the result of hdlc_open() and call uhdlc_close()
      in case of an error. It is necessary to pass the error
      code up the control flow, similar to a possible
      error in request_irq().
      Also add a hdlc_close() call to the uhdlc_close()
      because the comment to hdlc_close() says it must be called
      by the hardware driver when the HDLC device is being closed
      
      Found by Linux Verification Center (linuxtesting.org) with SVACE.
      
      Fixes: c19b6d24
      
       ("drivers/net: support hdlc function for QE-UCC")
      Signed-off-by: default avatarAlexandra Diupina <adiupina@astralinux.ru>
      Reviewed-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b9eded28
    • Luiz Augusto von Dentz's avatar
      Bluetooth: ISO: Fix handling of listen for unicast · 6bfc4c70
      Luiz Augusto von Dentz authored
      [ Upstream commit e0275ea5 ]
      
      iso_listen_cis shall only return -EADDRINUSE if the listening socket has
      the destination set to BDADDR_ANY otherwise if the destination is set to
      a specific address it is for broadcast which shall be ignored.
      
      Fixes: f764a6c2
      
       ("Bluetooth: ISO: Add broadcast support")
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6bfc4c70
    • Yao Xiao's avatar
      Bluetooth: Delete unused hci_req_prepare_suspend() declaration · c201d944
      Yao Xiao authored
      [ Upstream commit cbaabbcd ]
      
      hci_req_prepare_suspend() has been deprecated in favor of
      hci_suspend_sync().
      
      Fixes: 182ee45d
      
       ("Bluetooth: hci_sync: Rework hci_suspend_notifier")
      Signed-off-by: default avatarYao Xiao <xiaoyao@rock-chips.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c201d944
    • Chen-Yu Tsai's avatar
      regulator: mt6358: split ops for buck and linear range LDO regulators · b46384a6
      Chen-Yu Tsai authored
      [ Upstream commit 7e37c851 ]
      
      The buck and linear range LDO (VSRAM_*) regulators share one set of ops.
      This set includes support for get/set mode. However this only makes
      sense for buck regulators, not LDOs. The callbacks were not checking
      whether the register offset and/or mask for mode setting was valid or
      not. This ends up making the kernel report "normal" mode operation for
      the LDOs.
      
      Create a new set of ops without the get/set mode callbacks for the
      linear range LDO regulators.
      
      Fixes: f67ff1bd
      
       ("regulator: mt6358: Add support for MT6358 regulator")
      Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
      Link: https://lore.kernel.org/r/20230920085336.136238-1-wenst@chromium.org
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b46384a6
    • Chen-Yu Tsai's avatar
      regulator: mt6358: Use linear voltage helpers for single range regulators · a01576f5
      Chen-Yu Tsai authored
      [ Upstream commit ea861df7
      
       ]
      
      Some of the regulators on the MT6358/MT6366 PMICs have just one linear
      voltage range. These are the bulk regulators and VSRAM_* LDOs. Currently
      they are modeled with one linear range, but also have their minimum,
      maximum, and step voltage described.
      
      Convert them to the linear voltage helpers. These helpers are a bit
      simpler, and we can also drop the linear range definitions. Also reflow
      the touched lines now that they are shorter.
      
      Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
      Link: https://lore.kernel.org/r/20230609083009.2822259-7-wenst@chromium.org
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Stable-dep-of: 7e37c851
      
       ("regulator: mt6358: split ops for buck and linear range LDO regulators")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a01576f5
    • Chen-Yu Tsai's avatar
      regulator: mt6358: Drop *_SSHUB regulators · c6ac4025
      Chen-Yu Tsai authored
      [ Upstream commit 04ba6652
      
       ]
      
      The *_SSHUB regulators are actually alternate configuration interfaces
      for their non *_SSHUB counterparts. They are not separate regulator
      outputs. These registers are intended for the companion processor to
      use to configure the power rails while the main processor is sleeping.
      They are not intended for the main operating system to use.
      
      Since they are not real outputs they shouldn't be modeled separately.
      Remove them. Luckily no device tree actually uses them.
      
      Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
      Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Reviewed-by: default avatarMatthias Brugger <matthias.bgg@gmail.com>
      Link: https://lore.kernel.org/r/20230609083009.2822259-5-wenst@chromium.org
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Stable-dep-of: 7e37c851
      
       ("regulator: mt6358: split ops for buck and linear range LDO regulators")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c6ac4025
    • Leon Hwang's avatar
      bpf: Fix tr dereferencing · 163042a0
      Leon Hwang authored
      [ Upstream commit b724a641 ]
      
      Fix 'tr' dereferencing bug when CONFIG_BPF_JIT is turned off.
      
      When CONFIG_BPF_JIT is turned off, 'bpf_trampoline_get()' returns NULL,
      which is same as the cases when CONFIG_BPF_JIT is turned on.
      
      Closes: https://lore.kernel.org/r/202309131936.5Nc8eUD0-lkp@intel.com/
      Fixes: f7b12b6f
      
       ("bpf: verifier: refactor check_attach_btf_id()")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Signed-off-by: default avatarLeon Hwang <hffilwlqm@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20230917153846.88732-1-hffilwlqm@gmail.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      163042a0
    • Marek Behún's avatar
      leds: Drop BUG_ON check for LED_COLOR_ID_MULTI · c14c7214
      Marek Behún authored
      [ Upstream commit 9dc1664f ]
      
      Commit c3f85318 ("leds: Fix BUG_ON check for LED_COLOR_ID_MULTI that
      is always false") fixed a no-op BUG_ON. This turned out to cause a
      regression, since some in-tree device-tree files already use
      LED_COLOR_ID_MULTI.
      
      Drop the BUG_ON altogether.
      
      Fixes: c3f85318
      
       ("leds: Fix BUG_ON check for LED_COLOR_ID_MULTI that is always false")
      Reported-by: default avatarDa Xue <da@libre.computer>
      Closes: https://lore.kernel.org/linux-leds/ZQLelWcNjjp2xndY@duo.ucw.cz/T/
      Signed-off-by: default avatarMarek Behún <kabel@kernel.org>
      Link: https://lore.kernel.org/r/20230918140724.18634-1-kabel@kernel.org
      Signed-off-by: default avatarLee Jones <lee@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c14c7214
    • Pin-yen Lin's avatar
      wifi: mwifiex: Fix oob check condition in mwifiex_process_rx_packet · 6b706286
      Pin-yen Lin authored
      [ Upstream commit aef7a030 ]
      
      Only skip the code path trying to access the rfc1042 headers when the
      buffer is too small, so the driver can still process packets without
      rfc1042 headers.
      
      Fixes: 11958528
      
       ("wifi: mwifiex: Fix OOB and integer underflow when rx packets")
      Signed-off-by: default avatarPin-yen Lin <treapking@chromium.org>
      Acked-by: default avatarBrian Norris <briannorris@chromium.org>
      Reviewed-by: default avatarMatthew Wang <matthewmwang@chromium.org>
      Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
      Link: https://lore.kernel.org/r/20230908104308.1546501-1-treapking@chromium.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6b706286
    • Johannes Berg's avatar
      wifi: cfg80211: add missing kernel-doc for cqm_rssi_work · 42970d32
      Johannes Berg authored
      [ Upstream commit d1383077
      
       ]
      
      As reported by Stephen, I neglected to add the kernel-doc
      for the new struct member. Fix that.
      
      Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Fixes: 37c20b2e
      
       ("wifi: cfg80211: fix cqm_config access race")
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      42970d32
    • Johannes Berg's avatar
      wifi: cfg80211: fix cqm_config access race · c797498e
      Johannes Berg authored
      [ Upstream commit 37c20b2e
      
       ]
      
      Max Schulze reports crashes with brcmfmac. The reason seems
      to be a race between userspace removing the CQM config and
      the driver calling cfg80211_cqm_rssi_notify(), where if the
      data is freed while cfg80211_cqm_rssi_notify() runs it will
      crash since it assumes wdev->cqm_config is set. This can't
      be fixed with a simple non-NULL check since there's nothing
      we can do for locking easily, so use RCU instead to protect
      the pointer, but that requires pulling the updates out into
      an asynchronous worker so they can sleep and call back into
      the driver.
      
      Since we need to change the free anyway, also change it to
      go back to the old settings if changing the settings fails.
      
      Reported-and-tested-by: default avatarMax Schulze <max.schulze@online.de>
      Closes: https://lore.kernel.org/r/ac96309a-8d8d-4435-36e6-6d152eb31876@online.de
      Fixes: 4a4b8169
      
       ("cfg80211: Accept multiple RSSI thresholds for CQM")
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c797498e
    • Johannes Berg's avatar
      wifi: cfg80211: add a work abstraction with special semantics · 3fcc6d7d
      Johannes Berg authored
      [ Upstream commit a3ee4dc8
      
       ]
      
      Add a work abstraction at the cfg80211 level that will always
      hold the wiphy_lock() for any work executed and therefore also
      can be canceled safely (without waiting) while holding that.
      This improves on what we do now as with the new wiphy works we
      don't have to worry about locking while cancelling them safely.
      
      Also, don't let such works run while the device is suspended,
      since they'll likely need to interact with the device. Flush
      them before suspend though.
      
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Stable-dep-of: 37c20b2e
      
       ("wifi: cfg80211: fix cqm_config access race")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3fcc6d7d
    • Johannes Berg's avatar
      wifi: cfg80211: move wowlan disable under locks · 2ae4585f
      Johannes Berg authored
      [ Upstream commit a993df0f
      
       ]
      
      This is a driver callback, and the driver should be able
      to assume that it's called with the wiphy lock held. Move
      the call up so that's true, it has no other effect since
      the device is already unregistering and we cannot reach
      this function through other paths.
      
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Stable-dep-of: 37c20b2e
      
       ("wifi: cfg80211: fix cqm_config access race")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2ae4585f
    • Johannes Berg's avatar
      wifi: cfg80211: hold wiphy lock in auto-disconnect · fb195ff4
      Johannes Berg authored
      [ Upstream commit e9da6df7
      
       ]
      
      Most code paths in cfg80211 already hold the wiphy lock,
      mostly by virtue of being called from nl80211, so make
      the auto-disconnect worker also hold it, aligning the
      locking promises between different parts of cfg80211.
      
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Stable-dep-of: 37c20b2e
      
       ("wifi: cfg80211: fix cqm_config access race")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fb195ff4
    • Christophe JAILLET's avatar
      wifi: iwlwifi: mvm: Fix a memory corruption issue · 6b322344
      Christophe JAILLET authored
      [ Upstream commit 8ba438ef ]
      
      A few lines above, space is kzalloc()'ed for:
      	sizeof(struct iwl_nvm_data) +
      	sizeof(struct ieee80211_channel) +
      	sizeof(struct ieee80211_rate)
      
      'mvm->nvm_data' is a 'struct iwl_nvm_data', so it is fine.
      
      At the end of this structure, there is the 'channels' flex array.
      Each element is of type 'struct ieee80211_channel'.
      So only 1 element is allocated in this array.
      
      When doing:
        mvm->nvm_data->bands[0].channels = mvm->nvm_data->channels;
      We point at the first element of the 'channels' flex array.
      So this is fine.
      
      However, when doing:
        mvm->nvm_data->bands[0].bitrates =
      			(void *)((u8 *)mvm->nvm_data->channels + 1);
      because of the "(u8 *)" cast, we add only 1 to the address of the beginning
      of the flex array.
      
      It is likely that we want point at the 'struct ieee80211_rate' allocated
      just after.
      
      Remove the spurious casting so that the pointer arithmetic works as
      expected.
      
      Fixes: 8ca151b5
      
       ("iwlwifi: add the MVM driver")
      Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Acked-by: default avatarGregory Greenman <gregory.greenman@intel.com>
      Link: https://lore.kernel.org/r/23f0ec986ef1529055f4f93dcb3940a6cf8d9a94.1690143750.git.christophe.jaillet@wanadoo.fr
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6b322344
    • Arnd Bergmann's avatar
      wifi: iwlwifi: dbg_ini: fix structure packing · 78b5c62e
      Arnd Bergmann authored
      [ Upstream commit 424c82e8 ]
      
      The iwl_fw_ini_error_dump_range structure has conflicting alignment
      requirements for the inner union and the outer struct:
      
      In file included from drivers/net/wireless/intel/iwlwifi/fw/dbg.c:9:
      drivers/net/wireless/intel/iwlwifi/fw/error-dump.h:312:2: error: field  within 'struct iwl_fw_ini_error_dump_range' is less aligned than 'union iwl_fw_ini_error_dump_range::(anonymous at drivers/net/wireless/intel/iwlwifi/fw/error-dump.h:312:2)' and is usually due to 'struct iwl_fw_ini_error_dump_range' being packed, which can lead to unaligned accesses [-Werror,-Wunaligned-access]
              union {
      
      As the original intention was apparently to make the entire structure
      unaligned, mark the innermost members the same way so the union
      becomes packed as well.
      
      Fixes: 97319355
      
       ("iwlwifi: dbg_ini: dump headers cleanup")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarGregory Greenman <gregory.greenman@intel.com>
      Link: https://lore.kernel.org/r/20230616090343.2454061-1-arnd@kernel.org
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      78b5c62e