mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-08 04:28:01 +02:00
sysdeps: Only open oom_score_adj read/write if we need to write it
If we're running in a sandbox, we might not have write access to oom_score_adj. In the common case where we don't have any special protection from the OOM-killer, we can detect that with only read access, and skip the part where we open it for writing. (We would also not have write access to oom_score_adj if we're running with elevated Linux capabilities while not root, but that should never actually happen for dbus-daemon-launch-helper, which is setuid root for production use or has no capabilities during unit-testing.) Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
parent
ad72e3b9e3
commit
a8006841ce
1 changed files with 23 additions and 3 deletions
|
|
@ -1580,12 +1580,12 @@ _dbus_reset_oom_score_adj (const char **error_str_p)
|
|||
const char *error_str = NULL;
|
||||
|
||||
#ifdef O_CLOEXEC
|
||||
fd = open ("/proc/self/oom_score_adj", O_RDWR | O_CLOEXEC);
|
||||
fd = open ("/proc/self/oom_score_adj", O_RDONLY | O_CLOEXEC);
|
||||
#endif
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
fd = open ("/proc/self/oom_score_adj", O_RDWR);
|
||||
fd = open ("/proc/self/oom_score_adj", O_RDONLY);
|
||||
if (fd >= 0)
|
||||
_dbus_fd_set_close_on_exec (fd);
|
||||
}
|
||||
|
|
@ -1633,6 +1633,26 @@ _dbus_reset_oom_score_adj (const char **error_str_p)
|
|||
goto out;
|
||||
}
|
||||
|
||||
close (fd);
|
||||
#ifdef O_CLOEXEC
|
||||
fd = open ("/proc/self/oom_score_adj", O_WRONLY | O_CLOEXEC);
|
||||
|
||||
if (fd < 0)
|
||||
#endif
|
||||
{
|
||||
fd = open ("/proc/self/oom_score_adj", O_WRONLY);
|
||||
if (fd >= 0)
|
||||
_dbus_fd_set_close_on_exec (fd);
|
||||
}
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
ret = FALSE;
|
||||
error_str = "open(/proc/self/oom_score_adj) for writing";
|
||||
saved_errno = errno;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (pwrite (fd, "0", sizeof (char), 0) < 0)
|
||||
{
|
||||
ret = FALSE;
|
||||
|
|
@ -1653,7 +1673,7 @@ _dbus_reset_oom_score_adj (const char **error_str_p)
|
|||
else
|
||||
{
|
||||
ret = FALSE;
|
||||
error_str = "open(/proc/self/oom_score_adj)";
|
||||
error_str = "open(/proc/self/oom_score_adj) for reading";
|
||||
saved_errno = errno;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue