forked from auracaster/openocd
flash/nor: improved API of flash_driver.info & fixed buffer overruns
1) The API of "info" callback in "struct flash_driver" has been improved. Fixed buffers for strings 2) Removed the calls to snprintf() from the flash_driver.info implementations. Many of them were used in an unsafe manner (buffer overruns were possible). Change-Id: I42ab8a8018d01f9af43c5ba49f650c3cb5d31dcb Signed-off-by: Jan Matyas <matyas@codasip.com> Reviewed-on: http://openocd.zylin.com/6182 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
committed by
Antonio Borneo
parent
f2958fc04b
commit
64c2e03b23
@@ -978,23 +978,17 @@ static int at91sam7_probe(struct flash_bank *bank)
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
static int get_at91sam7_info(struct flash_bank *bank, char *buf, int buf_size)
|
||||
static int get_at91sam7_info(struct flash_bank *bank, struct command_invocation *cmd)
|
||||
{
|
||||
int printed;
|
||||
struct at91sam7_flash_bank *at91sam7_info = bank->driver_priv;
|
||||
|
||||
if (at91sam7_info->cidr == 0)
|
||||
return ERROR_FLASH_BANK_NOT_PROBED;
|
||||
|
||||
printed = snprintf(buf, buf_size,
|
||||
"\n at91sam7 driver information: Chip is %s\n",
|
||||
command_print_sameline(cmd, "\n at91sam7 driver information: Chip is %s\n",
|
||||
at91sam7_info->target_name);
|
||||
|
||||
buf += printed;
|
||||
buf_size -= printed;
|
||||
|
||||
printed = snprintf(buf,
|
||||
buf_size,
|
||||
command_print_sameline(cmd,
|
||||
" Cidr: 0x%8.8" PRIx32 " | Arch: 0x%4.4x | Eproc: %s | Version: 0x%3.3x | "
|
||||
"Flashsize: 0x%8.8" PRIx32 "\n",
|
||||
at91sam7_info->cidr,
|
||||
@@ -1003,31 +997,20 @@ static int get_at91sam7_info(struct flash_bank *bank, char *buf, int buf_size)
|
||||
at91sam7_info->cidr_version,
|
||||
bank->size);
|
||||
|
||||
buf += printed;
|
||||
buf_size -= printed;
|
||||
|
||||
printed = snprintf(buf, buf_size,
|
||||
" Master clock (estimated): %u KHz | External clock: %u KHz\n",
|
||||
command_print_sameline(cmd,
|
||||
" Master clock (estimated): %u kHz | External clock: %u kHz\n",
|
||||
(unsigned)(at91sam7_info->mck_freq / 1000),
|
||||
(unsigned)(at91sam7_info->ext_freq / 1000));
|
||||
|
||||
buf += printed;
|
||||
buf_size -= printed;
|
||||
|
||||
printed = snprintf(buf,
|
||||
buf_size,
|
||||
command_print_sameline(cmd,
|
||||
" Pagesize: %i bytes | Lockbits(%u): %i 0x%4.4x | Pages in lock region: %i\n",
|
||||
at91sam7_info->pagesize,
|
||||
bank->num_sectors,
|
||||
at91sam7_info->num_lockbits_on,
|
||||
at91sam7_info->lockbits,
|
||||
at91sam7_info->pages_per_sector*at91sam7_info->num_lockbits_on);
|
||||
at91sam7_info->pages_per_sector * at91sam7_info->num_lockbits_on);
|
||||
|
||||
buf += printed;
|
||||
buf_size -= printed;
|
||||
|
||||
snprintf(buf, buf_size,
|
||||
" Securitybit: %i | Nvmbits(%i): %i 0x%1.1x\n",
|
||||
command_print_sameline(cmd, " Securitybit: %i | Nvmbits(%i): %i 0x%1.1x\n",
|
||||
at91sam7_info->securitybit, at91sam7_info->num_nvmbits,
|
||||
at91sam7_info->num_nvmbits_on, at91sam7_info->nvmbits);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user