| From d821b2eb81c1e849278f5b1cd0ec54c4ab676938 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Jul 2024 11:08:18 -0500 |
| Subject: mISDN: Fix a use after free in hfcmulti_tx() |
| |
| From: Dan Carpenter <dan.carpenter@linaro.org> |
| |
| [ Upstream commit 61ab751451f5ebd0b98e02276a44e23a10110402 ] |
| |
| Don't dereference *sp after calling dev_kfree_skb(*sp). |
| |
| Fixes: af69fb3a8ffa ("Add mISDN HFC multiport driver") |
| Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> |
| Reviewed-by: Simon Horman <horms@kernel.org> |
| Link: https://patch.msgid.link/8be65f5a-c2dd-4ba0-8a10-bfe5980b8cfb@stanley.mountain |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/isdn/hardware/mISDN/hfcmulti.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c |
| index 2c74064652334..6e09975613300 100644 |
| --- a/drivers/isdn/hardware/mISDN/hfcmulti.c |
| +++ b/drivers/isdn/hardware/mISDN/hfcmulti.c |
| @@ -1931,7 +1931,7 @@ hfcmulti_dtmf(struct hfc_multi *hc) |
| static void |
| hfcmulti_tx(struct hfc_multi *hc, int ch) |
| { |
| - int i, ii, temp, len = 0; |
| + int i, ii, temp, tmp_len, len = 0; |
| int Zspace, z1, z2; /* must be int for calculation */ |
| int Fspace, f1, f2; |
| u_char *d; |
| @@ -2152,14 +2152,15 @@ hfcmulti_tx(struct hfc_multi *hc, int ch) |
| HFC_wait_nodebug(hc); |
| } |
| |
| + tmp_len = (*sp)->len; |
| dev_kfree_skb(*sp); |
| /* check for next frame */ |
| if (bch && get_next_bframe(bch)) { |
| - len = (*sp)->len; |
| + len = tmp_len; |
| goto next_frame; |
| } |
| if (dch && get_next_dframe(dch)) { |
| - len = (*sp)->len; |
| + len = tmp_len; |
| goto next_frame; |
| } |
| |
| -- |
| 2.43.0 |
| |