diff options
author | Jeff Epler <jepler@gmail.com> | 2025-07-19 06:38:18 -0500 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2025-07-24 10:39:41 +1000 |
commit | 59ee59901b9223697cf96f5859fcbf49fe9d21f4 (patch) | |
tree | 4a37a1a23101b02985974667375e8d2f23958d4f | |
parent | 3c603f7baf25b089a30f41d3cd57d13ba50b194c (diff) |
extmod/vfs_posix: Add MICROPY_VFS_POSIX_WRITABLE option.
When this configuration flag is set, VfsPosix instances can be written.
Otherwise, they will always be created "read only".
This flag is useful when fuzzing micropython: Without VfsPosix, the fuzzing
input script cannot be read; but with writable VfsPosix, fuzzing scripts
can potentially perform undesired operations on the host filesystem.
Signed-off-by: Jeff Epler <jepler@gmail.com>
-rw-r--r-- | extmod/vfs_posix.c | 4 | ||||
-rw-r--r-- | py/mpconfig.h | 5 |
2 files changed, 7 insertions, 2 deletions
diff --git a/extmod/vfs_posix.c b/extmod/vfs_posix.c index 9393d3b5e..27f833e80 100644 --- a/extmod/vfs_posix.c +++ b/extmod/vfs_posix.c @@ -137,7 +137,7 @@ static mp_obj_t vfs_posix_make_new(const mp_obj_type_t *type, size_t n_args, siz vstr_add_char(&vfs->root, '/'); } vfs->root_len = vfs->root.len; - vfs->readonly = false; + vfs->readonly = !MICROPY_VFS_POSIX_WRITABLE; return MP_OBJ_FROM_PTR(vfs); } @@ -161,7 +161,7 @@ static mp_obj_t vfs_posix_umount(mp_obj_t self_in) { static MP_DEFINE_CONST_FUN_OBJ_1(vfs_posix_umount_obj, vfs_posix_umount); static inline bool vfs_posix_is_readonly(mp_obj_vfs_posix_t *self) { - return self->readonly; + return !MICROPY_VFS_POSIX_WRITABLE || self->readonly; } static void vfs_posix_require_writable(mp_obj_t self_in) { diff --git a/py/mpconfig.h b/py/mpconfig.h index a1025fe5e..b812cf032 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -1084,6 +1084,11 @@ typedef time_t mp_timestamp_t; #define MICROPY_VFS_POSIX (0) #endif +// Whether to include support for writable POSIX filesystems. +#ifndef MICROPY_VFS_POSIX_WRITABLE +#define MICROPY_VFS_POSIX_WRITABLE (1) +#endif + // Support for VFS FAT component, to mount a FAT filesystem within VFS #ifndef MICROPY_VFS_FAT #define MICROPY_VFS_FAT (0) |