summaryrefslogtreecommitdiff
path: root/common/fpsensor
diff options
context:
space:
mode:
authorTom Hughes <tomhughes@chromium.org>2020-09-17 11:35:33 -0700
committerCommit Bot <commit-bot@chromium.org>2020-09-25 18:35:25 +0000
commit01b7d964e5afe94450548c05ca062c35ac5fdd89 (patch)
tree16689abd6fcdadcc122adbd024508ea58e28bd2b /common/fpsensor
parent6b9218bc0a595e3329aa9a805065ce53592e23b3 (diff)
downloadchrome-ec-01b7d964e5afe94450548c05ca062c35ac5fdd89.tar.gz
fpsensor: Fix buffer check to account for overflow
BRANCH=none BUG=b:144957935 TEST=make buildall Signed-off-by: Tom Hughes <tomhughes@chromium.org> Change-Id: I1b4fa0a715869ccc37e48d75316ef52c367aa64a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2417529 Reviewed-by: Craig Hesling <hesling@chromium.org>
Diffstat (limited to 'common/fpsensor')
-rw-r--r--common/fpsensor/fpsensor.c14
-rw-r--r--common/fpsensor/fpsensor_private.h5
2 files changed, 15 insertions, 4 deletions
diff --git a/common/fpsensor/fpsensor.c b/common/fpsensor/fpsensor.c
index bd36717707..2965b52fe9 100644
--- a/common/fpsensor/fpsensor.c
+++ b/common/fpsensor/fpsensor.c
@@ -18,6 +18,7 @@
#include "host_command.h"
#include "link_defs.h"
#include "mkbp_event.h"
+#include "overflow.h"
#include "spi.h"
#include "system.h"
#include "task.h"
@@ -356,12 +357,17 @@ DECLARE_HOST_COMMAND(EC_CMD_FP_INFO, fp_command_info,
BUILD_ASSERT(FP_CONTEXT_NONCE_BYTES == 12);
-static int validate_fp_buffer_offset(const uint32_t buffer_size,
- const uint32_t offset, const uint32_t size)
+int validate_fp_buffer_offset(const uint32_t buffer_size, const uint32_t offset,
+ const uint32_t size)
{
- if (size > buffer_size || offset > buffer_size ||
- size + offset > buffer_size)
+ uint32_t bytes_requested;
+
+ if (check_add_overflow(size, offset, &bytes_requested))
+ return EC_ERROR_OVERFLOW;
+
+ if (bytes_requested > buffer_size)
return EC_ERROR_INVAL;
+
return EC_SUCCESS;
}
diff --git a/common/fpsensor/fpsensor_private.h b/common/fpsensor/fpsensor_private.h
index fb97fb3bfd..a42049dece 100644
--- a/common/fpsensor/fpsensor_private.h
+++ b/common/fpsensor/fpsensor_private.h
@@ -8,7 +8,12 @@
#ifndef __CROS_EC_FPSENSOR_PRIVATE_H
#define __CROS_EC_FPSENSOR_PRIVATE_H
+#include <stdint.h>
+
#define CPRINTF(format, args...) cprintf(CC_FP, format, ## args)
#define CPRINTS(format, args...) cprints(CC_FP, format, ## args)
+int validate_fp_buffer_offset(uint32_t buffer_size, uint32_t offset,
+ uint32_t size);
+
#endif /* __CROS_EC_FPSENSOR_PRIVATE_H */