[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <37a5e33a-e47a-464e-9505-f88c9aa367b2@linux.alibaba.com>
Date: Mon, 12 Aug 2024 11:30:09 +0800
From: "D. Wythe" <alibuda@...ux.alibaba.com>
To: Liu Jian <liujian56@...wei.com>, linux-rdma@...r.kernel.org,
linux-s390@...r.kernel.org, netdev@...r.kernel.org
Cc: jgg@...pe.ca, leon@...nel.org, zyjzyj2000@...il.com,
wenjia@...ux.ibm.com, jaka@...ux.ibm.com, tonylu@...ux.alibaba.com,
guwen@...ux.alibaba.com, davem@...emloft.net, edumazet@...gle.com,
kuba@...nel.org, pabeni@...hat.com
Subject: Re: [PATCH net-next 3/4] net/smc: fix one NULL pointer dereference in
smc_ib_is_sg_need_sync()
On 8/9/24 4:31 PM, Liu Jian wrote:
> BUG: kernel NULL pointer dereference, address: 0000000000000238
> PGD 0 P4D 0
> Oops: 0000 [#1] PREEMPT SMP PTI
> CPU: 3 PID: 289 Comm: kworker/3:1 Kdump: loaded Tainted: G OE
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
> Workqueue: smc_hs_wq smc_listen_work [smc]
> RIP: 0010:dma_need_sync+0x5/0x60
> ...
> Call Trace:
> <TASK>
> ? dma_need_sync+0x5/0x60
> ? smc_ib_is_sg_need_sync+0x61/0xf0 [smc]
> smcr_buf_map_link+0x24a/0x380 [smc]
> __smc_buf_create+0x483/0xb10 [smc]
> smc_buf_create+0x21/0xe0 [smc]
> smc_listen_work+0xf11/0x14f0 [smc]
> ? smc_tcp_listen_work+0x364/0x520 [smc]
> process_one_work+0x18d/0x3f0
> worker_thread+0x304/0x440
> kthread+0xe4/0x110
> ret_from_fork+0x47/0x70
> ret_from_fork_asm+0x1a/0x30
> </TASK>
>
> If the software RoCE device is used, ibdev->dma_device is a null pointer.
> As a result, the problem occurs. Null pointer detection is added to
> prevent problems.
>
> Signed-off-by: Liu Jian <liujian56@...wei.com>
> ---
> net/smc/smc_ib.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/net/smc/smc_ib.c b/net/smc/smc_ib.c
> index 382351ac9434..059822cc3fde 100644
> --- a/net/smc/smc_ib.c
> +++ b/net/smc/smc_ib.c
> @@ -748,6 +748,8 @@ bool smc_ib_is_sg_need_sync(struct smc_link *lnk,
> buf_slot->sgt[lnk->link_idx].nents, i) {
> if (!sg_dma_len(sg))
> break;
> + if (!lnk->smcibdev->ibdev->dma_device)
> + break;
> if (dma_need_sync(lnk->smcibdev->ibdev->dma_device,
> sg_dma_address(sg))) {
> ret = true;
Maybe you need add a fix tag ?
Powered by blists - more mailing lists