chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
journald: fix another bad memory access
[elogind.git]
/
src
/
journal
/
journald.c
diff --git
a/src/journal/journald.c
b/src/journal/journald.c
index 8f00aef5bd41a313994b65629677d57bd5fccd9a..17aac8877b778f663669617e16097bc6d4456aa2 100644
(file)
--- a/
src/journal/journald.c
+++ b/
src/journal/journald.c
@@
-313,7
+313,7
@@
static JournalFile* find_journal(Server *s, uid_t uid) {
journal_file_close(f);
}
journal_file_close(f);
}
- r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->system_journal, &f);
+ r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640,
&s->system_metrics,
s->system_journal, &f);
free(p);
if (r < 0)
free(p);
if (r < 0)
@@
-478,6
+478,10
@@
static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
server_rotate(s);
server_vacuum(s);
vacuumed = true;
server_rotate(s);
server_vacuum(s);
vacuumed = true;
+
+ f = find_journal(s, uid);
+ if (!f)
+ return;
}
for (;;) {
}
for (;;) {
@@
-513,6
+517,10
@@
static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
server_vacuum(s);
vacuumed = true;
server_vacuum(s);
vacuumed = true;
+ f = find_journal(s, uid);
+ if (!f)
+ return;
+
log_info("Retrying write.");
}
}
log_info("Retrying write.");
}
}
@@
-2005,13
+2013,10
@@
static int system_journal_open(Server *s) {
if (!fn)
return -ENOMEM;
if (!fn)
return -ENOMEM;
- r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, NULL, &s->system_journal);
+ r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640,
&s->system_metrics,
NULL, &s->system_journal);
free(fn);
if (r >= 0) {
free(fn);
if (r >= 0) {
- journal_default_metrics(&s->system_metrics, s->system_journal->fd);
-
- s->system_journal->metrics = s->system_metrics;
s->system_journal->compress = s->compress;
server_fix_perms(s, s->system_journal, 0);
s->system_journal->compress = s->compress;
server_fix_perms(s, s->system_journal, 0);
@@
-2037,7
+2042,7
@@
static int system_journal_open(Server *s) {
* if it already exists, so that we can flush
* it into the system journal */
* if it already exists, so that we can flush
* it into the system journal */
- r = journal_file_open(fn, O_RDWR, 0640, NULL, &s->runtime_journal);
+ r = journal_file_open(fn, O_RDWR, 0640,
&s->runtime_metrics,
NULL, &s->runtime_journal);
free(fn);
if (r < 0) {
free(fn);
if (r < 0) {
@@
-2053,7
+2058,7
@@
static int system_journal_open(Server *s) {
* it if necessary. */
(void) mkdir_parents(fn, 0755);
* it if necessary. */
(void) mkdir_parents(fn, 0755);
- r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, NULL, &s->runtime_journal);
+ r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640,
&s->runtime_metrics,
NULL, &s->runtime_journal);
free(fn);
if (r < 0) {
free(fn);
if (r < 0) {
@@
-2063,9
+2068,6
@@
static int system_journal_open(Server *s) {
}
if (s->runtime_journal) {
}
if (s->runtime_journal) {
- journal_default_metrics(&s->runtime_metrics, s->runtime_journal->fd);
-
- s->runtime_journal->metrics = s->runtime_metrics;
s->runtime_journal->compress = s->compress;
server_fix_perms(s, s->runtime_journal, 0);
s->runtime_journal->compress = s->compress;
server_fix_perms(s, s->runtime_journal, 0);