|
@@ -23,6 +23,7 @@
|
|
|
|
|
|
#include "hpi_internal.h"
|
|
|
#include "hpimsginit.h"
|
|
|
+#include <linux/nospec.h>
|
|
|
|
|
|
/* The actual message size for each object type */
|
|
|
static u16 msg_size[HPI_OBJ_MAXINDEX + 1] = HPI_MESSAGE_SIZE_BY_OBJECT;
|
|
@@ -39,10 +40,12 @@ static void hpi_init_message(struct hpi_message *phm, u16 object,
|
|
|
{
|
|
|
u16 size;
|
|
|
|
|
|
- if ((object > 0) && (object <= HPI_OBJ_MAXINDEX))
|
|
|
+ if ((object > 0) && (object <= HPI_OBJ_MAXINDEX)) {
|
|
|
+ object = array_index_nospec(object, HPI_OBJ_MAXINDEX + 1);
|
|
|
size = msg_size[object];
|
|
|
- else
|
|
|
+ } else {
|
|
|
size = sizeof(*phm);
|
|
|
+ }
|
|
|
|
|
|
memset(phm, 0, size);
|
|
|
phm->size = size;
|
|
@@ -66,10 +69,12 @@ void hpi_init_response(struct hpi_response *phr, u16 object, u16 function,
|
|
|
{
|
|
|
u16 size;
|
|
|
|
|
|
- if ((object > 0) && (object <= HPI_OBJ_MAXINDEX))
|
|
|
+ if ((object > 0) && (object <= HPI_OBJ_MAXINDEX)) {
|
|
|
+ object = array_index_nospec(object, HPI_OBJ_MAXINDEX + 1);
|
|
|
size = res_size[object];
|
|
|
- else
|
|
|
+ } else {
|
|
|
size = sizeof(*phr);
|
|
|
+ }
|
|
|
|
|
|
memset(phr, 0, sizeof(*phr));
|
|
|
phr->size = size;
|