test/py: test_fs: add tests for creating/deleting many files
[oweals/u-boot.git] / common / autoboot.c
index 75132f8697f82f77e489ad4df525006d2a48d32e..94a1b4abebac941858909b7e89cfd838ee40f5b1 100644 (file)
@@ -8,11 +8,15 @@
 #include <autoboot.h>
 #include <bootretry.h>
 #include <cli.h>
+#include <command.h>
 #include <console.h>
+#include <env.h>
 #include <fdtdec.h>
 #include <hash.h>
+#include <memalign.h>
 #include <menu.h>
 #include <post.h>
+#include <time.h>
 #include <u-boot/sha256.h>
 #include <bootcount.h>
 
@@ -71,8 +75,8 @@ static int passwd_abort_sha256(uint64_t etime)
 {
        const char *sha_env_str = env_get("bootstopkeysha256");
        u8 sha_env[SHA256_SUM_LEN];
-       u8 sha[SHA256_SUM_LEN];
-       char presskey[MAX_DELAY_STOP_STR];
+       u8 *sha;
+       char *presskey;
        const char *algo_name = "sha256";
        u_int presskey_len = 0;
        int abort = 0;
@@ -93,6 +97,9 @@ static int passwd_abort_sha256(uint64_t etime)
                return 0;
        }
 
+       presskey = malloc_cache_aligned(MAX_DELAY_STOP_STR);
+       sha = malloc_cache_aligned(SHA256_SUM_LEN);
+       size = SHA256_SUM_LEN;
        /*
         * We don't know how long the stop-string is, so we need to
         * generate the sha256 hash upon each input character and
@@ -101,8 +108,11 @@ static int passwd_abort_sha256(uint64_t etime)
        do {
                if (tstc()) {
                        /* Check for input string overflow */
-                       if (presskey_len >= MAX_DELAY_STOP_STR)
+                       if (presskey_len >= MAX_DELAY_STOP_STR) {
+                               free(presskey);
+                               free(sha);
                                return 0;
+                       }
 
                        presskey[presskey_len++] = getc();
 
@@ -116,6 +126,8 @@ static int passwd_abort_sha256(uint64_t etime)
                }
        } while (!abort && get_ticks() <= etime);
 
+       free(presskey);
+       free(sha);
        return abort;
 }
 
@@ -349,15 +361,18 @@ void autoboot_command(const char *s)
        debug("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
 
        if (stored_bootdelay != -1 && s && !abortboot(stored_bootdelay)) {
-#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
-               int prev = disable_ctrlc(1);    /* disable Control C checking */
-#endif
+               bool lock;
+               int prev;
+
+               lock = IS_ENABLED(CONFIG_AUTOBOOT_KEYED) &&
+                       !IS_ENABLED(CONFIG_AUTOBOOT_KEYED_CTRLC);
+               if (lock)
+                       prev = disable_ctrlc(1); /* disable Ctrl-C checking */
 
                run_command_list(s, -1, 0);
 
-#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
-               disable_ctrlc(prev);    /* restore Control C checking */
-#endif
+               if (lock)
+                       disable_ctrlc(prev);    /* restore Ctrl-C checking */
        }
 
        if (IS_ENABLED(CONFIG_USE_AUTOBOOT_MENUKEY) &&