From 6bdc405f759e30aa253635ab76a565747f3d2306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 12 May 2005 23:31:04 +0000 Subject: [PATCH] Whenever KPath is used, it will now be tested if it could be initialized (thanks to Ingo for the reminder...). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12652 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/devfs.cpp | 11 +++++++++ src/system/kernel/fs/vfs.cpp | 41 +++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/system/kernel/fs/devfs.cpp b/src/system/kernel/fs/devfs.cpp index edcf55ec37..50b19aa9b4 100644 --- a/src/system/kernel/fs/devfs.cpp +++ b/src/system/kernel/fs/devfs.cpp @@ -500,6 +500,9 @@ publish_directory(struct devfs *fs, const char *path) // copy the path over to a temp buffer so we can munge it KPath tempPath(path); + if (tempPath.InitCheck() != B_OK) + return B_NO_MEMORY; + char *temp = tempPath.LockBuffer(); // create the path leading to the device @@ -565,6 +568,9 @@ publish_node(struct devfs *fs, const char *path, struct devfs_vnode **_node) // copy the path over to a temp buffer so we can munge it KPath tempPath(path); + if (tempPath.InitCheck() != B_OK) + return B_NO_MEMORY; + char *temp = tempPath.LockBuffer(); // create the path leading to the device @@ -871,6 +877,11 @@ devfs_lookup(fs_volume _fs, fs_vnode _dir, const char *name, vnode_id *_id, int if (vnode == NULL) { // scan for drivers in the given directory (that indicates the type of the driver) KPath path; + if (path.InitCheck() != B_OK) { + err = B_NO_MEMORY; + goto err; + } + get_device_name(dir, path.LockBuffer(), path.BufferSize()); path.UnlockBuffer(); path.Append(name); diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index 8c34c1a27d..7959e54e65 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -5044,6 +5044,8 @@ _kern_mount(const char *path, const char *device, const char *fs_name, uint32 flags, const char *args) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return fs_mount(pathBuffer.LockBuffer(), device, fs_name, flags, args, true); } @@ -5053,6 +5055,8 @@ status_t _kern_unmount(const char *path, uint32 flags) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return fs_unmount(pathBuffer.LockBuffer(), flags, true); } @@ -5130,6 +5134,8 @@ int _kern_open(int fd, const char *path, int openMode, int perms) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; if (openMode & O_CREAT) return file_create(pathBuffer.LockBuffer(), openMode, perms, true); @@ -5182,6 +5188,8 @@ int _kern_open_dir(int fd, const char *path) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return dir_open(fd, pathBuffer.LockBuffer(), true); } @@ -5241,6 +5249,8 @@ status_t _kern_create_dir(int fd, const char *path, int perms) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return dir_create(fd, pathBuffer.LockBuffer(), perms, true); } @@ -5250,6 +5260,8 @@ status_t _kern_remove_dir(const char *path) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return dir_remove(pathBuffer.LockBuffer(), true); } @@ -5281,6 +5293,8 @@ _kern_read_link(int fd, const char *path, char *buffer, size_t *_bufferSize) if (path) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return common_read_link(fd, pathBuffer.LockBuffer(), buffer, _bufferSize, true); @@ -5295,6 +5309,9 @@ _kern_write_link(const char *path, const char *toPath) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); KPath toPathBuffer(toPath, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK || toPathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; + char *toBuffer = toPathBuffer.LockBuffer(); status_t status = check_path(toBuffer); @@ -5325,6 +5342,9 @@ _kern_create_symlink(int fd, const char *path, const char *toPath, int mode) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); KPath toPathBuffer(toPath, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK || toPathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; + char *toBuffer = toPathBuffer.LockBuffer(); status_t status = check_path(toBuffer); @@ -5341,6 +5361,8 @@ _kern_create_link(const char *path, const char *toPath) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); KPath toPathBuffer(toPath, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK || toPathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return common_create_link(pathBuffer.LockBuffer(), toPathBuffer.LockBuffer(), true); @@ -5365,6 +5387,8 @@ status_t _kern_unlink(int fd, const char *path) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return common_unlink(fd, pathBuffer.LockBuffer(), true); } @@ -5394,6 +5418,8 @@ _kern_rename(int oldFD, const char *oldPath, int newFD, const char *newPath) { KPath oldPathBuffer(oldPath, false, B_PATH_NAME_LENGTH + 1); KPath newPathBuffer(newPath, false, B_PATH_NAME_LENGTH + 1); + if (oldPathBuffer.InitCheck() != B_OK || newPathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return common_rename(oldFD, oldPathBuffer.LockBuffer(), newFD, newPathBuffer.LockBuffer(), true); @@ -5404,6 +5430,8 @@ status_t _kern_access(const char *path, int mode) { KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; return common_access(pathBuffer.LockBuffer(), mode, true); } @@ -5449,6 +5477,8 @@ _kern_read_stat(int fd, const char *path, bool traverseLeafLink, if (path) { // path given: get the stat of the node referred to by (fd, path) KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; status = common_path_read_stat(fd, pathBuffer.LockBuffer(), traverseLeafLink, stat, true); @@ -5512,11 +5542,13 @@ _kern_write_stat(int fd, const char *path, bool traverseLeafLink, stat = &completeStat; } - int status; + status_t status; if (path) { // path given: write the stat of the node referred to by (fd, path) KPath pathBuffer(path, false, B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; status = common_path_write_stat(fd, pathBuffer.LockBuffer(), traverseLeafLink, stat, statMask, true); @@ -5543,6 +5575,8 @@ int _kern_open_attr_dir(int fd, const char *path) { KPath pathBuffer(B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; if (path != NULL) pathBuffer.SetTo(path); @@ -5621,6 +5655,8 @@ status_t _kern_setcwd(int fd, const char *path) { KPath pathBuffer(B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; if (path != NULL) pathBuffer.SetTo(path); @@ -5700,6 +5736,9 @@ status_t _user_unmount(const char *userPath, uint32 flags) { KPath pathBuffer(B_PATH_NAME_LENGTH + 1); + if (pathBuffer.InitCheck() != B_OK) + return B_NO_MEMORY; + char *path = pathBuffer.LockBuffer(); if (user_strlcpy(path, userPath, B_PATH_NAME_LENGTH) < B_OK)