diff --git a/system/lib/wasmfs/backends/node_backend.cpp b/system/lib/wasmfs/backends/node_backend.cpp index a3a7ad19b32f3..d4eab05434ac0 100644 --- a/system/lib/wasmfs/backends/node_backend.cpp +++ b/system/lib/wasmfs/backends/node_backend.cpp @@ -191,7 +191,9 @@ class NodeDirectory : public Directory { if (_wasmfs_node_get_mode(childPath.c_str(), &mode)) { return nullptr; } - if (S_ISREG(mode)) { + // Allow reading from character device files too (e.g. `/dev/random`, + // `/dev/urandom`) + if (S_ISREG(mode) || S_ISCHR(mode)) { return std::make_shared(mode, getBackend(), childPath); } else if (S_ISDIR(mode)) { return std::make_shared(mode, getBackend(), childPath); diff --git a/test/fs/test_fs_dev_random.c b/test/fs/test_fs_dev_random.c index 4200f0bdc8139..a88a04fc75619 100644 --- a/test/fs/test_fs_dev_random.c +++ b/test/fs/test_fs_dev_random.c @@ -13,12 +13,14 @@ int main() { int nread; fp = fopen("/dev/random", "r"); - nread = fread(&data, 1, byte_count, fp); + assert(fp != NULL); + nread = fread(data, 1, byte_count, fp); assert(nread == byte_count); fclose(fp); fp = fopen("/dev/urandom", "r"); - nread = fread(&data, 1, byte_count, fp); + assert(fp != NULL); + nread = fread(data, 1, byte_count, fp); assert(nread == byte_count); fclose(fp);