2020-03-12 20:13:31

by Bruno Meneguele

[permalink] [raw]
Subject: [PATCH] net/bpfilter: fix dprintf usage for logging into /dev/kmsg

The bpfilter UMH code was recently changed to log its informative messages to
/dev/kmsg, however this interface doesn't support SEEK_CUR yet, used by
dprintf(). As result dprintf() returns -EINVAL and doesn't log anything.

Although there already had some discussions about supporting SEEK_CUR into
/dev/kmsg in the past, it wasn't concluded. Considering the only
user of that interface from userspace perspective inside the kernel is the
bpfilter UMH (userspace) module it's better to correct it here instead of
waiting a conclusion on the interface changes.

Signed-off-by: Bruno Meneguele <[email protected]>
---
net/bpfilter/main.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/net/bpfilter/main.c b/net/bpfilter/main.c
index 77396a098fbe..efea4874743e 100644
--- a/net/bpfilter/main.c
+++ b/net/bpfilter/main.c
@@ -10,7 +10,7 @@
#include <asm/unistd.h>
#include "msgfmt.h"

-int debug_fd;
+FILE *debug_f;

static int handle_get_cmd(struct mbox_request *cmd)
{
@@ -35,9 +35,10 @@ static void loop(void)
struct mbox_reply reply;
int n;

+ fprintf(debug_f, "testing the buffer\n");
n = read(0, &req, sizeof(req));
if (n != sizeof(req)) {
- dprintf(debug_fd, "invalid request %d\n", n);
+ fprintf(debug_f, "invalid request %d\n", n);
return;
}

@@ -47,7 +48,7 @@ static void loop(void)

n = write(1, &reply, sizeof(reply));
if (n != sizeof(reply)) {
- dprintf(debug_fd, "reply failed %d\n", n);
+ fprintf(debug_f, "reply failed %d\n", n);
return;
}
}
@@ -55,9 +56,10 @@ static void loop(void)

int main(void)
{
- debug_fd = open("/dev/kmsg", 00000002);
- dprintf(debug_fd, "Started bpfilter\n");
+ debug_f = fopen("/dev/kmsg", "w");
+ setvbuf(debug_f, 0, _IOLBF, 0);
+ fprintf(debug_f, "Started bpfilter\n");
loop();
- close(debug_fd);
+ fclose(debug_f);
return 0;
}
--
2.24.1


2020-03-12 22:35:39

by David Miller

[permalink] [raw]
Subject: Re: [PATCH] net/bpfilter: fix dprintf usage for logging into /dev/kmsg

From: Bruno Meneguele <[email protected]>
Date: Thu, 12 Mar 2020 17:12:40 -0300

> The bpfilter UMH code was recently changed to log its informative messages to
> /dev/kmsg, however this interface doesn't support SEEK_CUR yet, used by
> dprintf(). As result dprintf() returns -EINVAL and doesn't log anything.
>
> Although there already had some discussions about supporting SEEK_CUR into
> /dev/kmsg in the past, it wasn't concluded. Considering the only
> user of that interface from userspace perspective inside the kernel is the
> bpfilter UMH (userspace) module it's better to correct it here instead of
> waiting a conclusion on the interface changes.
>
> Signed-off-by: Bruno Meneguele <[email protected]>

Please repost this with a proper Fixes: tag.

Thank you.