Date: Tue, 29 Mar 2022 16:05:21 -0700 From: Ravi Pokala <rpokala@freebsd.org> To: Ed Maste <emaste@FreeBSD.org>, <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, <dev-commits-src-main@FreeBSD.org> Subject: Re: 868c1b8431f2 - main - fstyp: detect Raspberry Pi Pico boot filesystem as FAT Message-ID: <ED18364E-18F5-4662-89AA-2838F3A253C1@panasas.com> In-Reply-To: <202203292133.22TLXbxW035667@gitrepo.freebsd.org> References: <202203292133.22TLXbxW035667@gitrepo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
"0x55 0xaa" at offset 510 is the signature for a (P)MBR partition table, no=
t a FAT filesystem.
-Ravi (rpokala@)
=EF=BB=BF-----Original Message-----
From: <owner-src-committers@freebsd.org> on behalf of Ed Maste <emaste@Free=
BSD.org>
Date: 2022-03-29, Tuesday at 14:33
To: <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, <dev-c=
ommits-src-main@FreeBSD.org>
Subject: git: 868c1b8431f2 - main - fstyp: detect Raspberry Pi Pico boot fi=
lesystem as FAT
The branch main has been updated by emaste:
URL: https://cgit.FreeBSD.org/src/commit/?id=3D868c1b8431f297ade8deba5baf=
903f73cf5e11c6
commit 868c1b8431f297ade8deba5baf903f73cf5e11c6
Author: Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2022-03-28 21:03:10 +0000
Commit: Ed Maste <emaste@FreeBSD.org>
CommitDate: 2022-03-29 21:33:15 +0000
fstyp: detect Raspberry Pi Pico boot filesystem as FAT
fstyp looks for a 0x55 0xAA signature at offset 510, but this is no=
t
required by specifications and is not proivded by the Raspberry Pi =
Nano
bootloader.
We should really remove the signature check and implement a more
comprehensive BPB validation instead, but it will require more
investigation and testing. For now just add a special case for the
Raspberry Pi Nano bootloader, to avoid introducing regressions or n=
ew
false positives.
PR: 262896
Reviewed by: delphij
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D34699
---
usr.sbin/fstyp/msdosfs.c | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/usr.sbin/fstyp/msdosfs.c b/usr.sbin/fstyp/msdosfs.c
index 47d2383fbc8f..b2144fa46cb1 100644
--- a/usr.sbin/fstyp/msdosfs.c
+++ b/usr.sbin/fstyp/msdosfs.c
@@ -41,6 +41,24 @@ __FBSDID("$FreeBSD$");
#define LABEL_NO_NAME "NO NAME "
+/*
+ * XXX the signature 0x55 0xAA as the last two bytes of 512 is not req=
uired
+ * by specifications, but was historically required by fstyp. This ch=
eck
+ * should be removed, with a more comprehensive BPB validation instead=
.
+ */
+static bool
+check_signature(uint8_t sector0[512])
+{
+ /* Check for the FAT boot sector signature. */
+ if (sector0[510] =3D=3D 0x55 && sector0[511] =3D=3D 0xaa)
+ return (true);
+ /* Special case for Raspberry Pi Nano bootloader. */
+ if (sector0[510] =3D=3D 0 && sector0[511] =3D=3D 0 &&
+ sector0[0] =3D=3D 0xeb && sector0[1] =3D=3D 0x3c && sector0[2] =3D=3D 0x90)
+ return (true);
+ return (false);
+}
+
int
fstyp_msdosfs(FILE *fp, char *label, size_t size)
{
@@ -58,8 +76,7 @@ fstyp_msdosfs(FILE *fp, char *label, size_t size)
if (sector0 =3D=3D NULL)
return (1);
- /* Check for the FAT boot sector signature. */
- if (sector0[510] !=3D 0x55 || sector0[511] !=3D 0xaa) {
+ if (!check_signature(sector0)) {
goto error;
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ED18364E-18F5-4662-89AA-2838F3A253C1>
