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

Reply via email to