[PATCH] FritzBox-4040-UBOOT: Allow for easier devices recovery
David Bauer
mail at david-bauer.net
Tue Nov 23 03:20:08 PST 2021
Hello Enrico,
On 11/22/21 11:55, Enrico Mioso wrote:
> When flashing a broken kernel, or an image where failsafe mode is no more accessible, recoverying these devices can become needlessly painful.
> Allow for easier recovery by unconditionally trying to get an initramfs image over TFTP once before booting, thereby giving the user a chance to sysupgrade to a working image.
As I've already explained, I don't like increasing the time necessary for the device to boot.
Also, introducig such a method on a 4040 does not make sense, as its NOR flash can be rewritten
from EVA.
That being said, unconditionally requesting a bootable image over the network is a security
risk in itself. NAND based ipq40xx boards from AVM also only allow connections to their
bootloader on cold-boots for exactly this reason.
For example, if an attacker is able to create a kernel-panic, your patch would enable him
to modify the router in case he is on the same network. A Pushbutton TFTP procedure mitigates
this problem, as it depends on the attacker having physical access to the device.
Recovery is - for all boards - possible using the AVM recovery tool or manually patching the
U-Boot and sideloading via EVA. So a network request for a boot image raises more problems than
it tries to solve.
Best
David
>
> Signed-off-by: Enrico Mioso <mrkiko.rs at gmail.com>
> CC: Christian Lamparter <chunkeey at gmail.com>
> CC: David Bauer <mail at david-bauer.net>
> ---
>
> Reasons for this patch:
> 1 - There are situations where it can be nice to recover a device without the AVM Recovery tool. In some cases the tool won't even be an option (as far as I know, it exists only for Windows, or am I wrong?).
> 2 - Since the effort of creating a second-stage bootloader for these devices has been carried out (thanks a lot for this!), I think it makes sense to allow for things to be more friendly to developers and users.
>
> Side effects:
> When nandboot fails, there will be TWO tftp requests with no delay between them, then the sleep will kick in.
>
> Possible "improvements":
> Implementing a push-button method may be preferred. Still, I have no easy way to attach an UART to the device right now.
> Moreover, being able to do this "more" remotely would be a vaulable feature to me.
>
> Enrico
>
> include/configs/fritz1200.h | 2 +-
> include/configs/fritz3000.h | 2 +-
> include/configs/fritz4040.h | 2 +-
> include/configs/fritz7530.h | 2 +-
> 4 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/include/configs/fritz1200.h b/include/configs/fritz1200.h
> index 90d5186..16152a3 100644
> --- a/include/configs/fritz1200.h
> +++ b/include/configs/fritz1200.h
> @@ -23,7 +23,7 @@
> "mtdparts=" MTDPARTS_DEFAULT "\0" \
> "nandboot=ubi part ubi && ubi read 0x85000000 kernel && bootm\0" \
> "tftpboot=tftpboot && bootm; sleep 5; run tftpboot\0" \
> - "fritzboot=run nandboot || run tftpboot;\0" \
> + "fritzboot=tftpboot && bootm; run nandboot || run tftpboot;\0" \
>
> #undef V_PROMPT
> #define V_PROMPT "(" CONFIG_MODEL ") # "
> diff --git a/include/configs/fritz3000.h b/include/configs/fritz3000.h
> index e383ffb..3440550 100644
> --- a/include/configs/fritz3000.h
> +++ b/include/configs/fritz3000.h
> @@ -23,7 +23,7 @@
> "mtdparts=" MTDPARTS_DEFAULT "\0" \
> "nandboot=ubi part ubi && ubi read 0x85000000 kernel && bootm\0" \
> "tftpboot=tftpboot && bootm; sleep 5; run tftpboot\0" \
> - "fritzboot=run nandboot || run tftpboot;\0" \
> + "fritzboot=tftpboot && bootm; run nandboot || run tftpboot;\0" \
>
> #undef V_PROMPT
> #define V_PROMPT "(" CONFIG_MODEL ") # "
> diff --git a/include/configs/fritz4040.h b/include/configs/fritz4040.h
> index 060afb0..582edfd 100644
> --- a/include/configs/fritz4040.h
> +++ b/include/configs/fritz4040.h
> @@ -23,7 +23,7 @@
> "mtdparts=" MTDPARTS_DEFAULT "\0" \
> "nandboot=nboot firmware && bootm\0" \
> "tftpboot=tftpsrv && bootm; sleep 5; run tftpboot\0" \
> - "fritzboot=run nandboot || run tftpboot;\0" \
> + "fritzboot=tftpboot && bootm; run nandboot || run tftpboot;\0" \
>
> #undef V_PROMPT
> #define V_PROMPT "(" CONFIG_MODEL ") # "
> diff --git a/include/configs/fritz7530.h b/include/configs/fritz7530.h
> index b07ecfc..caecd5d 100644
> --- a/include/configs/fritz7530.h
> +++ b/include/configs/fritz7530.h
> @@ -23,7 +23,7 @@
> "mtdparts=" MTDPARTS_DEFAULT "\0" \
> "nandboot=ubi part ubi && ubi read 0x85000000 kernel && bootm\0" \
> "tftpboot=tftpboot && bootm; sleep 5; run tftpboot\0" \
> - "fritzboot=run nandboot || run tftpboot;\0" \
> + "fritzboot=tftpboot && bootm; run nandboot || run tftpboot;\0" \
>
> #undef V_PROMPT
> #define V_PROMPT "(" CONFIG_MODEL ") # "
>
More information about the openwrt-devel
mailing list