ulog: avoid accidental /dev/kmsg creation
authorSergiy Kibrik <sakib@meta.ua>
Tue, 18 Aug 2015 06:28:39 +0000 (09:28 +0300)
committerJohn Crispin <blogic@openwrt.org>
Tue, 15 Sep 2015 05:29:59 +0000 (07:29 +0200)
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 <sakib@meta.ua>
Cc: John Crispin <blogic@openwrt.org>
ulog.c

diff --git a/ulog.c b/ulog.c
index 66aad90..296605d 100644 (file)
--- a/ulog.c
+++ b/ulog.c
@@ -90,7 +90,7 @@ static void ulog_kmsg(int priority, const char *fmt, va_list ap)
 {
        FILE *kmsg;
 
 {
        FILE *kmsg;
 
-       if ((kmsg = fopen("/dev/kmsg", "w")) != NULL) {
+       if ((kmsg = fopen("/dev/kmsg", "r+")) != NULL) {
                fprintf(kmsg, "<%u>", priority);
 
                if (_ulog_ident)
                fprintf(kmsg, "<%u>", priority);
 
                if (_ulog_ident)