[haiku-commits] haiku: hrev54234 - in src: system/kernel/fs system/kernel/device_manager add-ons/kernel/file_systems/layers/write_overlay

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 20 May 2020 21:43:04 -0400 (EDT)

hrev54234 adds 3 changesets to branch 'master'
old head: 8ba0b5eb9b5ad37695c492748d9155b0491d29ce
new head: 3966c601394f6248c3152e668abb998b9414b6c1
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=3966c601394f+%5E8ba0b5eb9b5a

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

10b5c00fca4a: kernel/vfs: follow up for hrev54107
  
  _user_read_link: don't write after the buffer end, anytime the buffer is too
  short. It should honor the user bufferSize, instead of using the link length.
  normalize_path: null-terminates when bufferSize is lower than 
B_PATH_NAME_LENGTH.
  
  Change-Id: If3892dc1ffc4aa7a79a333bbe607449ca409a7f0
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/2752
  Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>

bc231fc7824a: kernel/fs: rootfs and devfs readlink behavior change
  
  Change-Id: I23ec687965493162594924c32f8ff31e7da396d7
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/2753
  Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>

3966c601394f: write_overlay: readlink behavior change
  
  Change-Id: I036f3e7f84e4a771846482fe81c2db4c4d718aef
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/2754
  Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>

                                   [ Jérôme Duval <jerome.duval@xxxxxxxxx> ]

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

4 files changed, 18 insertions(+), 11 deletions(-)
.../file_systems/layers/write_overlay/write_overlay.cpp   |  4 +++-
src/system/kernel/device_manager/devfs.cpp                |  7 ++++---
src/system/kernel/fs/rootfs.cpp                           |  7 ++++---
src/system/kernel/fs/vfs.cpp                              | 11 +++++++----

############################################################################

Commit:      10b5c00fca4a3f2f957116aa599ae5d8f5705fcb
URL:         https://git.haiku-os.org/haiku/commit/?id=10b5c00fca4a
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Wed May 20 16:50:06 2020 UTC
Committer:   waddlesplash <waddlesplash@xxxxxxxxx>
Commit-Date: Thu May 21 01:42:58 2020 UTC

kernel/vfs: follow up for hrev54107

_user_read_link: don't write after the buffer end, anytime the buffer is too
short. It should honor the user bufferSize, instead of using the link length.
normalize_path: null-terminates when bufferSize is lower than 
B_PATH_NAME_LENGTH.

Change-Id: If3892dc1ffc4aa7a79a333bbe607449ca409a7f0
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2752
Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>

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

diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp
index 4dca05ce91..b242541dfb 100644
--- a/src/system/kernel/fs/vfs.cpp
+++ b/src/system/kernel/fs/vfs.cpp
@@ -2249,7 +2249,7 @@ vnode_path_to_vnode(struct vnode* vnode, char* path, bool 
traverseLeafLink,
                                bufferSize--;
                                status = FS_CALL(nextVnode, read_symlink, 
buffer, &bufferSize);
                                // null-terminate
-                               if (status >= 0)
+                               if (status >= 0 && bufferSize < 
B_PATH_NAME_LENGTH)
                                        buffer[bufferSize] = '\0';
                        } else
                                status = B_BAD_VALUE;
@@ -2953,7 +2953,8 @@ normalize_path(char* path, size_t pathSize, bool 
traverseLink, bool kernel)
                        error = FS_CALL(fileVnode, read_symlink, path, 
&bufferSize);
                        if (error != B_OK)
                                return error;
-                       path[bufferSize] = '\0';
+                       if (bufferSize < B_PATH_NAME_LENGTH)
+                               path[bufferSize] = '\0';
                } else
                        return B_BAD_VALUE;
        }
@@ -9404,17 +9405,19 @@ _user_read_link(int fd, const char* userPath, char* 
userBuffer,
                        bufferSize = B_PATH_NAME_LENGTH;
        }
 
+       size_t newBufferSize = bufferSize;
        status_t status = common_read_link(fd, userPath ? path : NULL, buffer,
-               &bufferSize, false);
+               &newBufferSize, false);
 
        // we also update the bufferSize in case of errors
        // (the real length will be returned in case of B_BUFFER_OVERFLOW)
-       if (user_memcpy(userBufferSize, &bufferSize, sizeof(size_t)) != B_OK)
+       if (user_memcpy(userBufferSize, &newBufferSize, sizeof(size_t)) != B_OK)
                return B_BAD_ADDRESS;
 
        if (status != B_OK)
                return status;
 
+       bufferSize = min_c(newBufferSize, bufferSize);
        if (user_memcpy(userBuffer, buffer, bufferSize) != B_OK)
                return B_BAD_ADDRESS;
 

############################################################################

Commit:      bc231fc7824aba2ecad7a9b2491618a03b00c747
URL:         https://git.haiku-os.org/haiku/commit/?id=bc231fc7824a
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Wed May 20 17:02:06 2020 UTC
Committer:   waddlesplash <waddlesplash@xxxxxxxxx>
Commit-Date: Thu May 21 01:42:58 2020 UTC

kernel/fs: rootfs and devfs readlink behavior change

Change-Id: I23ec687965493162594924c32f8ff31e7da396d7
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2753
Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>

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

diff --git a/src/system/kernel/device_manager/devfs.cpp 
b/src/system/kernel/device_manager/devfs.cpp
index 4fc5d3102d..65b9ce7cc6 100644
--- a/src/system/kernel/device_manager/devfs.cpp
+++ b/src/system/kernel/device_manager/devfs.cpp
@@ -1185,10 +1185,11 @@ devfs_read_link(fs_volume* _volume, fs_vnode* _link, 
char* buffer,
        if (!S_ISLNK(link->stream.type))
                return B_BAD_VALUE;
 
-       if (link->stream.u.symlink.length < *_bufferSize)
-               *_bufferSize = link->stream.u.symlink.length;
+       memcpy(buffer, link->stream.u.symlink.path, min_c(*_bufferSize,
+               link->stream.u.symlink.length));
+
+       *_bufferSize = link->stream.u.symlink.length;
 
-       memcpy(buffer, link->stream.u.symlink.path, *_bufferSize);
        return B_OK;
 }
 
diff --git a/src/system/kernel/fs/rootfs.cpp b/src/system/kernel/fs/rootfs.cpp
index b60ef39927..fa255fe461 100644
--- a/src/system/kernel/fs/rootfs.cpp
+++ b/src/system/kernel/fs/rootfs.cpp
@@ -867,10 +867,11 @@ rootfs_read_link(fs_volume* _volume, fs_vnode* _link, 
char* buffer,
        if (!S_ISLNK(link->stream.type))
                return B_BAD_VALUE;
 
-       if (link->stream.symlink.length < *_bufferSize)
-               *_bufferSize = link->stream.symlink.length;
+       memcpy(buffer, link->stream.symlink.path, min_c(*_bufferSize,
+               link->stream.symlink.length));
+
+       *_bufferSize = link->stream.symlink.length;
 
-       memcpy(buffer, link->stream.symlink.path, *_bufferSize);
        return B_OK;
 }
 

############################################################################

Revision:    hrev54234
Commit:      3966c601394f6248c3152e668abb998b9414b6c1
URL:         https://git.haiku-os.org/haiku/commit/?id=3966c601394f
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Wed May 20 19:29:19 2020 UTC
Committer:   waddlesplash <waddlesplash@xxxxxxxxx>
Commit-Date: Thu May 21 01:42:58 2020 UTC

write_overlay: readlink behavior change

Change-Id: I036f3e7f84e4a771846482fe81c2db4c4d718aef
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2754
Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>

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

diff --git 
a/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp 
b/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp
index ba2d1b9f1d..070558fd51 100644
--- a/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp
+++ b/src/add-ons/kernel/file_systems/layers/write_overlay/write_overlay.cpp
@@ -1059,7 +1059,9 @@ OverlayInode::ReadSymlink(char *buffer, size_t 
*bufferSize)
                if (!S_ISLNK(fStat.st_mode))
                        return B_BAD_VALUE;
 
-               return Read(NULL, 0, buffer, bufferSize, false, NULL);
+               status_t result = Read(NULL, 0, buffer, bufferSize, false, 
NULL);
+               *bufferSize = fStat.st_size;
+               return result;
        }
 
        if (fSuperVnode.ops->read_symlink == NULL)


Other related posts:

  • » [haiku-commits] haiku: hrev54234 - in src: system/kernel/fs system/kernel/device_manager add-ons/kernel/file_systems/layers/write_overlay - waddlesplash