[haiku-commits] BRANCH HaikuPM-github.package-management - in src: system/kernel/fs tools/fs_shell system/kernel system/kernel/disk_device_manager add-ons/kernel/file_systems/packagefs

  • From: HaikuPM-github.package-management <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 22 Apr 2013 18:15:31 +0200 (CEST)

added 1 changeset to branch 'refs/remotes/HaikuPM-github/package-management'
old head: 5be84d5f004d43bc5f245d6fa19b1327c8ee0fbe
new head: 237127fbe4071abea20f3e5005f5a1e549f12788
overview: https://github.com/haiku/HaikuPM/compare/5be84d5...237127f

----------------------------------------------------------------------------

237127f: Fix _user_entry_ref_to_path() in chroot
  
  * Add "bool kernel" parameter to vfs_entry_ref_to_path(), so it can be
    specified for which I/O context the entry ref shall be translated.
  * _user_entry_ref_to_path(): Use the calling team's I/O context instead
    of the kernel's. Fixes the bug that in a chroot the syscall would
    return a path for outside the chroot.

                                    [ Ingo Weinhold <ingo_weinhold@xxxxxx> ]

----------------------------------------------------------------------------

Commit:      237127fbe4071abea20f3e5005f5a1e549f12788
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Mon Apr 22 16:05:40 2013 UTC

----------------------------------------------------------------------------

7 files changed, 13 insertions(+), 13 deletions(-)
headers/private/kernel/vfs.h                                 | 2 +-
src/add-ons/kernel/file_systems/packagefs/Volume.cpp         | 2 +-
src/system/kernel/device_manager/legacy_drivers.cpp          | 2 +-
src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp | 4 ++--
src/system/kernel/fs/vfs.cpp                                 | 8 ++++----
src/system/kernel/module.cpp                                 | 4 ++--
src/tools/fs_shell/vfs.cpp                                   | 4 ++--

----------------------------------------------------------------------------

diff --git a/headers/private/kernel/vfs.h b/headers/private/kernel/vfs.h
index cdde48d..ed9bb66 100644
--- a/headers/private/kernel/vfs.h
+++ b/headers/private/kernel/vfs.h
@@ -119,7 +119,7 @@ status_t    vfs_stat_node_ref(dev_t device, ino_t inode, 
struct stat *stat);
 status_t       vfs_get_vnode_name(struct vnode *vnode, char *name,
                                size_t nameSize);
 status_t       vfs_entry_ref_to_path(dev_t device, ino_t inode, const char 
*leaf,
-                               char *path, size_t pathLength);
+                               bool kernel, char *path, size_t pathLength);
 status_t       vfs_get_cwd(dev_t *_mountID, ino_t *_vnodeID);
 void           vfs_unlock_vnode_if_locked(struct file_descriptor *descriptor);
 status_t       vfs_unmount(dev_t mountID, uint32 flags);
diff --git a/src/add-ons/kernel/file_systems/packagefs/Volume.cpp 
b/src/add-ons/kernel/file_systems/packagefs/Volume.cpp
index 426d851..8fdc491 100644
--- a/src/add-ons/kernel/file_systems/packagefs/Volume.cpp
+++ b/src/add-ons/kernel/file_systems/packagefs/Volume.cpp
@@ -162,7 +162,7 @@ struct Volume::PackagesDirectory {
                        RETURN_ERROR(normalizedPath.InitCheck());
 
                char* normalizedPathBuffer = normalizedPath.LockBuffer();
-               error = vfs_entry_ref_to_path(fDeviceID, fNodeID, NULL,
+               error = vfs_entry_ref_to_path(fDeviceID, fNodeID, NULL, true,
                        normalizedPathBuffer, normalizedPath.BufferSize());
                if (error != B_OK)
                        RETURN_ERROR(error);
diff --git a/src/system/kernel/device_manager/legacy_drivers.cpp 
b/src/system/kernel/device_manager/legacy_drivers.cpp
index 0738a21..dc7362f 100644
--- a/src/system/kernel/device_manager/legacy_drivers.cpp
+++ b/src/system/kernel/device_manager/legacy_drivers.cpp
@@ -1086,7 +1086,7 @@ DirectoryWatcher::EventOccurred(NotificationService& 
service,
 
        KPath path(B_PATH_NAME_LENGTH + 1);
        if (path.InitCheck() != B_OK || vfs_entry_ref_to_path(device, directory,
-                       name, path.LockBuffer(), path.BufferSize()) != B_OK)
+                       name, true, path.LockBuffer(), path.BufferSize()) != 
B_OK)
                return;
 
        path.UnlockBuffer();
diff --git a/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp 
b/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp
index 3916f1a..b77aaa0 100644
--- a/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp
+++ b/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp
@@ -201,8 +201,8 @@ public:
                        KPath path(B_PATH_NAME_LENGTH + 1);
                        if (path.InitCheck() != B_OK
                                || vfs_entry_ref_to_path(event->device, 
event->directory,
-                                               event->name, path.LockBuffer(),
-                               path.BufferSize()) != B_OK) {
+                                       event->name, true, path.LockBuffer(),
+                                       path.BufferSize()) != B_OK) {
                                delete event;
                                return B_ERROR;
                        }
diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp
index cf2eb6d..0106ff7 100644
--- a/src/system/kernel/fs/vfs.cpp
+++ b/src/system/kernel/fs/vfs.cpp
@@ -4664,7 +4664,7 @@ vfs_get_vnode_name(struct vnode* vnode, char* name, 
size_t nameSize)
 
 status_t
 vfs_entry_ref_to_path(dev_t device, ino_t inode, const char* leaf,
-       char* path, size_t pathLength)
+       bool kernel, char* path, size_t pathLength)
 {
        struct vnode* vnode;
        status_t status;
@@ -4677,7 +4677,7 @@ vfs_entry_ref_to_path(dev_t device, ino_t inode, const 
char* leaf,
        if (leaf && (strcmp(leaf, ".") == 0 || strcmp(leaf, "..") == 0)) {
                // special cases "." and "..": we can directly get the vnode of 
the
                // referenced directory
-               status = entry_ref_to_vnode(device, inode, leaf, false, true, 
&vnode);
+               status = entry_ref_to_vnode(device, inode, leaf, false, kernel, 
&vnode);
                leaf = NULL;
        } else
                status = get_vnode(device, inode, &vnode, true, false);
@@ -4685,7 +4685,7 @@ vfs_entry_ref_to_path(dev_t device, ino_t inode, const 
char* leaf,
                return status;
 
        // get the directory path
-       status = dir_vnode_to_path(vnode, path, pathLength, true);
+       status = dir_vnode_to_path(vnode, path, pathLength, kernel);
        put_vnode(vnode);
                // we don't need the vnode anymore
        if (status != B_OK)
@@ -8708,7 +8708,7 @@ _user_entry_ref_to_path(dev_t device, ino_t inode, const 
char* leaf,
        }
 
        status_t status = vfs_entry_ref_to_path(device, inode, leaf,
-               path.LockBuffer(), path.BufferSize());
+               false, path.LockBuffer(), path.BufferSize());
        if (status != B_OK)
                return status;
 
diff --git a/src/system/kernel/module.cpp b/src/system/kernel/module.cpp
index 7a02d10..a0ed7fd 100644
--- a/src/system/kernel/module.cpp
+++ b/src/system/kernel/module.cpp
@@ -1412,7 +1412,7 @@ ModuleNotificationService::_AddModuleNode(dev_t device, 
ino_t node, int fd,
        KPath path;
        status = path.InitCheck();
        if (status == B_OK) {
-               status = vfs_entry_ref_to_path(device, directory, name,
+               status = vfs_entry_ref_to_path(device, directory, name, true,
                        path.LockBuffer(), path.BufferSize());
        }
        if (status != B_OK)
@@ -1583,7 +1583,7 @@ ModuleNotificationService::_Notify(int32 opcode, dev_t 
device, ino_t directory,
        if (name != NULL) {
                // we have an entry ref
                if (pathBuffer.InitCheck() != B_OK
-                       || vfs_entry_ref_to_path(device, directory, name,
+                       || vfs_entry_ref_to_path(device, directory, name, true,
                                pathBuffer.LockBuffer(), 
pathBuffer.BufferSize()) != B_OK)
                        return;
 
diff --git a/src/tools/fs_shell/vfs.cpp b/src/tools/fs_shell/vfs.cpp
index 8bc875e..b179269 100644
--- a/src/tools/fs_shell/vfs.cpp
+++ b/src/tools/fs_shell/vfs.cpp
@@ -2690,7 +2690,7 @@ vfs_get_vnode_name(void *_vnode, char *name, fssh_size_t 
nameSize)
 
 fssh_status_t
 vfs_entry_ref_to_path(fssh_dev_t device, fssh_ino_t inode, const char *leaf,
-       char *path, fssh_size_t pathLength)
+       bool kernel, char *path, fssh_size_t pathLength)
 {
        struct vnode *vnode;
        fssh_status_t status;
@@ -5691,7 +5691,7 @@ fssh_status_t
 _kern_entry_ref_to_path(fssh_dev_t device, fssh_ino_t inode, const char *leaf,
        char* path, fssh_size_t pathLength)
 {
-       return vfs_entry_ref_to_path(device, inode, leaf, path, pathLength);
+       return vfs_entry_ref_to_path(device, inode, leaf, true, path, 
pathLength);
 }
 
 


Other related posts:

  • » [haiku-commits] BRANCH HaikuPM-github.package-management - in src: system/kernel/fs tools/fs_shell system/kernel system/kernel/disk_device_manager add-ons/kernel/file_systems/packagefs - HaikuPM-github . package-management