|
|
1a3471 |
diff -ru firefox-78.3.0/security/sandbox/linux/SandboxFilter.cpp firefox-78.4.0/security/sandbox/linux/SandboxFilter.cpp
|
|
|
1a3471 |
--- firefox-78.3.0/security/sandbox/linux/SandboxFilter.cpp 2020-09-14 21:21:02.000000000 +0200
|
|
|
1a3471 |
+++ firefox-78.4.0/security/sandbox/linux/SandboxFilter.cpp 2020-10-14 11:34:48.000000000 +0200
|
|
|
1a3471 |
@@ -243,14 +243,21 @@
|
|
|
1a3471 |
auto path = reinterpret_cast<const char*>(aArgs.args[1]);
|
|
|
1a3471 |
auto buf = reinterpret_cast<statstruct*>(aArgs.args[2]);
|
|
|
1a3471 |
auto flags = static_cast<int>(aArgs.args[3]);
|
|
|
1a3471 |
+
|
|
|
1a3471 |
+ if (fd != AT_FDCWD && (flags & AT_EMPTY_PATH) != 0 &&
|
|
|
1a3471 |
+ strcmp(path, "") == 0) {
|
|
|
1a3471 |
+ return ConvertError(fstatsyscall(fd, buf));
|
|
|
1a3471 |
+ }
|
|
|
1a3471 |
+
|
|
|
1a3471 |
if (fd != AT_FDCWD && path[0] != '/') {
|
|
|
1a3471 |
SANDBOX_LOG_ERROR("unsupported fd-relative fstatat(%d, \"%s\", %p, %d)",
|
|
|
1a3471 |
fd, path, buf, flags);
|
|
|
1a3471 |
return BlockedSyscallTrap(aArgs, nullptr);
|
|
|
1a3471 |
}
|
|
|
1a3471 |
- if ((flags & ~AT_SYMLINK_NOFOLLOW) != 0) {
|
|
|
1a3471 |
+ if ((flags & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT)) != 0) {
|
|
|
1a3471 |
SANDBOX_LOG_ERROR("unsupported flags %d in fstatat(%d, \"%s\", %p, %d)",
|
|
|
1a3471 |
- (flags & ~AT_SYMLINK_NOFOLLOW), fd, path, buf, flags);
|
|
|
1a3471 |
+ (flags & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT)), fd,
|
|
|
1a3471 |
+ path, buf, flags);
|
|
|
1a3471 |
return BlockedSyscallTrap(aArgs, nullptr);
|
|
|
1a3471 |
}
|
|
|
1a3471 |
return (flags & AT_SYMLINK_NOFOLLOW) == 0 ? broker->Stat(path, buf)
|