Skip to content

Fix directfs restore for deleted regular file when read handle is not available #11919

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 20, 2025

Conversation

copybara-service[bot]
Copy link

@copybara-service copybara-service bot commented Jul 12, 2025

Fix directfs restore for deleted regular file when read handle is not available

In such a situation, we can not rely on traditional methods (like openHandle())
to open a readable handle. This is because, for directfs to open a handle, it
needs to re-walk the file via the parent using openat(parentFD, name). This
does not work for deleted files, it will fail with ENOENT. runsc gofer works
around this by using /proc/self/fd/ to re-open the control FD in the desired
mode. However, the sentry does not have access to any procfs instance (for
security). See fcbc289 ("runsc: umount /proc in the sandbox namespace").

This change makes directfs just use the control FD to fetch file data. The
control FD should not be used for IO. We make an exception here for S/R.

Fixes #11903

@copybara-service copybara-service bot added the exported Issue was exported automatically label Jul 12, 2025
@copybara-service copybara-service bot force-pushed the test/cl782379453 branch 4 times, most recently from aff4c90 to e226211 Compare July 20, 2025 02:57
… available

In such a situation, we can not rely on traditional methods (like openHandle())
to open a readable handle. This is because, for directfs to open a handle, it
needs to re-walk the file via the parent using openat(parentFD, name). This
does not work for deleted files, it will fail with ENOENT. runsc gofer works
around this by using /proc/self/fd/ to re-open the control FD in the desired
mode. However, the sentry does not have access to any procfs instance (for
security). See fcbc289 ("runsc: umount /proc in the sandbox namespace").

This change makes directfs just use the control FD to fetch file data. The
control FD should not be used for IO. We make an exception here for S/R.

Fixes #11903

PiperOrigin-RevId: 785037982
@copybara-service copybara-service bot merged commit 9ea209f into master Jul 20, 2025
@copybara-service copybara-service bot deleted the test/cl782379453 branch July 20, 2025 03:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
exported Issue was exported automatically
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Checkpoint failed with directfs: "failed to open read handle for deleted file"
1 participant