|
@@ -59,6 +59,7 @@
|
|
|
#include <linux/mutex.h>
|
|
#include <linux/mutex.h>
|
|
|
#include <linux/delay.h>
|
|
#include <linux/delay.h>
|
|
|
#include <linux/serial_8250.h>
|
|
#include <linux/serial_8250.h>
|
|
|
|
|
+#include <linux/nospec.h>
|
|
|
#include "smapi.h"
|
|
#include "smapi.h"
|
|
|
#include "mwavedd.h"
|
|
#include "mwavedd.h"
|
|
|
#include "3780i.h"
|
|
#include "3780i.h"
|
|
@@ -289,6 +290,8 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
|
|
ipcnum);
|
|
ipcnum);
|
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
}
|
|
}
|
|
|
|
|
+ ipcnum = array_index_nospec(ipcnum,
|
|
|
|
|
+ ARRAY_SIZE(pDrvData->IPCs));
|
|
|
PRINTK_3(TRACE_MWAVE,
|
|
PRINTK_3(TRACE_MWAVE,
|
|
|
"mwavedd::mwave_ioctl IOCTL_MW_REGISTER_IPC"
|
|
"mwavedd::mwave_ioctl IOCTL_MW_REGISTER_IPC"
|
|
|
" ipcnum %x entry usIntCount %x\n",
|
|
" ipcnum %x entry usIntCount %x\n",
|
|
@@ -317,6 +320,8 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
|
|
" Invalid ipcnum %x\n", ipcnum);
|
|
" Invalid ipcnum %x\n", ipcnum);
|
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
}
|
|
}
|
|
|
|
|
+ ipcnum = array_index_nospec(ipcnum,
|
|
|
|
|
+ ARRAY_SIZE(pDrvData->IPCs));
|
|
|
PRINTK_3(TRACE_MWAVE,
|
|
PRINTK_3(TRACE_MWAVE,
|
|
|
"mwavedd::mwave_ioctl IOCTL_MW_GET_IPC"
|
|
"mwavedd::mwave_ioctl IOCTL_MW_GET_IPC"
|
|
|
" ipcnum %x, usIntCount %x\n",
|
|
" ipcnum %x, usIntCount %x\n",
|
|
@@ -383,6 +388,8 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
|
|
ipcnum);
|
|
ipcnum);
|
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
}
|
|
}
|
|
|
|
|
+ ipcnum = array_index_nospec(ipcnum,
|
|
|
|
|
+ ARRAY_SIZE(pDrvData->IPCs));
|
|
|
mutex_lock(&mwave_mutex);
|
|
mutex_lock(&mwave_mutex);
|
|
|
if (pDrvData->IPCs[ipcnum].bIsEnabled == true) {
|
|
if (pDrvData->IPCs[ipcnum].bIsEnabled == true) {
|
|
|
pDrvData->IPCs[ipcnum].bIsEnabled = false;
|
|
pDrvData->IPCs[ipcnum].bIsEnabled = false;
|