mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
aes: fix potential unaligned access of buffers
https://github.com/espressif/esp-idf/issues/7236
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Copyright 2020 Espressif Systems (Shanghai) PTE LTD
|
||||
// Copyright 2020-2021 Espressif Systems (Shanghai) CO LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "soc/hwcrypto_reg.h"
|
||||
#include "soc/dport_access.h"
|
||||
#include "hal/aes_types.h"
|
||||
#include <string.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -46,10 +47,13 @@ static inline uint8_t aes_ll_write_key(const uint8_t *key, size_t key_word_len)
|
||||
{
|
||||
/* This variable is used for fault injection checks, so marked volatile to avoid optimisation */
|
||||
volatile uint8_t key_bytes_in_hardware = 0;
|
||||
uint32_t *key_words = (uint32_t *)key;
|
||||
|
||||
/* Memcpy to avoid potential unaligned access */
|
||||
uint32_t key_word;
|
||||
|
||||
for (int i = 0; i < key_word_len; i++) {
|
||||
DPORT_REG_WRITE(AES_KEY_BASE + i * 4, *(key_words + i));
|
||||
memcpy(&key_word, key + 4 * i, 4);
|
||||
DPORT_REG_WRITE(AES_KEY_BASE + i * 4, key_word);
|
||||
key_bytes_in_hardware += 4;
|
||||
}
|
||||
return key_bytes_in_hardware;
|
||||
|
Reference in New Issue
Block a user