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)