Re: [syzbot] [nvme?] BUG: corrupted list in nvmet_fc_remove_port

From: Hillf Danton

Date: Mon Oct 12 2026 - 08:51:30 EST


> Date: Sun, 11 Oct 2026 10:32:37 -0700 [thread overview]
> Hello,
>
> syzbot found the following issue on:
>
> HEAD commit: a5ebb76233b7 Merge tag 'edac_urgent_for_v7.3_rc7' of git:/..
> git tree: upstream
> console+strace: https://syzkaller.appspot.com/x/log.txt?x=1494923e580000
> kernel config: https://syzkaller.appspot.com/x/.config?x=df4bbab1c2172b9f
> dashboard link: https://syzkaller.appspot.com/bug?extid=c98b21427617af7f547a
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=126a0f15580000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=166a0f15580000

#syz test

--- x/drivers/nvme/target/fc.c
+++ y/drivers/nvme/target/fc.c
@@ -1620,6 +1620,7 @@ nvmet_fc_free_pending_reqs(struct nvmet_
}
}

+static DEFINE_MUTEX(tgtp_mutex);
/**
* nvmet_fc_unregister_targetport - transport entry point called by an
* LLDD to deregister/remove a previously
@@ -1637,6 +1638,7 @@ nvmet_fc_unregister_targetport(struct nv
struct nvmet_fc_tgtport *tgtport = targetport_to_tgtport(target_port);
unsigned long flags;

+ mutex_lock(&tgtp_mutex);
spin_lock_irqsave(&nvmet_fc_tgtlock, flags);
list_del(&tgtport->tgt_list);
spin_unlock_irqrestore(&nvmet_fc_tgtlock, flags);
@@ -1645,6 +1647,7 @@ nvmet_fc_unregister_targetport(struct nv

/* terminate any outstanding associations */
__nvmet_fc_free_assocs(tgtport);
+ mutex_unlock(&tgtp_mutex);

flush_workqueue(nvmet_wq);

@@ -2919,6 +2922,7 @@ nvmet_fc_remove_port(struct nvmet_port *
struct nvmet_fc_tgtport *tgtport = NULL;
unsigned long flags;

+ mutex_lock(&tgtp_mutex);
spin_lock_irqsave(&nvmet_fc_tgtlock, flags);
if (pe->tgtport && nvmet_fc_tgtport_get(pe->tgtport))
tgtport = pe->tgtport;
@@ -2933,6 +2937,7 @@ nvmet_fc_remove_port(struct nvmet_port *
}

kfree(pe);
+ mutex_unlock(&tgtp_mutex);
}

static void
--