From 240f1a0e91e30e652ef225c2956c7c5a6e892072 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 6 Mar 2025 09:37:05 -0500 Subject: [PATCH] kernel/devfs: Check whether the node is a directory in devfs_open. Same checks as other filesystems. Fixes "cp file /dev/some/block/device". Change-Id: Ic4bd04972247b94ac4eaa6e211fe6cb1c53f3975 Reviewed-on: https://review.haiku-os.org/c/haiku/+/9084 Reviewed-by: waddlesplash --- src/system/kernel/device_manager/devfs.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/system/kernel/device_manager/devfs.cpp b/src/system/kernel/device_manager/devfs.cpp index ecdc72a636..3730488d48 100644 --- a/src/system/kernel/device_manager/devfs.cpp +++ b/src/system/kernel/device_manager/devfs.cpp @@ -1113,6 +1113,11 @@ devfs_open(fs_volume* _volume, fs_vnode* _vnode, int openMode, struct devfs_cookie* cookie; status_t status = B_OK; + if (S_ISDIR(vnode->stream.type) && (openMode & O_RWMASK) != O_RDONLY) + return B_IS_A_DIRECTORY; + if ((openMode & O_DIRECTORY) != 0 && !S_ISDIR(vnode->stream.type)) + return B_NOT_A_DIRECTORY; + cookie = (struct devfs_cookie*)malloc(sizeof(struct devfs_cookie)); if (cookie == NULL) return B_NO_MEMORY;