From 836580a7d690dcdade82ce6bdd1f172af1417d0e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 22 Jun 2021 09:23:54 +0200 Subject: cksum: fix handling of read errors function old new delta cksum_main 377 399 +22 Signed-off-by: Denys Vlasenko --- coreutils/cksum.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'coreutils/cksum.c') diff --git a/coreutils/cksum.c b/coreutils/cksum.c index ecc4385..6b601b7 100644 --- a/coreutils/cksum.c +++ b/coreutils/cksum.c @@ -14,8 +14,9 @@ //config: bool "crc32 (4.1 kb)" //config: default y +// APPLET_NOEXEC:name main location suid_type help //applet:IF_CKSUM(APPLET_NOEXEC(cksum, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum)) -//applet:IF_CKSUM(APPLET_NOEXEC(crc32, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum)) +//applet:IF_CRC32(APPLET_NOEXEC(crc32, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum)) /* bb_common_bufsiz1 usage here is safe wrt NOEXEC: not expecting it to be zeroed. */ //kbuild:lib-$(CONFIG_CKSUM) += cksum.o @@ -31,8 +32,8 @@ /* This is a NOEXEC applet. Be very careful! */ -#define IS_CRC32 (ENABLE_CRC32 && (!ENABLE_CKSUM || applet_name[1] == 'r')) #define IS_CKSUM (ENABLE_CKSUM && (!ENABLE_CRC32 || applet_name[1] == 'k')) +#define IS_CRC32 (ENABLE_CRC32 && (!ENABLE_CKSUM || applet_name[1] == 'r')) int cksum_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int cksum_main(int argc UNUSED_PARAM, char **argv) @@ -51,7 +52,8 @@ int cksum_main(int argc UNUSED_PARAM, char **argv) do { uint32_t crc; off_t filesize; - int fd = open_or_warn_stdin(*argv ? *argv : bb_msg_standard_input); + const char *fname = *argv ? *argv : bb_msg_standard_input; + int fd = open_or_warn_stdin(fname); if (fd < 0) { exit_code = EXIT_FAILURE; @@ -63,6 +65,8 @@ int cksum_main(int argc UNUSED_PARAM, char **argv) #define read_buf bb_common_bufsiz1 for (;;) { int bytes_read = safe_read(fd, read_buf, COMMON_BUFSIZE); + if (bytes_read < 0) + bb_simple_perror_msg_and_die(fname); if (bytes_read > 0) { filesize += bytes_read; } else { -- cgit v1.1