Skip to content

Commit eae2a46

Browse files
committed
No readdir on files
1 parent a72e7d1 commit eae2a46

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

kernel/src/kernel/calls/syscall_filesystem.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ void syscallFsLength(g_task* task, g_syscall_fs_length* data)
7676

7777
void syscallFsCloneFd(g_task* task, g_syscall_fs_clonefd* data)
7878
{
79-
data->status = filesystemProcessCloneDescriptor(data->source_pid, data->source_fd, data->target_pid, data->target_fd, &data->result);
79+
data->status = filesystemProcessCloneDescriptor(data->source_pid, data->source_fd, data->target_pid,
80+
data->target_fd, &data->result);
8081
}
8182

8283
void syscallFsTell(g_task* task, g_syscall_fs_tell* data)
@@ -121,7 +122,8 @@ void syscallFsPipe(g_task* task, g_syscall_fs_pipe* data)
121122
g_fs_open_status writeOpen = filesystemOpenNodeFd(pipeNode, writeFlags, task->process->id, &data->write_fd);
122123
if(writeOpen != G_FS_OPEN_SUCCESSFUL)
123124
{
124-
logInfo("%! failed to open write end of pipe %i for task %i with status %i", "filesystem", pipeNode->id, task->id, writeOpen);
125+
logInfo("%! failed to open write end of pipe %i for task %i with status %i", "filesystem", pipeNode->id,
126+
task->id, writeOpen);
125127
data->status = G_FS_PIPE_ERROR;
126128
return;
127129
}
@@ -132,9 +134,11 @@ void syscallFsPipe(g_task* task, g_syscall_fs_pipe* data)
132134
{
133135
if(filesystemClose(task->process->id, writeOpen, true) != G_FS_CLOSE_SUCCESSFUL)
134136
{
135-
logInfo("%! failed to close write end of pipe %i for task %i after failing to open read end", "filesystem", pipeNode->id, task->id);
137+
logInfo("%! failed to close write end of pipe %i for task %i after failing to open read end", "filesystem",
138+
pipeNode->id, task->id);
136139
}
137-
logInfo("%! failed to open read end of pipe %i for task %i with status %i", "filesystem", pipeNode->id, task->id, readOpen);
140+
logInfo("%! failed to open read end of pipe %i for task %i with status %i", "filesystem", pipeNode->id,
141+
task->id, readOpen);
138142
data->status = G_FS_PIPE_ERROR;
139143
return;
140144
}
@@ -205,7 +209,13 @@ void syscallFsReadDirectory(g_task* task, g_syscall_fs_read_directory* data)
205209
return;
206210
}
207211

208-
g_fs_node* child;
212+
if(directory->type == G_FS_NODE_TYPE_FILE)
213+
{
214+
data->status = G_FS_READ_DIRECTORY_ERROR;
215+
return;
216+
}
217+
218+
g_fs_node* child = nullptr;
209219
data->status = filesystemReadDirectory(directory, data->iterator->position, &child);
210220
if(data->status == G_FS_READ_DIRECTORY_SUCCESSFUL)
211221
{

kernel/src/kernel/filesystem/filesystem.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,9 @@ g_fs_open_directory_status filesystemOpenDirectory(g_fs_node* dir)
740740

741741
g_fs_read_directory_status filesystemReadDirectory(g_fs_node* dir, uint32_t index, g_fs_node** outChild)
742742
{
743+
if(!dir->children)
744+
return G_FS_READ_DIRECTORY_ERROR;
745+
743746
auto entry = dir->children;
744747
while(entry)
745748
{

0 commit comments

Comments
 (0)