commit: 8ea6e9f38d660dcc920717b6944b85fa669d562f
parent b49d3dbb5062e097365381c9a1bc623a31db662c
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 28 Jun 2025 05:11:00 +0200
cmd/df: limit mnt_type include/exclude to 128 rather than 4096
Diffstat:
M | cmd/df.c | 31 | +++++++++++++++++++++++++++++-- |
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/cmd/df.c b/cmd/df.c
@@ -19,6 +19,15 @@
#include <sys/statvfs.h>
#include <unistd.h> // getopt
+#define STR(s) #s
+
+/*
+ * Rough idea of builtin filesystems in Linux 6.12.31:
+ * $ grep -RI '\bregister_filesystem(' /usr/src/linux/fs/ | wc -l
+ * 79
+ */
+#define DF_MNT_TYPE_MAX 128
+
// Grabbed from OpenRC rc-functions.sh
// clang-format off
static const char *net_fs_list[] = {
@@ -46,10 +55,10 @@ main(int argc, char *argv[])
int fs_col_width = 20;
size_t excluded_count = 0;
- char *excluded[4096];
+ static char *excluded[DF_MNT_TYPE_MAX];
size_t only_count = 0;
- char *only[4096];
+ static char *only[DF_MNT_TYPE_MAX];
for(int c = -1; (c = getopt_nolong(argc, argv, ":ahilPkTt:x:")) != -1;)
{
@@ -80,9 +89,27 @@ main(int argc, char *argv[])
opt_T = true;
break;
case 't':
+ if(only_count >= (DF_MNT_TYPE_MAX - 1))
+ {
+ fprintf(
+ stderr,
+ "%s: error: Can only select up to " STR(DF_MNT_TYPE_MAX) " mnt_types via option `-t`\n",
+ argv0);
+ return 1;
+ }
+
only[only_count++] = optarg;
break;
case 'x':
+ if(excluded_count >= (DF_MNT_TYPE_MAX - 1))
+ {
+ fprintf(
+ stderr,
+ "%s: error: Can only select up to " STR(DF_MNT_TYPE_MAX) " mnt_types via option `-x`\n",
+ argv0);
+ return 1;
+ }
+
excluded[excluded_count++] = optarg;
break;
case ':':