Skip to content

Commit c5890af

Browse files
committed
Kernel: Make chdir() take path+length
1 parent f231e9e commit c5890af

File tree

3 files changed

+6
-5
lines changed

3 files changed

+6
-5
lines changed

Kernel/Process.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,12 +1555,13 @@ int Process::sys$readlink(const char* path, char* buffer, ssize_t size)
15551555
return 0;
15561556
}
15571557

1558-
int Process::sys$chdir(const char* path)
1558+
int Process::sys$chdir(const char* user_path, size_t path_length)
15591559
{
15601560
SmapDisabler disabler;
1561-
if (!validate_read_str(path))
1561+
if (!validate_read(user_path, path_length))
15621562
return -EFAULT;
1563-
auto directory_or_error = VFS::the().open_directory(StringView(path), current_directory());
1563+
auto path = copy_string_from_user(user_path, path_length);
1564+
auto directory_or_error = VFS::the().open_directory(path, current_directory());
15641565
if (directory_or_error.is_error())
15651566
return directory_or_error.error();
15661567
m_cwd = *directory_or_error.value();

Kernel/Process.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ class Process : public InlineLinkedListNode<Process>
144144
int sys$poll(pollfd*, int nfds, int timeout);
145145
ssize_t sys$get_dir_entries(int fd, void*, ssize_t);
146146
int sys$getcwd(char*, ssize_t);
147-
int sys$chdir(const char*);
147+
int sys$chdir(const char*, size_t);
148148
int sys$fchdir(int fd);
149149
int sys$sleep(unsigned seconds);
150150
int sys$usleep(useconds_t usec);

Libraries/LibC/unistd.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ int fstat(int fd, struct stat* statbuf)
245245

246246
int chdir(const char* path)
247247
{
248-
int rc = syscall(SC_chdir, path);
248+
int rc = syscall(SC_chdir, path, strlen(path));
249249
__RETURN_WITH_ERRNO(rc, rc, -1);
250250
}
251251

0 commit comments

Comments
 (0)