From 7bb8da77e890d738900da75266786ea9a55df961 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 11 Aug 2022 23:45:21 -0400 Subject: [PATCH] Avoid potential NULL dereference when argv[0] Addresses-Coverity-Bug: 1500772 Addresses-Coverity-Bug: 1500769 Addresses-Coverity-Bug: 1500767 Addresses-Coverity-Bug: 1500758 Addresses-Coverity-Bug: 1500756 Signed-off-by: Theodore Ts'o --- e2fsck/unix.c | 8 ++++++-- misc/badblocks.c | 2 ++ misc/dumpe2fs.c | 3 ++- misc/e2image.c | 2 ++ misc/lsattr.c | 2 ++ misc/tune2fs.c | 2 ++ resize/main.c | 4 +++- 7 files changed, 19 insertions(+), 4 deletions(-) diff --git a/e2fsck/unix.c b/e2fsck/unix.c index 3708a4d..4b6fd09 100644 --- a/e2fsck/unix.c +++ b/e2fsck/unix.c @@ -74,11 +74,15 @@ int journal_enable_debug = -1; static void usage(e2fsck_t ctx) { + char *program_name = "e2fsck"; + + if (ctx && ctx->program_name) + program_name = ctx>program_name; fprintf(stderr, _("Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n" "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n" "\t\t[-E extended-options] [-z undo_file] device\n"), - ctx->program_name); + program_name); fprintf(stderr, "%s", _("\nEmergency help:\n" " -p Automatic repair (no questions)\n" @@ -849,7 +853,7 @@ static errcode_t PRS(int argc, char *argv[], e2fsck_t *ret_ctx) if (argc && *argv) ctx->program_name = *argv; else - ctx->program_name = "e2fsck"; + usage(NULL); phys_mem_kb = get_memory_size() / 1024; ctx->readahead_kb = ~0ULL; diff --git a/misc/badblocks.c b/misc/badblocks.c index afeb3da..3dedf76 100644 --- a/misc/badblocks.c +++ b/misc/badblocks.c @@ -1093,6 +1093,8 @@ int main (int argc, char ** argv) if (argc && *argv) program_name = *argv; + else + usage(); while ((c = getopt (argc, argv, "b:d:e:fi:o:svwnc:p:h:t:BX")) != EOF) { switch (c) { case 'b': diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c index ef6d1cb..7c080ed 100644 --- a/misc/dumpe2fs.c +++ b/misc/dumpe2fs.c @@ -619,7 +619,8 @@ int main (int argc, char ** argv) mmp_check = 1; header_only = 1; } - } + } else + usage(); if (!mmp_check) fprintf(stderr, "dumpe2fs %s (%s)\n", E2FSPROGS_VERSION, diff --git a/misc/e2image.c b/misc/e2image.c index 207c303..f9357aa 100644 --- a/misc/e2image.c +++ b/misc/e2image.c @@ -1517,6 +1517,8 @@ int main (int argc, char ** argv) E2FSPROGS_DATE); if (argc && *argv) program_name = *argv; + else + usage(); add_error_table(&et_ext2_error_table); while ((c = getopt(argc, argv, "b:B:nrsIQafo:O:pc")) != EOF) switch (c) { diff --git a/misc/lsattr.c b/misc/lsattr.c index 55080e9..72f4c68 100644 --- a/misc/lsattr.c +++ b/misc/lsattr.c @@ -187,6 +187,8 @@ int main (int argc, char ** argv) #endif if (argc && *argv) program_name = *argv; + else + usage(); while ((c = getopt (argc, argv, "RVadlvp")) != EOF) switch (c) { diff --git a/misc/tune2fs.c b/misc/tune2fs.c index 7f023ad..64a456a 100644 --- a/misc/tune2fs.c +++ b/misc/tune2fs.c @@ -2951,6 +2951,8 @@ int tune2fs_main(int argc, char **argv) #endif if (argc && *argv) program_name = *argv; + else + usage(); add_error_table(&et_ext2_error_table); #ifdef CONFIG_BUILD_FINDFS diff --git a/resize/main.c b/resize/main.c index b745c58..94f5ec6 100644 --- a/resize/main.c +++ b/resize/main.c @@ -49,7 +49,7 @@ static void usage (char *prog) fprintf (stderr, _("Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] " "[-p] device [-b|-s|new_size] [-S RAID-stride] " "[-z undo_file]\n\n"), - prog); + prog ? prog : "resize2fs"); exit (1); } @@ -287,6 +287,8 @@ int main (int argc, char ** argv) E2FSPROGS_VERSION, E2FSPROGS_DATE); if (argc && *argv) program_name = *argv; + else + usage(NULL); while ((c = getopt(argc, argv, "d:fFhMPpS:bsz:")) != EOF) { switch (c) { -- 1.8.3.1