[PATCH][makedumpfile -R] Promptly return error on truncated regular file.
Aureau, Georges (Kernel Tools ERT)
georges.aureau at hpe.com
Fri Oct 31 13:41:27 PDT 2025
[PATCH][makedumpfile -R] Promptly return error on truncated regular file.
When reaching the end-of-file on a truncated input regular file,
makedumpfile -R is looping for 10 minutes before producing an error.
This is confusing for users. When stdin is a regular file, an improved
behavior is to promptly return an EOF error.
Signed-off-by: Georges Aureau <georges.aureau at hpe.com>
--
diff --git a/makedumpfile.c b/makedumpfile.c
index 12fb0d8..295b3cc 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -5135,6 +5135,21 @@ write_cache_zero(struct cache_data *cd, size_t size)
return write_cache_bufsz(cd);
}
+int
+is_stdin_regular_file(void)
+{
+ struct stat st;
+ static int regular_file = -1;
+ if (regular_file == -1) {
+ if (fstat(STDIN_FILENO, &st) == -1) {
+ regular_file = FALSE;
+ } else {
+ regular_file = S_ISREG(st.st_mode) ? TRUE : FALSE;
+ }
+ }
+ return regular_file;
+}
+
int
read_buf_from_stdin(void *buf, int buf_size)
{
@@ -5154,11 +5169,12 @@ read_buf_from_stdin(void *buf, int buf_size)
} else if (0 == tmp_read_size) {
/*
- * If it cannot get any data from a standard input
+ * If we reach end-of-file on regular file, or
+ * if we cannot get any data from a standard input
* for a long time, break this loop.
*/
tm = time(NULL);
- if (TIMEOUT_STDIN < (tm - last_time)) {
+ if (is_stdin_regular_file() || TIMEOUT_STDIN < (tm - last_time)) {
ERRMSG("Can't get any data from STDIN.\n");
return FALSE;
}
More information about the kexec
mailing list