Skip to content
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

conmon: do not create oom file under cwd #514

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 24 additions & 17 deletions src/cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ static void setup_oom_handling_cgroup_v2(int pid);
static void setup_oom_handling_cgroup_v1(int pid);
static gboolean oom_cb_cgroup_v2(int fd, GIOCondition condition, G_GNUC_UNUSED gpointer user_data);
static gboolean oom_cb_cgroup_v1(int fd, GIOCondition condition, G_GNUC_UNUSED gpointer user_data);
static int write_oom_files();
static int create_oom_files();
static int create_oom_file(const char *base_path);

void setup_oom_handling(int pid)
{
Expand Down Expand Up @@ -261,7 +262,7 @@ static gboolean oom_cb_cgroup_v1(int fd, GIOCondition condition, gpointer user_d

/* we catch the two other cases here, both of which are OOM kill events */
ninfo("OOM event received");
write_oom_files();
create_oom_files();

return G_SOURCE_CONTINUE;
}
Expand Down Expand Up @@ -306,33 +307,39 @@ gboolean check_cgroup2_oom()
continue;

if (counter != last_counter) {
if (write_oom_files() == 0)
if (create_oom_files() == 0)
last_counter = counter;
}
return G_SOURCE_CONTINUE;
}
return G_SOURCE_REMOVE;
}

/* write the appropriate files to tell the caller there was an oom event
* this can be used for v1 and v2 OOMS
/* create the appropriate files to tell the caller there was an oom event
* this can be used for v1 and v2 OOMs
* returns 0 on success, negative value on failure
*/
static int write_oom_files()
static int create_oom_files()
{
ninfo("OOM received");
if (opt_persist_path) {
_cleanup_free_ char *ctr_oom_file_path = g_build_filename(opt_persist_path, "oom", NULL);
_cleanup_close_ int ctr_oom_fd = open(ctr_oom_file_path, O_CREAT | O_CLOEXEC, 0666);
if (ctr_oom_fd < 0) {
nwarn("Failed to write oom file");
}
}
_cleanup_close_ int oom_fd = open("oom", O_CREAT | O_CLOEXEC, 0666);
if (oom_fd < 0) {
nwarn("Failed to write oom file");
int r = 0;
r |= create_oom_file(opt_persist_path);
r |= create_oom_file(opt_bundle_path);
return r;
}

static int create_oom_file(const char *base_path)
giuseppe marked this conversation as resolved.
Show resolved Hide resolved
{
if (base_path == NULL || base_path[0] == '\0')
return 0;

_cleanup_free_ char *ctr_oom_file_path = g_build_filename(base_path, "oom", NULL);
_cleanup_close_ int ctr_oom_fd = open(ctr_oom_file_path, O_CREAT | O_CLOEXEC, 0666);
if (ctr_oom_fd < 0) {
nwarnf("Failed to write oom file to the %s path", base_path);
return -1;
}
return oom_fd >= 0 ? 0 : -1;
return 0;
}

#endif
Loading