ADIv5 error checking for Tcl commands

Reject invalid AP numbers (256+) as Tcl operation parameters.
Shrink one of the overlong lines.

Add my copyright to the ADIv5 code (multiple contributions).

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
This commit is contained in:
David Brownell 2010-01-30 22:40:50 -08:00
parent 46b6d5bfe6
commit 695666d294
1 changed files with 17 additions and 1 deletions

View File

@ -8,6 +8,8 @@
* Copyright (C) 2009 by Oyvind Harboe * * Copyright (C) 2009 by Oyvind Harboe *
* oyvind.harboe@zylin.com * * oyvind.harboe@zylin.com *
* * * *
* Copyright (C) 2009-2010 by David Brownell *
* *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by * * it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or * * the Free Software Foundation; either version 2 of the License, or *
@ -1164,7 +1166,8 @@ is_dap_cid_ok(uint32_t cid3, uint32_t cid2, uint32_t cid1, uint32_t cid0)
&& ((cid1 & 0x0f) == 0) && cid0 == 0x0d; && ((cid1 & 0x0f) == 0) && cid0 == 0x0d;
} }
int dap_info_command(struct command_context *cmd_ctx, struct swjdp_common *swjdp, int apsel) int dap_info_command(struct command_context *cmd_ctx,
struct swjdp_common *swjdp, int apsel)
{ {
uint32_t dbgbase, apid; uint32_t dbgbase, apid;
@ -1172,6 +1175,10 @@ int dap_info_command(struct command_context *cmd_ctx, struct swjdp_common *swjdp
uint8_t mem_ap; uint8_t mem_ap;
uint32_t apselold; uint32_t apselold;
/* AP address is in bits 31:24 of DP_SELECT */
if (apsel >= 256)
return ERROR_INVALID_ARGUMENTS;
apselold = swjdp->apsel; apselold = swjdp->apsel;
dap_ap_select(swjdp, apsel); dap_ap_select(swjdp, apsel);
dap_ap_read_reg_u32(swjdp, AP_REG_BASE, &dbgbase); dap_ap_read_reg_u32(swjdp, AP_REG_BASE, &dbgbase);
@ -1524,6 +1531,9 @@ DAP_COMMAND_HANDLER(dap_baseaddr_command)
break; break;
case 1: case 1:
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel); COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel);
/* AP address is in bits 31:24 of DP_SELECT */
if (apsel >= 256)
return ERROR_INVALID_ARGUMENTS;
break; break;
default: default:
return ERROR_COMMAND_SYNTAX_ERROR; return ERROR_COMMAND_SYNTAX_ERROR;
@ -1580,6 +1590,9 @@ DAP_COMMAND_HANDLER(dap_apsel_command)
break; break;
case 1: case 1:
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel); COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel);
/* AP address is in bits 31:24 of DP_SELECT */
if (apsel >= 256)
return ERROR_INVALID_ARGUMENTS;
break; break;
default: default:
return ERROR_COMMAND_SYNTAX_ERROR; return ERROR_COMMAND_SYNTAX_ERROR;
@ -1606,6 +1619,9 @@ DAP_COMMAND_HANDLER(dap_apid_command)
break; break;
case 1: case 1:
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel); COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel);
/* AP address is in bits 31:24 of DP_SELECT */
if (apsel >= 256)
return ERROR_INVALID_ARGUMENTS;
break; break;
default: default:
return ERROR_COMMAND_SYNTAX_ERROR; return ERROR_COMMAND_SYNTAX_ERROR;