[PATCH v2025.09.y 39/58] open: add missing mode argument to O_CREAT calls
Ahmad Fatoum
a.fatoum at pengutronix.de
Fri Mar 13 06:25:23 PDT 2026
POSIX requires a third mode argument when open() is called with
O_CREAT. While barebox doesn't enforce file permissions, passing
mode satisfies static analyzers and is correct practice.
Also fix creat() to actually forward its mode parameter to open()
instead of silently discarding it.
Reported-by: GCC 14.2 -fanalyzer
Co-authored-by: Claude Opus 4.6 <noreply at anthropic.com>
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
Link: https://lore.barebox.org/20260216084253.3547270-8-a.fatoum@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
commands/echo.c | 2 +-
commands/edit.c | 2 +-
commands/uimage.c | 2 +-
commands/uncompress.c | 2 +-
common/bbu.c | 2 +-
common/console_common.c | 2 +-
common/fastboot.c | 4 ++--
common/globalvar.c | 2 +-
drivers/usb/gadget/function/dfu.c | 6 +++---
include/fcntl.h | 2 +-
lib/libfile.c | 4 ++--
lib/xymodem.c | 2 +-
12 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/commands/echo.c b/commands/echo.c
index 572b852ea32a..e39d9d30731b 100644
--- a/commands/echo.c
+++ b/commands/echo.c
@@ -96,7 +96,7 @@ static int do_echo(int argc, char *argv[])
exit_parse:
if (file) {
- fd = open(file, oflags);
+ fd = open(file, oflags, 0666);
if (fd < 0) {
perror("open");
return 1;
diff --git a/commands/edit.c b/commands/edit.c
index 28c9ab8877f7..c7262711d01f 100644
--- a/commands/edit.c
+++ b/commands/edit.c
@@ -243,7 +243,7 @@ static int save_file(const char *path)
int fd;
int ret = 0;
- fd = open(path, O_WRONLY | O_TRUNC | O_CREAT);
+ fd = open(path, O_WRONLY | O_TRUNC | O_CREAT, 0666);
if (fd < 0) {
printf("could not open file for writing: %m\n");
return fd;
diff --git a/commands/uimage.c b/commands/uimage.c
index 72b827b5b276..d7e881b35f7d 100644
--- a/commands/uimage.c
+++ b/commands/uimage.c
@@ -67,7 +67,7 @@ static int do_uimage(int argc, char *argv[])
}
if (extract) {
- fd = open(extract, O_WRONLY | O_CREAT | O_TRUNC);
+ fd = open(extract, O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fd < 0) {
perror("open");
ret = fd;
diff --git a/commands/uncompress.c b/commands/uncompress.c
index 10884d675b3d..32e60e78072a 100644
--- a/commands/uncompress.c
+++ b/commands/uncompress.c
@@ -23,7 +23,7 @@ static int do_uncompress(int argc, char *argv[])
return 1;
}
- to = open(argv[2], O_WRONLY | O_CREAT);
+ to = open(argv[2], O_WRONLY | O_CREAT, 0666);
if (to < 0) {
perror("open");
ret = 1;
diff --git a/common/bbu.c b/common/bbu.c
index 03261583fe0b..1271ef2717f4 100644
--- a/common/bbu.c
+++ b/common/bbu.c
@@ -454,7 +454,7 @@ int bbu_std_file_handler(struct bbu_handler *handler,
if (ret)
return ret;
- fd = open(data->devicefile, oflags);
+ fd = open(data->devicefile, oflags, 0666);
if (fd < 0)
return fd;
diff --git a/common/console_common.c b/common/console_common.c
index 5b7a64c99c29..1c2da748b613 100644
--- a/common/console_common.c
+++ b/common/console_common.c
@@ -195,7 +195,7 @@ int log_writefile(const char *filepath)
int ret = 0, nbytes = 0, fd = -1;
struct log_entry *log;
- fd = open(filepath, O_WRONLY | O_CREAT | O_TRUNC);
+ fd = open(filepath, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd < 0)
return -errno;
diff --git a/common/fastboot.c b/common/fastboot.c
index e5c79c22376c..e60091efc704 100644
--- a/common/fastboot.c
+++ b/common/fastboot.c
@@ -440,7 +440,7 @@ static void cb_download(struct fastboot *fb, const char *cmd)
close(fb->download_fd);
}
- fb->download_fd = open(fb->tempname, O_WRONLY | O_CREAT | O_TRUNC);
+ fb->download_fd = open(fb->tempname, O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fb->download_fd < 0) {
fastboot_tx_print(fb, FASTBOOT_MSG_FAIL, "internal error");
return;
@@ -588,7 +588,7 @@ static int fastboot_handle_sparse(struct fastboot *fb,
return ret;
}
- fd = open(fentry->filename, flags);
+ fd = open(fentry->filename, flags, 0666);
if (fd < 0)
return -errno;
diff --git a/common/globalvar.c b/common/globalvar.c
index 77af6733a6a0..0472ecf9f58b 100644
--- a/common/globalvar.c
+++ b/common/globalvar.c
@@ -54,7 +54,7 @@ static int __nv_save(const char *prefix, const char *name, const char *val)
fname = basprintf("%s/%s", prefix, name);
- fd = open(fname, O_CREAT | O_WRONLY | O_TRUNC);
+ fd = open(fname, O_CREAT | O_WRONLY | O_TRUNC, 0666);
free(fname);
diff --git a/drivers/usb/gadget/function/dfu.c b/drivers/usb/gadget/function/dfu.c
index 893dcc7f7007..e8977a96d666 100644
--- a/drivers/usb/gadget/function/dfu.c
+++ b/drivers/usb/gadget/function/dfu.c
@@ -259,14 +259,14 @@ static void dfu_do_open_dnload(struct dfu_work *dw)
pr_debug("do open dnload\n");
if (dfu_file_entry->flags & FILE_LIST_FLAG_SAFE) {
- dfufd = open(DFU_TEMPFILE, O_WRONLY | O_CREAT);
+ dfufd = open(DFU_TEMPFILE, O_WRONLY | O_CREAT, 0666);
} else {
unsigned flags = O_WRONLY;
if (dfu_file_entry->flags & FILE_LIST_FLAG_CREATE)
flags |= O_CREAT | O_TRUNC;
- dfufd = open(dfu_file_entry->filename, flags);
+ dfufd = open(dfu_file_entry->filename, flags, 0666);
}
if (dfufd < 0) {
@@ -325,7 +325,7 @@ static void dfu_do_copy(struct dfu_work *dw)
if (dfu_file_entry->flags & FILE_LIST_FLAG_CREATE)
flags |= O_CREAT | O_TRUNC;
- fd = open(dfu_file_entry->filename, flags);
+ fd = open(dfu_file_entry->filename, flags, 0666);
if (fd < 0) {
perror("open");
dfu->dfu_state = DFU_STATE_dfuERROR;
diff --git a/include/fcntl.h b/include/fcntl.h
index db7926ee25fb..62dbf0f3c6d2 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -53,7 +53,7 @@ static inline int open(const char *pathname, int flags, ...)
static inline int creat(const char *pathname, mode_t mode)
{
- return open(pathname, O_CREAT | O_WRONLY | O_TRUNC);
+ return open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
}
#endif /* __FCNTL_H */
diff --git a/lib/libfile.c b/lib/libfile.c
index 7ca13a34b41d..e976b32e2c1f 100644
--- a/lib/libfile.c
+++ b/lib/libfile.c
@@ -380,7 +380,7 @@ int write_file(const char *filename, const void *buf, size_t size)
{
int fd, ret;
- fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT);
+ fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT, 0644);
if (fd < 0)
return fd;
@@ -476,7 +476,7 @@ int copy_file(const char *src, const char *dst, unsigned flags)
mode |= O_TRUNC;
}
- dstfd = open(dst, mode);
+ dstfd = open(dst, mode, 0666);
if (dstfd < 0) {
printf("could not open %s: %m\n", dst);
ret = dstfd;
diff --git a/lib/xymodem.c b/lib/xymodem.c
index 84a91157713b..bd5e114ee270 100644
--- a/lib/xymodem.c
+++ b/lib/xymodem.c
@@ -394,7 +394,7 @@ static int xy_await_header(struct xyz_ctxt *proto)
xy_dbg("header received, filename=%s, file length=%d\n",
proto->filename, proto->file_len);
if (proto->filename[0])
- proto->fd = open(proto->filename, O_WRONLY | O_CREAT);
+ proto->fd = open(proto->filename, O_WRONLY | O_CREAT, 0666);
else
proto->state = PROTO_STATE_FINISHED_XFER;
proto->nb_received = 0;
--
2.47.3
More information about the barebox
mailing list