The system() call implemented in bionic/libc/unistd/system.c depends on paths.h which sets _PATH_BSHELL to "/system/bin/sh" which is incorrect for recovery - recovery cannot depend on /system being mounted or even sane because /system could be corrupt when recovery is used. We need _PATH_BSHELL to be pointing to /sbin/sh - and therefore bootable/recovery has its own __system() call implemented in bootable/recovery/libcrecovery that sets _PATH_BSHELL as well as makes sure environ is used in the call to execve. Change-Id: I2e5fd9c259e4fd0a9aad826a297fd3233a50a7c1
This commit is contained in:
parent
9759ede732
commit
a42d2b1e24
@ -31,7 +31,7 @@ LOCAL_CFLAGS += -DRECOVERY_VERSION="$(RECOVERY_VERSION)"
|
||||
RECOVERY_API_VERSION := 2
|
||||
LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION)
|
||||
|
||||
BOARD_RECOVERY_DEFINES := BOARD_HAS_NO_SELECT_BUTTON BOARD_HAS_SMALL_RECOVERY BOARD_LDPI_RECOVERY BOARD_UMS_LUNFILE
|
||||
BOARD_RECOVERY_DEFINES := BOARD_HAS_NO_SELECT_BUTTON BOARD_HAS_SMALL_RECOVERY BOARD_LDPI_RECOVERY BOARD_UMS_LUNFILE TARGET_RECOVERY_PRE_COMMAND
|
||||
|
||||
$(foreach board_define,$(BOARD_RECOVERY_DEFINES), \
|
||||
$(if $($(board_define)), \
|
||||
|
@ -894,7 +894,10 @@ void show_advanced_menu()
|
||||
switch (chosen_item)
|
||||
{
|
||||
case 0:
|
||||
reboot_wrapper("recovery");
|
||||
#ifdef TARGET_RECOVERY_PRE_COMMAND
|
||||
__system(TARGET_RECOVERY_PRE_COMMAND);
|
||||
#endif
|
||||
__reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, "recovery");
|
||||
break;
|
||||
case 1:
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user