From 3b2540bbf6ba614747240557c5547ca407a48374 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 22 Apr 2022 10:36:13 +0900 Subject: [PATCH] Fix for address calculation and access to object on memory. Applied from STABLE-BRANCH-1-2. Signed-off-by: NIIBE Yutaka --- ChangeLog | 15 +++++++++++++++ regnual/regnual.c | 2 +- src/flash.c | 11 ++++++----- src/gnuk.h | 2 +- src/main.c | 7 ++++--- src/usb_ctrl.c | 7 ++++--- 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index ae149aa..c3560fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2022-04-22 NIIBE Yutaka + + * src/gnuk.h (_regnual_start): Fix type. + * src/main.c (main): Fix address for _regnual_start. + * src/usb_ctrl.c (mem_info, usb_setup): Follow the change. + * src/flash.c (_keystore_pool, _data_pool): Fix type. + (FLASH_ADDR_KEY_STORAGE_START, FLASH_ADDR_DATA_STORAGE_START): + Follow the change. + +2022-03-26 Bertrand Jacquin + + * regnual/regnual.c (memset): Remove declaration. + * regnual/types.h (NULL): Remove. + (size_t): Remove. + 2021-11-02 NIIBE Yutaka * src/ecc-mont.c (ecdh_compute_public_25519): Fix alignment diff --git a/regnual/regnual.c b/regnual/regnual.c index fbc6064..69fd70e 100644 --- a/regnual/regnual.c +++ b/regnual/regnual.c @@ -1,7 +1,7 @@ /* * regnual.c -- Firmware installation for STM32F103 Flash ROM * - * Copyright (C) 2012, 2013, 2015, 2016, 2017, 2018 + * Copyright (C) 2012, 2013, 2015, 2016, 2017, 2018, 2022 * Free Software Initiative of Japan * Author: NIIBE Yutaka * diff --git a/src/flash.c b/src/flash.c index c1085a1..fca70a1 100644 --- a/src/flash.c +++ b/src/flash.c @@ -1,7 +1,8 @@ /* * flash.c -- Data Objects (DO) and GPG Key handling on Flash ROM * - * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 + * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, + * 2022 * Free Software Initiative of Japan * Author: NIIBE Yutaka * @@ -82,10 +83,10 @@ extern uint8_t *flash_addr_data_storage_start; #define FLASH_ADDR_DATA_STORAGE_START flash_addr_data_storage_start #else /* Linker sets these symbols */ -extern uint8_t _keystore_pool; -extern uint8_t _data_pool; -#define FLASH_ADDR_KEY_STORAGE_START ((&_keystore_pool)) -#define FLASH_ADDR_DATA_STORAGE_START ((&_data_pool)) +extern uint8_t _keystore_pool[]; +extern uint8_t _data_pool[]; +#define FLASH_ADDR_KEY_STORAGE_START ((_keystore_pool)) +#define FLASH_ADDR_DATA_STORAGE_START ((_data_pool)) #endif static int key_available_at (const uint8_t *k, int key_size) diff --git a/src/gnuk.h b/src/gnuk.h index 7d8809f..beccc82 100644 --- a/src/gnuk.h +++ b/src/gnuk.h @@ -479,6 +479,6 @@ int pinpad_getline (int msg_code, uint32_t timeout_usec); #endif -extern uint8_t _regnual_start, __heap_end__[]; +extern uint8_t _regnual_start[], __heap_end__[]; uint8_t * sram_address (uint32_t offset); diff --git a/src/main.c b/src/main.c index 988a35a..a3c2de2 100644 --- a/src/main.c +++ b/src/main.c @@ -1,7 +1,8 @@ /* * main.c - main routine of Gnuk * - * Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, 2021 + * Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, 2021, + * 2022 * Free Software Initiative of Japan * Author: NIIBE Yutaka * @@ -503,8 +504,8 @@ main (int argc, const char *argv[]) #ifdef FLASH_UPGRADE_SUPPORT /* Set vector */ - SCB->VTOR = (uintptr_t)&_regnual_start; - entry = calculate_regnual_entry_address (&_regnual_start); + SCB->VTOR = (uintptr_t)_regnual_start; + entry = calculate_regnual_entry_address (_regnual_start); #ifdef DFU_SUPPORT { /* Use SYS at ORIGIN_REAL instead of the one at ORIGIN */ diff --git a/src/usb_ctrl.c b/src/usb_ctrl.c index 559906c..3fb2d8e 100644 --- a/src/usb_ctrl.c +++ b/src/usb_ctrl.c @@ -1,7 +1,8 @@ /* * usb_ctrl.c - USB control pipe device specific code for Gnuk * - * Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018 + * Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, + * 2022 * Free Software Initiative of Japan * Author: NIIBE Yutaka * @@ -227,7 +228,7 @@ static const uint8_t lun_table[] = { 0, 0, 0, 0, }; #endif #ifdef FLASH_UPGRADE_SUPPORT -static const uint8_t *const mem_info[] = { &_regnual_start, __heap_end__, }; +static const uint8_t *const mem_info[] = { _regnual_start, __heap_end__, }; #endif #define USB_FSIJ_GNUK_MEMINFO 0 @@ -284,7 +285,7 @@ usb_setup (struct usb_dev *dev) if (ccid_get_ccid_state () != CCID_STATE_EXITED) return -1; - if (addr < &_regnual_start || addr + arg->len > __heap_end__) + if (addr < _regnual_start || addr + arg->len > __heap_end__) return -1; if (arg->index + arg->len < 256)