Error KernelHandle::Init(int open_flags) {
handle_attr_.flags = open_flags;
- if (!node_->CanOpen(open_flags)) {
+ if ((open_flags & O_CREAT) == 0 && !node_->CanOpen(open_flags)) {
return EACCES;
}
+ // Directories can only be opened read-only.
+ if ((open_flags & 3) != O_RDONLY && node_->IsaDir()) {
+ return EISDIR;
+ }
+
if (open_flags & O_APPEND) {
Error error = node_->GetSize(&handle_attr_.offs);
if (error)