linux-stable/net/nfc
Duoming Zhou 2372405955 NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc
[ Upstream commit 23dd458135 ]

There are sleep in atomic context bugs when the request to secure
element of st-nci is timeout. The root cause is that nci_skb_alloc
with GFP_KERNEL parameter is called in st_nci_se_wt_timeout which is
a timer handler. The call paths that could trigger bugs are shown below:

    (interrupt context 1)
st_nci_se_wt_timeout
  nci_hci_send_event
    nci_hci_send_data
      nci_skb_alloc(..., GFP_KERNEL) //may sleep

   (interrupt context 2)
st_nci_se_wt_timeout
  nci_hci_send_event
    nci_hci_send_data
      nci_send_data
        nci_queue_tx_data_frags
          nci_skb_alloc(..., GFP_KERNEL) //may sleep

This patch changes allocation mode of nci_skb_alloc from GFP_KERNEL to
GFP_ATOMIC in order to prevent atomic context sleeping. The GFP_ATOMIC
flag makes memory allocation operation could be used in atomic context.

Fixes: ed06aeefda ("nfc: st-nci: Rename st21nfcb to st-nci")
Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20220517012530.75714-1-duoming@zju.edu.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-05-25 09:57:32 +02:00
..
hci nfc: constify local pointer variables 2021-07-30 17:22:52 +02:00
nci NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc 2022-05-25 09:57:32 +02:00
af_nfc.c nfc: fix error handling of nfc_proto_register() 2021-10-13 17:32:38 -07:00
core.c nfc: replace improper check device_is_registered() in netlink related functions 2022-05-12 12:30:10 +02:00
digital.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288 2019-06-05 17:36:37 +02:00
digital_core.c NFC: digital: fix possible memory leak in digital_tg_listen_mdaa() 2021-10-13 17:44:29 -07:00
digital_dep.c net:nfc:digital: Fix a double free in digital_tg_recv_dep_req 2021-04-27 15:36:10 -07:00
digital_technology.c NFC: digital: fix possible memory leak in digital_in_send_sdd_req() 2021-10-13 17:44:29 -07:00
Kconfig net: remove redundant 'depends on NET' 2021-01-27 17:04:12 -08:00
llcp.h nfc: constify several pointers to u8, char and sk_buff 2021-07-30 17:22:52 +02:00
llcp_commands.c nfc: constify several pointers to u8, char and sk_buff 2021-07-30 17:22:52 +02:00
llcp_core.c nfc: constify several pointers to u8, char and sk_buff 2021-07-30 17:22:52 +02:00
llcp_sock.c nfc: llcp: fix NULL error pointer dereference on sendmsg() after failed bind() 2022-01-27 11:02:48 +01:00
Makefile
netlink.c NFC: netlink: fix sleep in atomic bug when firmware download timeout 2022-05-12 12:30:10 +02:00
nfc.h nfc: constify several pointers to u8, char and sk_buff 2021-07-30 17:22:52 +02:00
rawsock.c net: in_irq() cleanup 2021-08-13 14:09:19 -07:00