diff options
| author | Leah Rowe <leah@libreboot.org> | 2026-03-17 22:26:17 +0000 |
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2026-03-17 22:26:17 +0000 |
| commit | ec96cb46fc3511a0a81288a4685a55e10e90c306 (patch) | |
| tree | ac89c46f0d4381cec104e82d336b7b011ba6b035 /util/nvmutil | |
| parent | 6fe909f9f770dd9459c1673eda01247ad08e7a5e (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')
| -rw-r--r-- | util/nvmutil/nvmutil.c | 16 |
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(); |
