summaryrefslogtreecommitdiff
path: root/util/nvmutil/nvmutil.c
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2026-03-17 22:26:17 +0000
committerLeah Rowe <leah@libreboot.org>2026-03-17 22:26:17 +0000
commitec96cb46fc3511a0a81288a4685a55e10e90c306 (patch)
treeac89c46f0d4381cec104e82d336b7b011ba6b035 /util/nvmutil/nvmutil.c
parent6fe909f9f770dd9459c1673eda01247ad08e7a5e (diff)
util/nvmutil: check file flags properly
masking O_ACCMODE tells you which flag it is Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/nvmutil/nvmutil.c')
-rw-r--r--util/nvmutil/nvmutil.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c
index f938d2cb..89e4461b 100644
--- a/util/nvmutil/nvmutil.c
+++ b/util/nvmutil/nvmutil.c
@@ -225,7 +225,7 @@ main(int argc, char *argv[])
cmd = &nv->cmd[*i];
#ifdef NVMUTIL_UNVEIL
- if (cmd->flags == O_RDONLY) {
+ if ((cmd->flags & O_ACCMODE) == O_RDONLY) {
if (unveil(f->fname, "r") == -1)
err(errno, "%s: unveil r", f->fname);
} else {
@@ -256,7 +256,7 @@ main(int argc, char *argv[])
run_cmd();
- if (cmd->flags == O_RDWR)
+ if ((cmd->flags & O_ACCMODE) == O_RDWR)
write_to_gbe_bin();
if (exit_cleanup() == -1)
@@ -294,6 +294,8 @@ sanitize_command_index(unsigned long c)
struct commands *cmd = &nv->cmd[c];
+ int _flag;
+
check_command_num(c);
if (cmd->argc < 3)
@@ -337,8 +339,10 @@ sanitize_command_index(unsigned long c)
err(EINVAL, "rw_size larger than GbE part: %lu",
(unsigned long)gbe_rw_size);
- if (cmd->flags != O_RDONLY &&
- cmd->flags != O_RDWR)
+ _flag = (cmd->flags & O_ACCMODE);
+
+ if (_flag != O_RDONLY &&
+ _flag != O_RDWR)
err(EINVAL, "invalid cmd.flags setting");
}
@@ -1206,7 +1210,7 @@ write_gbe_file(void)
struct commands *cmd = &nv->cmd[nv->i];
struct xfile *f = &nv->f;
- if (cmd->flags == O_RDONLY)
+ if ((cmd->flags & O_ACCMODE) == O_RDONLY)
return;
if (fstat(f->gbe_fd, &_gbe_st) == -1)
@@ -1374,7 +1378,7 @@ write_to_gbe_bin(void)
struct commands *cmd = &nv->cmd[nv->i];
- if (cmd->flags != O_RDWR)
+ if ((cmd->flags & O_ACCMODE) != O_RDWR)
return;
write_gbe_file();