Added alternate configuration method
Added alternate configuration method, and added obscure mode for additional OpSec
This commit is contained in:
+18
-13
@@ -21,6 +21,7 @@
|
|||||||
#include "string.h" // memset
|
#include "string.h" // memset
|
||||||
#include "util.h" // irqtimer_calc
|
#include "util.h" // irqtimer_calc
|
||||||
#include "tcgbios.h" // tpm_*
|
#include "tcgbios.h" // tpm_*
|
||||||
|
#include "rf_config.h"
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Helper search functions
|
* Helper search functions
|
||||||
@@ -680,8 +681,6 @@ get_keystroke(int msec)
|
|||||||
* Boot menu and BCV execution
|
* Boot menu and BCV execution
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
|
|
||||||
#define DEFAULT_BOOTMENU_WAIT 2500
|
|
||||||
|
|
||||||
static const char menuchars[] = {
|
static const char menuchars[] = {
|
||||||
'1', '2', '3', '4', '5', '6', '7', '8', '9',
|
'1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
|
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
|
||||||
@@ -696,30 +695,36 @@ interactive_bootmenu(void)
|
|||||||
{
|
{
|
||||||
if (! CONFIG_BOOTMENU)
|
if (! CONFIG_BOOTMENU)
|
||||||
return;
|
return;
|
||||||
int show_boot_menu = romfile_loadint("etc/show-boot-menu", 1);
|
if (!RF_CONF_SHOW_BOOT_MENU)
|
||||||
if (!show_boot_menu)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// skip menu if only one boot device and no TPM
|
// skip menu if only one boot device and no TPM
|
||||||
if (show_boot_menu == 2 && !tpm_can_show_menu()
|
if (RF_CONF_SHOW_BOOT_MENU == 2 && !tpm_can_show_menu()
|
||||||
&& !hlist_empty(&BootList) && !BootList.first->next) {
|
&& !hlist_empty(&BootList) && !BootList.first->next) {
|
||||||
dprintf(1, "Only one boot device present. Skip boot menu.\n");
|
dprintf(1, "Only one boot device present. Skip boot menu.\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int menutime = romfile_loadint("etc/boot-menu-wait", DEFAULT_BOOTMENU_WAIT);
|
int menukey;
|
||||||
int menukey = romfile_loadint("etc/boot-menu-key", 1);
|
if (RF_CONF_OBSCURE_MODE) {
|
||||||
|
menukey = RF_CONF_OBSCURE_BOOT_MENU_KEY;
|
||||||
|
} else {
|
||||||
|
menukey = RF_CONF_BOOT_MENU_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
int scan_code;
|
int scan_code;
|
||||||
if (menutime >= 0) {
|
if (RF_CONF_BOOT_MENU_WAIT >= 0) {
|
||||||
while (get_keystroke(0) >= 0)
|
while (get_keystroke(0) >= 0)
|
||||||
;
|
;
|
||||||
|
|
||||||
char *bootmsg = romfile_loadfile("etc/boot-menu-message", NULL);
|
if (RF_CONF_OBSCURE_MODE) {
|
||||||
printf("%s", bootmsg ?: "\nPress ESC for boot menu.\n\n");
|
printf(rf_conf_obscure_bootmsg);
|
||||||
free(bootmsg);
|
} else {
|
||||||
|
printf(rf_conf_bootmsg);
|
||||||
|
}
|
||||||
|
|
||||||
scan_code = get_keystroke(menutime);
|
scan_code = get_keystroke(RF_CONF_BOOT_MENU_WAIT);
|
||||||
if (scan_code != menukey)
|
if (scan_code != menukey)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -727,7 +732,7 @@ interactive_bootmenu(void)
|
|||||||
while (get_keystroke(0) >= 0)
|
while (get_keystroke(0) >= 0)
|
||||||
;
|
;
|
||||||
|
|
||||||
printf("Select boot device:\n\n");
|
printf("\nBoot devices:\n");
|
||||||
wait_threads();
|
wait_threads();
|
||||||
|
|
||||||
// Show menu items
|
// Show menu items
|
||||||
|
|||||||
+5
-1
@@ -52,6 +52,10 @@ enable_vga_console(void)
|
|||||||
call16_int10(&br);
|
call16_int10(&br);
|
||||||
|
|
||||||
// Write to screen.
|
// Write to screen.
|
||||||
printf("SeaBIOS (version %s)\n", VERSION);
|
if (RF_CONF_OBSCURE_MODE) {
|
||||||
|
printf(rf_conf_obscure_welcome);
|
||||||
|
} else {
|
||||||
|
printf("SeaBIOS (version %s)\n", VERSION);
|
||||||
|
}
|
||||||
display_uuid();
|
display_uuid();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,18 @@
|
|||||||
#ifndef _RF_CONFIG_H
|
#ifndef _RF_CONFIG_H
|
||||||
#define _RF_CONFIG_H
|
#define _RF_CONFIG_H
|
||||||
|
|
||||||
|
// New configuration options
|
||||||
#define RF_CONF_COREBOOT_BOOTSPLASH 500 // 500 ms before clearing Coreboot bootsplash
|
#define RF_CONF_COREBOOT_BOOTSPLASH 500 // 500 ms before clearing Coreboot bootsplash
|
||||||
|
#define RF_CONF_OBSCURE_MODE 1 // Remove SeaBIOS branding for 'Security through obscurity'
|
||||||
|
#define RF_CONF_OBSCURE_BOOT_MENU_KEY 133 // 133 is F11
|
||||||
|
const char* rf_conf_obscure_bootmsg = "Waiting for boot menu combination...\n";
|
||||||
|
const char* rf_conf_obscure_welcome = "HOJUIX Bootloader 1.0.0\n"; // "Seabios (Version)" alternative
|
||||||
|
|
||||||
|
// Old configuration options moved from file-based config
|
||||||
|
#define RF_CONF_SHOW_BOOT_MENU 1 // etc/show-boot-menu
|
||||||
|
#define RF_CONF_BOOT_MENU_WAIT 2500 // etc/boot-menu-wait
|
||||||
|
#define RF_CONF_BOOT_MENU_KEY 1 // etc/boot-menu-key
|
||||||
|
const char* rf_conf_bootmsg = "Press ESC for boot menu.\n";
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user