Commit 99c8c16a authored by Bastien Curutchet (Schneider Electric)'s avatar Bastien Curutchet (Schneider Electric) Committed by Jakub Kicinski
Browse files

net: dsa: microchip: Fix error path in PTP IRQ setup



If request_threaded_irq() fails during the PTP message IRQ setup, the
newly created IRQ mapping is never disposed. Indeed, the
ksz_ptp_irq_setup()'s error path only frees the mappings that were
successfully set up.

Dispose the newly created mapping if the associated
request_threaded_irq() fails at setup.

Cc: stable@vger.kernel.org
Fixes: d0b8fec8 ("net: dsa: microchip: Fix symetry in ksz_ptp_msg_irq_{setup/free}()")
Signed-off-by: default avatarBastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
Link: https://patch.msgid.link/20260309-ksz-ptp-irq-fix-v1-1-757b3b985955@bootlin.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 20c1be4c
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1108,6 +1108,7 @@ static int ksz_ptp_msg_irq_setup(struct ksz_port *port, u8 n)
	const struct ksz_dev_ops *ops = port->ksz_dev->dev_ops;
	struct ksz_irq *ptpirq = &port->ptpirq;
	struct ksz_ptp_irq *ptpmsg_irq;
	int ret;

	ptpmsg_irq = &port->ptpmsg_irq[n];
	ptpmsg_irq->num = irq_create_mapping(ptpirq->domain, n);
@@ -1119,9 +1120,13 @@ static int ksz_ptp_msg_irq_setup(struct ksz_port *port, u8 n)

	strscpy(ptpmsg_irq->name, name[n]);

	return request_threaded_irq(ptpmsg_irq->num, NULL,
	ret = request_threaded_irq(ptpmsg_irq->num, NULL,
				   ksz_ptp_msg_thread_fn, IRQF_ONESHOT,
				   ptpmsg_irq->name, ptpmsg_irq);
	if (ret)
		irq_dispose_mapping(ptpmsg_irq->num);

	return ret;
}

int ksz_ptp_irq_setup(struct dsa_switch *ds, u8 p)