From a37d4f406a4c6d39dbd6ff137dcd5a8047397d73 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Sat, 18 Nov 2023 16:32:55 +0100 Subject: lib: Fix FUSE output on Raspbian For some reason, 'ls' on raspbian invoked the fuse readdir() in a loop where the first call had fuse_file_info * info set to NULL and subsequent calls had info->nonseekable set to 1. Since we don't check the value the info struct, this caused an infinite loop when trying to list the contents of the fuse filesystem subdirectories of /tmp/ouroboros/. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/ipcpd/ipcp.c | 2 +- src/lib/rib.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index 5c1ffd03..617dd11f 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -176,7 +176,7 @@ static int ipcp_rib_readdir(char *** buf) while (info[i] != NULL) { (*buf)[i] = strdup(info[i]); - if (*buf == NULL) + if ((*buf)[i] == NULL) goto fail_dup; i++; } diff --git a/src/lib/rib.c b/src/lib/rib.c index 22b57fb7..78ae82ef 100644 --- a/src/lib/rib.c +++ b/src/lib/rib.c @@ -139,6 +139,10 @@ static int rib_readdir(const char * path, (void) offset; (void) info; + /* Fix ls calling readdir in an infinite loop on raspbian. */ + if (info != NULL && info->nonseekable != 0) + return -ENOENT; + filler(buf, ".", NULL, 0); filler(buf, "..", NULL, 0); -- cgit v1.2.3