flash/nor/at91sam7: fix flash bank allocation 84/7884/2
authorTomas Vanek <vanekt@fbl.cz>
Tue, 5 Sep 2023 16:32:57 +0000 (18:32 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 23 Sep 2023 14:30:20 +0000 (14:30 +0000)
at91sam7 flash driver allocates a flash bank based on detected flash
structure.
Use calloc() instead of malloc() - struct flash_bank has to be zeroed.

While on this:
Return error in case of struct flash_bank or driver_priv allocation fail.
Set default_padded_value and erased_value.
Use strdup() on bank->name, pointer is freed in flash_free_all_banks()

Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Change-Id: Id890496bfbadb7970ef583256aa4f30a7bff832f
Reviewed-on: https://review.openocd.org/c/openocd/+/7884
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/flash/nor/at91sam7.c

index 8d8cf22268bee523e335c327bc4b23ae62bd9b2e..8bb2994ed1de4eecd12124c7a78e562685a301d1 100644 (file)
@@ -560,11 +560,22 @@ 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));
+                               struct flash_bank *fb = calloc(sizeof(struct flash_bank), 1);
+                               if (!fb) {
+                                       LOG_ERROR("No memory for flash bank");
+                                       return ERROR_FAIL;
+                               }
                                fb->target = target;
                                fb->driver = bank->driver;
+                               fb->default_padded_value = 0xff;
+                               fb->erased_value = 0xff;
                                fb->driver_priv = malloc(sizeof(struct at91sam7_flash_bank));
-                               fb->name = "sam7_probed";
+                               if (!fb->driver_priv) {
+                                       free(fb);
+                                       LOG_ERROR("No memory for flash driver priv");
+                                       return ERROR_FAIL;
+                               }
+                               fb->name = strdup("sam7_probed");
                                fb->next = NULL;
 
                                /* link created bank in 'flash_banks' list */
@@ -738,11 +749,22 @@ 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));
+                               struct flash_bank *fb = calloc(sizeof(struct flash_bank), 1);
+                               if (!fb) {
+                                       LOG_ERROR("No memory for flash bank");
+                                       return ERROR_FAIL;
+                               }
                                fb->target = target;
                                fb->driver = bank->driver;
+                               fb->default_padded_value = 0xff;
+                               fb->erased_value = 0xff;
                                fb->driver_priv = malloc(sizeof(struct at91sam7_flash_bank));
-                               fb->name = "sam7_probed";
+                               if (!fb->driver_priv) {
+                                       free(fb);
+                                       LOG_ERROR("No memory for flash driver priv");
+                                       return ERROR_FAIL;
+                               }
+                               fb->name = strdup("sam7_probed");
                                fb->next = NULL;
 
                                /* link created bank in 'flash_banks' list */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)