From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH 6/6] fastboot: check for file existence before flashing/erasing
Date: Mon, 28 Apr 2025 14:52:18 +0200 [thread overview]
Message-ID: <20250428125217.1931365-7-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20250428125217.1931365-1-a.fatoum@pengutronix.de>
We used to have an init time check for whether exported files exist or
not, but this went away and was replaced by a check in getvar.
If a client omits getvar and directly calls flash for a non-existent
file, barebox will create it automatically, thereby turning every
partition as if it had the create flag set.
Add an explicit check for whether a file exists into flash/erase
and proceed only if it does or the create flag is set.
The optional flag needs not to be checked here as it's only relevant
when enumerating available partitions.
Fixes: 6a191155be4e ("fastboot: evaluate fastboot partitions when used")
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
common/fastboot.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/common/fastboot.c b/common/fastboot.c
index e51a6b2027ec..56bc4e82c4fe 100644
--- a/common/fastboot.c
+++ b/common/fastboot.c
@@ -94,6 +94,20 @@ static loff_t fb_file_getsize(struct file_list_entry *fentry)
return ret ? ret : s.st_size;
}
+static int fb_file_available(struct file_list_entry *fentry)
+{
+ loff_t size;
+
+ size = fb_file_getsize(fentry);
+ if (size >= 0)
+ return 1;
+
+ if (fentry->flags & FILE_LIST_FLAG_CREATE)
+ return 0;
+
+ return size;
+}
+
static int fastboot_add_partition_variables(struct fastboot *fb, struct list_head *list,
struct file_list_entry *fentry)
{
@@ -682,13 +696,24 @@ static void cb_flash(struct fastboot *fb, const char *cmd)
goto out;
}
- /* Check if board-code registered a vendor-specific handler */
+ /* Check if board-code registered a vendor-specific handler
+ * We intentionally do this before the fb_file_available check
+ * to afford board core more flexibility.
+ */
if (fb->cmd_flash) {
ret = fb->cmd_flash(fb, fentry, fb->tempname, fb->download_size);
if (ret != FASTBOOT_CMD_FALLTHROUGH)
goto out;
}
+ ret = fb_file_available(fentry);
+ if (ret < 0) {
+ fastboot_tx_print(fb, FASTBOOT_MSG_FAIL,
+ "file %s doesn't exist", fentry->filename);
+ ret = -ENOENT;
+ goto out;
+ }
+
filename = fentry->filename;
if (filetype == filetype_android_sparse) {
@@ -801,6 +826,13 @@ static void cb_erase(struct fastboot *fb, const char *cmd)
return;
}
+ ret = fb_file_available(fentry);
+ if (ret < 0) {
+ fastboot_tx_print(fb, FASTBOOT_MSG_FAIL,
+ "file %s doesn't exist", fentry->filename);
+ return;
+ }
+
fd = open(filename, O_RDWR);
if (fd < 0)
fastboot_tx_print(fb, FASTBOOT_MSG_FAIL, strerror(-fd));
--
2.39.5
prev parent reply other threads:[~2025-04-28 13:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-28 12:52 [PATCH 0/6] fastboot: fix handling of non-existent partitions Ahmad Fatoum
2025-04-28 12:52 ` [PATCH 1/6] fastboot: terminate request for non-file-backed partition properly Ahmad Fatoum
2025-04-28 12:52 ` [PATCH 2/6] fastboot: introduce fastboot_tx_print_var() helper Ahmad Fatoum
2025-04-28 12:52 ` [PATCH 3/6] fastboot: don't populate partition variables unconditionally Ahmad Fatoum
2025-04-28 12:52 ` [PATCH 4/6] fastboot: only populate variables explicitly asked for Ahmad Fatoum
2025-04-28 12:52 ` [PATCH 5/6] fastboot: factor out fb_file_getsize Ahmad Fatoum
2025-04-28 12:52 ` Ahmad Fatoum [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250428125217.1931365-7-a.fatoum@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox