diff --git a/fs/kernel_read_file.c b/fs/kernel_read_file.c
index 87aac4c72c37da2f82cad443279d66f0b5a2cf8c..1b07550485b96415f0a79a7029b10bf5d78c643e 100644
--- a/fs/kernel_read_file.c
+++ b/fs/kernel_read_file.c
@@ -178,7 +178,7 @@ int kernel_read_file_from_fd(int fd, loff_t offset, void **buf,
 	struct fd f = fdget(fd);
 	int ret = -EBADF;
 
-	if (!f.file)
+	if (!f.file || !(f.file->f_mode & FMODE_READ))
 		goto out;
 
 	ret = kernel_read_file(f.file, offset, buf, buf_size, file_size, id);