This is an automated email from Gerrit.

Aurelien Jacobs ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/171

-- gerrit

commit 5ffa02d6499229e9fabd0daf16e3205973dc354b
Author: Aurelien Jacobs <[email protected]>
Date:   Mon Oct 17 14:49:18 2011 +0200

    at91sam7: ensure probed flash bank has a name (fix a segfault)
    
    Before this commit, openocd used to segfault when probing flash
    of an at91sam7x512 (which contains 2 banks of flash). This was due
    to the way it systematically insert a new flash bank without setting
    its name.
    Then, when get_flash_bank_by_name_noprobe() is called, it is doing
    a strcmp() on the non-initialized bank->name.
    
    This commit prevents allocation of second probed bank if it is already
    allocated (for example, if it is set in a target config file). If a
    new bank really needs to be allocated, it ensures that a default name
    is set.
    
    Change-Id: I38d15bef1fda2ec746efad37171975136cf7b371
    Signed-off-by: Aurelien Jacobs <[email protected]>

diff --git a/src/flash/nor/at91sam7.c b/src/flash/nor/at91sam7.c
index ce4f8a9..bce1fd4 100644
--- a/src/flash/nor/at91sam7.c
+++ b/src/flash/nor/at91sam7.c
@@ -622,16 +622,19 @@ static int at91sam7_read_part_info(struct flash_bank 
*bank)
        {
                if (bnk > 0)
                {
+                       if (!t_bank->next) {
                        /* create a new flash bank element */
                        struct flash_bank *fb = malloc(sizeof(struct 
flash_bank));
                        fb->target = target;
                        fb->driver = bank->driver;
                        fb->driver_priv = malloc(sizeof(struct 
at91sam7_flash_bank));
+                       fb->name = "sam7_probed";
                        fb->next = NULL;
 
-                       /* link created bank in 'flash_banks' list and redirect 
t_bank */
+                       /* link created bank in 'flash_banks' list */
                        t_bank->next = fb;
-                       t_bank = fb;
+                       }
+                       t_bank = t_bank->next;
                }
 
                t_bank->bank_number = bnk;
@@ -875,16 +878,19 @@ FLASH_BANK_COMMAND_HANDLER(at91sam7_flash_bank_command)
        {
                if (bnk > 0)
                {
+                       if (!t_bank->next) {
                        /* create a new bank element */
                        struct flash_bank *fb = malloc(sizeof(struct 
flash_bank));
                        fb->target = target;
                        fb->driver = bank->driver;
                        fb->driver_priv = malloc(sizeof(struct 
at91sam7_flash_bank));
+                       fb->name = "sam7_probed";
                        fb->next = NULL;
 
-                       /* link created bank in 'flash_banks' list and redirect 
t_bank */
+                       /* link created bank in 'flash_banks' list */
                        t_bank->next = fb;
-                       t_bank = fb;
+                       }
+                       t_bank = t_bank->next;
                }
 
                t_bank->bank_number = bnk;

-- 

------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
Openocd-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to