ADIv5 error checking for Tcl commands
authorDavid Brownell <dbrownell@users.sourceforge.net>
Sun, 31 Jan 2010 06:40:50 +0000 (22:40 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Sun, 31 Jan 2010 06:46:00 +0000 (22:46 -0800)
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>
src/target/arm_adi_v5.c

index 0a6a7ef7cbabbd054c2a2fecb8ecadd4bfd4c33f..0e3b34959f6b2f4f06075a2c9c7893a7666ed8b9 100644 (file)
@@ -8,6 +8,8 @@
  *   Copyright (C) 2009 by Oyvind Harboe                                   *
  *   oyvind.harboe@zylin.com                                               *
  *                                                                         *
+ *   Copyright (C) 2009-2010 by David Brownell                             *
+ *                                                                         *
  *   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  *
  *   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;
 }
 
-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;
@@ -1172,6 +1175,10 @@ int dap_info_command(struct command_context *cmd_ctx, struct swjdp_common *swjdp
        uint8_t mem_ap;
        uint32_t apselold;
 
+       /* AP address is in bits 31:24 of DP_SELECT */
+       if (apsel >= 256)
+               return ERROR_INVALID_ARGUMENTS;
+
        apselold = swjdp->apsel;
        dap_ap_select(swjdp, apsel);
        dap_ap_read_reg_u32(swjdp, AP_REG_BASE, &dbgbase);
@@ -1524,6 +1531,9 @@ DAP_COMMAND_HANDLER(dap_baseaddr_command)
                break;
        case 1:
                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;
        default:
                return ERROR_COMMAND_SYNTAX_ERROR;
@@ -1580,6 +1590,9 @@ DAP_COMMAND_HANDLER(dap_apsel_command)
                break;
        case 1:
                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;
        default:
                return ERROR_COMMAND_SYNTAX_ERROR;
@@ -1606,6 +1619,9 @@ DAP_COMMAND_HANDLER(dap_apid_command)
                break;
        case 1:
                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;
        default:
                return ERROR_COMMAND_SYNTAX_ERROR;