From nobody Thu Mar 31 20:11:28 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id D89441A54E0B; Thu, 31 Mar 2022 20:11:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KTvZm5pfnz4Qq0; Thu, 31 Mar 2022 20:11:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648757488; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=pXpCCwBHl3QHuBm9cNfJpaTlaD1FRfis07o6TN8sdck=; b=s7+RBUOkDc9jisZWGlyCHWVCqp9fNrBBxD+AIg2lPhGfmZYWJVCzvBbpSzPmRgmoXTWr/8 PwN5lhIzRHoUtVyKWg1hgNBa869kp72kOdfsq0ohmjWvbRSLoWQMaUnU16Y7liFkr9clfB CE+dyCx/G8JX9oEvnOF4DQ+nKVBbqJKlnUYw8tJbIC4a2FIv0hByhLIF8u/trWT4p5y2B7 Du4M/NPUBwsPk5iw8k3qdQ3E5P3JkFBniWY6Bp/Pz8x94qEQr+QnMToAvP2LCiGniyHOJT AImsPZG7kigWfWTma5OXhKoQfc8GIq8VJIeAajg5G1nQo8puDR9uk1w6iZ7jzA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A83BD2DBF4; Thu, 31 Mar 2022 20:11:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 22VKBSWF032941; Thu, 31 Mar 2022 20:11:28 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 22VKBSTt032940; Thu, 31 Mar 2022 20:11:28 GMT (envelope-from git) Date: Thu, 31 Mar 2022 20:11:28 GMT Message-Id: <202203312011.22VKBSTt032940@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Ed Maste Subject: git: e06ce938ddc0 - stable/13 - fstyp: detect Raspberry Pi Pico boot filesystem as FAT List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: e06ce938ddc0222c6ed10a70108f71685923bd45 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648757488; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=pXpCCwBHl3QHuBm9cNfJpaTlaD1FRfis07o6TN8sdck=; b=hb50KfNmLuc1IoUGKPkHSozItozjI6hvcyQ28T0DaD909FC+iToClWfRjn1Tt1lQLAuB/m hH9O0VfVRJKIuTXH7ovUuUpEm2ECDRfp3s89IQ5pOfKa7X3k9kfYs6fV345PwhJF8rt10q RH+btXejB0mN9V0Z+mVRKvlFju2hM0xMWSmvzX7Tp4eQ3c5SWJEiYv5K9Ez3lCoQ7jBq13 3mYZZEYNSzXms9gyoAXOHpn1s2BSRnszSHCSmZD1Sj+fePlyZMIJscR3ehVDwPT5ts/DT3 fe1zv0NdXbzNEUyTyZj1PKz1Tk6KQZUeDfKZ3LcZWhVgB05slPOrCucJ2zYEZw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1648757488; a=rsa-sha256; cv=none; b=cbcLUyXocP9cfdrl9Qt1nboAuR4Yayx0OUmVGQdS6ppY/JxOHK+wTo3htAbjlbjkL2EPAm Mb1HIz6EFF4FbHiW4zsLsUib8KtQZlrmQHX2qlFPYvXzlWm8amLfo06UH1uZqMsAgm8hhv 26mrp8PIMRNf5PnlQ9rsbVWG7fVx6HlP30MCex12vp7RTVSPUFnUeexL73VO/ggarK5SzJ lxDEE6Hzg+UcjX5+y8IMCEBcxgi5mK5gTfieIHJWnQUVm2NuKBDexYu+t3ROeltTYvGoCF aFT6iX20VBX28rIC3l9u+zKTftTUscP9mwyIDPlYOY6UmeVAer6OHxlpugL35w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=e06ce938ddc0222c6ed10a70108f71685923bd45 commit e06ce938ddc0222c6ed10a70108f71685923bd45 Author: Ed Maste AuthorDate: 2022-03-28 21:03:10 +0000 Commit: Ed Maste CommitDate: 2022-03-31 20:11:05 +0000 fstyp: detect Raspberry Pi Pico boot filesystem as FAT fstyp looks for a 0x55 0xAA signature at offset 510, but this is not required by specifications and is not proivded by the Raspberry Pi Pico 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 Pico bootloader, to avoid introducing regressions or new false positives. PR: 262896 Reviewed by: delphij MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D34699 (cherry picked from commit 868c1b8431f297ade8deba5baf903f73cf5e11c6) (cherry picked from commit 27c2f016b86744aa5d4c6031b4ef2fc16bbf6546) --- 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 3d86802f6a2e..2e74f769ca97 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 required + * by specifications, but was historically required by fstyp. This check + * 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] == 0x55 && sector0[511] == 0xaa) + return (true); + /* Special case for Raspberry Pi Pico bootloader. */ + if (sector0[510] == 0 && sector0[511] == 0 && + sector0[0] == 0xeb && sector0[1] == 0x3c && sector0[2] == 0x90) + return (true); + return (false); +} + int fstyp_msdosfs(FILE *fp, char *label, size_t size) { @@ -57,8 +75,7 @@ fstyp_msdosfs(FILE *fp, char *label, size_t size) if (sector0 == NULL) return (1); - /* Check for the FAT boot sector signature. */ - if (sector0[510] != 0x55 || sector0[511] != 0xaa) { + if (!check_signature(sector0)) { goto error; }