chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core/load-fragment: fix (potential) bad memory access
[elogind.git]
/
src
/
core
/
load-fragment.c
diff --git
a/src/core/load-fragment.c
b/src/core/load-fragment.c
index 01f94844a6e434294d0f0661fa3503b67db9c868..6933e1a21ecca04111e39ddcb08cbb764a45b03f 100644
(file)
--- a/
src/core/load-fragment.c
+++ b/
src/core/load-fragment.c
@@
-1101,15
+1101,22
@@
int config_parse_exec_mount_flags(
assert(rvalue);
assert(data);
assert(rvalue);
assert(data);
- FOREACH_WORD_QUOTED(w, l, rvalue, state) {
- if (strncmp(w, "shared", MAX(l, 6U)) == 0)
+ FOREACH_WORD_SEPARATOR(w, l, rvalue, ", ", state) {
+ char _cleanup_free_ *t;
+
+ t = strndup(w, l);
+ if (!t)
+ return -ENOMEM;
+
+ if (streq(t, "shared"))
flags |= MS_SHARED;
flags |= MS_SHARED;
- else if (str
ncmp(w, "slave", MAX(l, 5U)) == 0
)
+ else if (str
eq(t, "slave")
)
flags |= MS_SLAVE;
flags |= MS_SLAVE;
- else if (str
ncmp(w, "private", MAX(l, 7U)) == 0
)
+ else if (str
eq(w, "private")
)
flags |= MS_PRIVATE;
else {
flags |= MS_PRIVATE;
else {
- log_error("[%s:%u] Failed to parse mount flags, ignoring: %s", filename, line, rvalue);
+ log_error("[%s:%u] Failed to parse mount flag %s, ignoring: %s",
+ filename, line, t, rvalue);
return 0;
}
}
return 0;
}
}