Race is possible in ulog_kmsg(): if no /dev/kmsg exists (e.g. while /dev gets re-mounted) regular file created instead. >From this point system goes without kernel logger: special character file can't be created anymore, all clients keep overwriting single message in regular file.
To avoid this we open file in "r+" mode which doesn't create file if it's not found. Signed-off-by: Sergiy Kibrik <[email protected]> Cc: John Crispin <[email protected]> --- ulog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ulog.c b/ulog.c index 776a0c4..80b67ac 100644 --- a/ulog.c +++ b/ulog.c @@ -90,7 +90,7 @@ static void ulog_kmsg(int priority, const char *fmt, va_list ap) { FILE *kmsg; - if ((kmsg = fopen("/dev/kmsg", "w")) != NULL) { + if ((kmsg = fopen("/dev/kmsg", "r+")) != NULL) { fprintf(kmsg, "<%u>", priority); if (_ulog_ident) -- 1.9.1 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
