|
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 |
|