diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php
index 21a5558ded3..45314fdd532 100644
--- a/apps/dav/lib/RootCollection.php
+++ b/apps/dav/lib/RootCollection.php
@@ -175,6 +175,7 @@ class RootCollection extends SimpleCollection {
 			\OC::$server->query(CleanupService::class),
 			$rootFolder,
 			$userSession,
+			$logger,
 		);
 		$uploadCollection->disableListing = $disableListing;
 
diff --git a/apps/dav/lib/Upload/RootCollection.php b/apps/dav/lib/Upload/RootCollection.php
index b4f3d791781..4ffdbe6dcf7 100644
--- a/apps/dav/lib/Upload/RootCollection.php
+++ b/apps/dav/lib/Upload/RootCollection.php
@@ -28,6 +28,7 @@ namespace OCA\DAV\Upload;
 
 use OCP\Files\IRootFolder;
 use OCP\IUserSession;
+use Psr\Log\LoggerInterface;
 use Sabre\DAVACL\AbstractPrincipalCollection;
 use Sabre\DAVACL\PrincipalBackend;
 
@@ -37,6 +38,7 @@ class RootCollection extends AbstractPrincipalCollection {
 		private CleanupService $cleanupService,
 		private IRootFolder $rootFolder,
 		private IUserSession $userSession,
+		private LoggerInterface $logger,
 	) {
 		parent::__construct($principalBackend, $principalPrefix);
 	}
@@ -45,7 +47,7 @@ class RootCollection extends AbstractPrincipalCollection {
 	 * @inheritdoc
 	 */
 	public function getChildForPrincipal(array $principalInfo): UploadHome {
-		return new UploadHome($principalInfo, $this->cleanupService, $this->rootFolder, $this->userSession);
+		return new UploadHome($principalInfo, $this->cleanupService, $this->rootFolder, $this->userSession, $this->logger);
 	}
 
 	/**
diff --git a/apps/dav/lib/Upload/UploadHome.php b/apps/dav/lib/Upload/UploadHome.php
index 367462ae17c..4dc94078e0e 100644
--- a/apps/dav/lib/Upload/UploadHome.php
+++ b/apps/dav/lib/Upload/UploadHome.php
@@ -27,10 +27,12 @@ namespace OCA\DAV\Upload;
 
 use OC\Files\View;
 use OCA\DAV\Connector\Sabre\Directory;
+use OCP\Constants;
 use OCP\Files\Folder;
 use OCP\Files\IRootFolder;
 use OCP\Files\NotFoundException;
 use OCP\IUserSession;
+use Psr\Log\LoggerInterface;
 use Sabre\DAV\Exception\Forbidden;
 use Sabre\DAV\ICollection;
 
@@ -42,6 +44,7 @@ class UploadHome implements ICollection {
 		private CleanupService $cleanupService,
 		private IRootFolder $rootFolder,
 		private IUserSession $userSession,
+		private LoggerInterface $logger,
 	) {
 	}
 
@@ -109,6 +112,12 @@ class UploadHome implements ICollection {
 
 	private function impl(): Directory {
 		$folder = $this->getUploadFolder();
+		if (!$folder->isCreatable()) {
+			$user = $this->userSession->getUser();
+			$this->logger->warning('Upload home not writable for ' . $user->getUID() . ', attempting to fix', ['permissions' => $folder->getPermissions()]);
+			$cache = $folder->getStorage()->getCache();
+			$cache->update($folder->getId(), ['permissions', Constants::PERMISSION_ALL]);
+		}
 		$view = new View($folder->getPath());
 		return new Directory($view, $folder);
 	}