Takashi Iwai d8c38e
From e230a4455ac3e9b112f0367d1b8e255e141afae0 Mon Sep 17 00:00:00 2001
Takashi Iwai d8c38e
From: Dan Carpenter <dan.carpenter@oracle.com>
Takashi Iwai d8c38e
Date: Tue, 30 Aug 2022 17:55:07 +0300
Takashi Iwai d8c38e
Subject: [PATCH] staging: rtl8712: fix use after free bugs
Takashi Iwai d8c38e
Git-commit: e230a4455ac3e9b112f0367d1b8e255e141afae0
Takashi Iwai d8c38e
Patch-mainline: v6.0-rc4
Takashi Iwai d8c38e
References: CVE-2022-4095 bsc#1205514
Takashi Iwai d8c38e
Takashi Iwai d8c38e
_Read/Write_MACREG callbacks are NULL so the read/write_macreg_hdl()
Takashi Iwai d8c38e
functions don't do anything except free the "pcmd" pointer.  It
Takashi Iwai d8c38e
results in a use after free.  Delete them.
Takashi Iwai d8c38e
Takashi Iwai d8c38e
Fixes: 2865d42c78a9 ("staging: r8712u: Add the new driver to the mainline kernel")
Takashi Iwai d8c38e
Cc: stable <stable@kernel.org>
Takashi Iwai d8c38e
Reported-by: Zheng Wang <hackerzheng666@gmail.com>
Takashi Iwai d8c38e
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Takashi Iwai d8c38e
Link: https://lore.kernel.org/r/Yw4ASqkYcUhUfoY2@kili
Takashi Iwai d8c38e
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Takashi Iwai d8c38e
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai d8c38e
Takashi Iwai d8c38e
---
Takashi Iwai d8c38e
 drivers/staging/rtl8712/rtl8712_cmd.c | 36 ---------------------------
Takashi Iwai d8c38e
 1 file changed, 36 deletions(-)
Takashi Iwai d8c38e
Takashi Iwai d8c38e
diff --git a/drivers/staging/rtl8712/rtl8712_cmd.c b/drivers/staging/rtl8712/rtl8712_cmd.c
Takashi Iwai d8c38e
index 2326aae6709e..bb7db96ed821 100644
Takashi Iwai d8c38e
--- a/drivers/staging/rtl8712/rtl8712_cmd.c
Takashi Iwai d8c38e
+++ b/drivers/staging/rtl8712/rtl8712_cmd.c
Takashi Iwai d8c38e
@@ -117,34 +117,6 @@ static void r871x_internal_cmd_hdl(struct _adapter *padapter, u8 *pbuf)
Takashi Iwai d8c38e
 	kfree(pdrvcmd->pbuf);
Takashi Iwai d8c38e
 }
Takashi Iwai d8c38e
 
Takashi Iwai d8c38e
-static u8 read_macreg_hdl(struct _adapter *padapter, u8 *pbuf)
Takashi Iwai d8c38e
-{
Takashi Iwai d8c38e
-	void (*pcmd_callback)(struct _adapter *dev, struct cmd_obj	*pcmd);
Takashi Iwai d8c38e
-	struct cmd_obj *pcmd  = (struct cmd_obj *)pbuf;
Takashi Iwai d8c38e
-
Takashi Iwai d8c38e
-	/*  invoke cmd->callback function */
Takashi Iwai d8c38e
-	pcmd_callback = cmd_callback[pcmd->cmdcode].callback;
Takashi Iwai d8c38e
-	if (!pcmd_callback)
Takashi Iwai d8c38e
-		r8712_free_cmd_obj(pcmd);
Takashi Iwai d8c38e
-	else
Takashi Iwai d8c38e
-		pcmd_callback(padapter, pcmd);
Takashi Iwai d8c38e
-	return H2C_SUCCESS;
Takashi Iwai d8c38e
-}
Takashi Iwai d8c38e
-
Takashi Iwai d8c38e
-static u8 write_macreg_hdl(struct _adapter *padapter, u8 *pbuf)
Takashi Iwai d8c38e
-{
Takashi Iwai d8c38e
-	void (*pcmd_callback)(struct _adapter *dev, struct cmd_obj	*pcmd);
Takashi Iwai d8c38e
-	struct cmd_obj *pcmd  = (struct cmd_obj *)pbuf;
Takashi Iwai d8c38e
-
Takashi Iwai d8c38e
-	/*  invoke cmd->callback function */
Takashi Iwai d8c38e
-	pcmd_callback = cmd_callback[pcmd->cmdcode].callback;
Takashi Iwai d8c38e
-	if (!pcmd_callback)
Takashi Iwai d8c38e
-		r8712_free_cmd_obj(pcmd);
Takashi Iwai d8c38e
-	else
Takashi Iwai d8c38e
-		pcmd_callback(padapter, pcmd);
Takashi Iwai d8c38e
-	return H2C_SUCCESS;
Takashi Iwai d8c38e
-}
Takashi Iwai d8c38e
-
Takashi Iwai d8c38e
 static u8 read_bbreg_hdl(struct _adapter *padapter, u8 *pbuf)
Takashi Iwai d8c38e
 {
Takashi Iwai d8c38e
 	struct cmd_obj *pcmd  = (struct cmd_obj *)pbuf;
Takashi Iwai d8c38e
@@ -213,14 +185,6 @@ static struct cmd_obj *cmd_hdl_filter(struct _adapter *padapter,
Takashi Iwai d8c38e
 	pcmd_r = NULL;
Takashi Iwai d8c38e
 
Takashi Iwai d8c38e
 	switch (pcmd->cmdcode) {
Takashi Iwai d8c38e
-	case GEN_CMD_CODE(_Read_MACREG):
Takashi Iwai d8c38e
-		read_macreg_hdl(padapter, (u8 *)pcmd);
Takashi Iwai d8c38e
-		pcmd_r = pcmd;
Takashi Iwai d8c38e
-		break;
Takashi Iwai d8c38e
-	case GEN_CMD_CODE(_Write_MACREG):
Takashi Iwai d8c38e
-		write_macreg_hdl(padapter, (u8 *)pcmd);
Takashi Iwai d8c38e
-		pcmd_r = pcmd;
Takashi Iwai d8c38e
-		break;
Takashi Iwai d8c38e
 	case GEN_CMD_CODE(_Read_BBREG):
Takashi Iwai d8c38e
 		read_bbreg_hdl(padapter, (u8 *)pcmd);
Takashi Iwai d8c38e
 		break;
Takashi Iwai d8c38e
-- 
Takashi Iwai d8c38e
2.35.3
Takashi Iwai d8c38e