userlandfs: Fix GetVNodeName

- VNode names are now allowed to have a length of 1. This is
common for Windows drives mounted through a shared filesystem.
- Empty VNode names are now checked from the userland side,
preventing the kernel driver to reject and not ACK a false
B_OK from the userland server.

Change-Id: If0a6fcea1387367d1492c9b94c62c03e381ce1c1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6276
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Automation <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
Trung Nguyen
2023-03-27 17:57:27 +00:00
committed by waddlesplash
parent 7beba92388
commit 35212f7bef
2 changed files with 4 additions and 1 deletions
@@ -1045,7 +1045,7 @@ Volume::GetVNodeName(void* _node, char* buffer, size_t bufferSize)
char* readBuffer = (char*)reply->buffer.GetData();
size_t nameLen = reply->buffer.GetSize();
nameLen = strnlen(readBuffer, nameLen);
if (nameLen <= 1 || nameLen >= bufferSize)
if (nameLen <= 0 || nameLen >= bufferSize)
RETURN_ERROR(B_BAD_DATA);
memcpy(buffer, readBuffer, nameLen);
@@ -959,6 +959,9 @@ FUSEVolume::GetVNodeName(void* _node, char* buffer, size_t bufferSize)
if (entry == NULL)
RETURN_ERROR(B_ENTRY_NOT_FOUND);
if (entry->name == NULL || entry->name[0] == '\0')
RETURN_ERROR(B_BAD_DATA);
if (strlcpy(buffer, entry->name, bufferSize) >= bufferSize)
RETURN_ERROR(B_NAME_TOO_LONG);