Blame kexec-tools-2.0.23-02-_PATCH_v2_2_3_use_pointer_arithmetics_for_dump_dmesg.patch

Philipp Rudo 92f7d2
 commit e1d2e5302b016c6f7942f46ffa27aa31326686c5
Philipp Rudo 92f7d2
 Author: Philipp Rudo <prudo@redhat.com>
Philipp Rudo 92f7d2
 Date:   Mon Mar 14 17:04:30 2022 +0100
Philipp Rudo 92f7d2
 
Philipp Rudo 92f7d2
     [PATCH v2 2/3] use pointer arithmetics for dump_dmesg
Philipp Rudo 92f7d2
     
Philipp Rudo 92f7d2
     When parsing the printk buffer for the old printk mechanism (> v3.5.0+ and
Philipp Rudo 92f7d2
     < 5.10.0) a log entry is currently specified by the offset into the
Philipp Rudo 92f7d2
     buffer where the entry starts. Change this to use a pointers instead.
Philipp Rudo 92f7d2
     This is done in preparation for using the new cycle detection mechanism.
Philipp Rudo 92f7d2
     
Philipp Rudo 92f7d2
     Signed-off-by: Philipp Rudo <prudo@redhat.com>
Philipp Rudo 92f7d2
     Reviewed-and-tested-by: Dave Wysochanski <dwysocha@redhat.com>
Philipp Rudo 92f7d2
     Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
Philipp Rudo 92f7d2
 
Philipp Rudo 92f7d2
 diff --git a/makedumpfile-1.7.0/makedumpfile.c b/makedumpfile-1.7.0/makedumpfile.c
Philipp Rudo 92f7d2
 index 7ed9756a8c43ae4a2b6770e86dc81763796c2187..e72dba219eec198ec865045562f39a14b5a092eb 100644
Philipp Rudo 92f7d2
 --- a/makedumpfile-1.7.0/makedumpfile.c
Philipp Rudo 92f7d2
 +++ b/makedumpfile-1.7.0/makedumpfile.c
Philipp Rudo 92f7d2
 @@ -5482,13 +5482,10 @@ dump_log_entry(char *logptr, int fp, const char *file_name)
Philipp Rudo 92f7d2
   * get log record by index; idx must point to valid message.
Philipp Rudo 92f7d2
   */
Philipp Rudo 92f7d2
  static char *
Philipp Rudo 92f7d2
 -log_from_idx(unsigned int idx, char *logbuf)
Philipp Rudo 92f7d2
 +log_from_ptr(char *logptr, char *logbuf)
Philipp Rudo 92f7d2
  {
Philipp Rudo 92f7d2
 -	char *logptr;
Philipp Rudo 92f7d2
  	unsigned int msglen;
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
 -	logptr = logbuf + idx;
Philipp Rudo 92f7d2
 -
Philipp Rudo 92f7d2
  	/*
Philipp Rudo 92f7d2
  	 * A length == 0 record is the end of buffer marker.
Philipp Rudo 92f7d2
  	 * Wrap around and return the message at the start of
Philipp Rudo 92f7d2
 @@ -5497,19 +5494,16 @@ log_from_idx(unsigned int idx, char *logbuf)
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
  	msglen = USHORT(logptr + OFFSET(printk_log.len));
Philipp Rudo 92f7d2
  	if (!msglen)
Philipp Rudo 92f7d2
 -		logptr = logbuf;
Philipp Rudo 92f7d2
 +		return logbuf;
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
  	return logptr;
Philipp Rudo 92f7d2
  }
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
 -static long
Philipp Rudo 92f7d2
 -log_next(unsigned int idx, char *logbuf)
Philipp Rudo 92f7d2
 +static void *
Philipp Rudo 92f7d2
 +log_next(void *logptr, void *logbuf)
Philipp Rudo 92f7d2
  {
Philipp Rudo 92f7d2
 -	char *logptr;
Philipp Rudo 92f7d2
  	unsigned int msglen;
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
 -	logptr = logbuf + idx;
Philipp Rudo 92f7d2
 -
Philipp Rudo 92f7d2
  	/*
Philipp Rudo 92f7d2
  	 * A length == 0 record is the end of buffer marker. Wrap around and
Philipp Rudo 92f7d2
  	 * read the message at the start of the buffer as *this* one, and
Philipp Rudo 92f7d2
 @@ -5519,10 +5513,10 @@ log_next(unsigned int idx, char *logbuf)
Philipp Rudo 92f7d2
  	msglen = USHORT(logptr + OFFSET(printk_log.len));
Philipp Rudo 92f7d2
  	if (!msglen) {
Philipp Rudo 92f7d2
  		msglen = USHORT(logbuf + OFFSET(printk_log.len));
Philipp Rudo 92f7d2
 -		return msglen;
Philipp Rudo 92f7d2
 +		return logbuf + msglen;
Philipp Rudo 92f7d2
  	}
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
 -	return idx + msglen;
Philipp Rudo 92f7d2
 +	return logptr + msglen;
Philipp Rudo 92f7d2
  }
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
  int
Philipp Rudo 92f7d2
 @@ -5530,11 +5524,12 @@ dump_dmesg()
Philipp Rudo 92f7d2
  {
Philipp Rudo 92f7d2
  	int log_buf_len, length_log, length_oldlog, ret = FALSE;
Philipp Rudo 92f7d2
  	unsigned long index, log_buf, log_end;
Philipp Rudo 92f7d2
 -	unsigned int idx, log_first_idx, log_next_idx;
Philipp Rudo 92f7d2
 +	unsigned int log_first_idx, log_next_idx;
Philipp Rudo 92f7d2
  	unsigned long long first_idx_sym;
Philipp Rudo 92f7d2
  	unsigned long log_end_2_6_24;
Philipp Rudo 92f7d2
  	unsigned      log_end_2_6_25;
Philipp Rudo 92f7d2
  	char *log_buffer = NULL, *log_ptr = NULL;
Philipp Rudo 92f7d2
 +	char *ptr;
Philipp Rudo 92f7d2
  
Philipp Rudo 92f7d2
  	/*
Philipp Rudo 92f7d2
  	 * log_end has been changed to "unsigned" since linux-2.6.25.
Philipp Rudo 92f7d2
 @@ -5681,13 +5676,13 @@ dump_dmesg()
Philipp Rudo 92f7d2
  			ERRMSG("Can't open output file.\n");
Philipp Rudo 92f7d2
  			goto out;
Philipp Rudo 92f7d2
  		}
Philipp Rudo 92f7d2
 -		idx = log_first_idx;
Philipp Rudo 92f7d2
 -		while (idx != log_next_idx) {
Philipp Rudo 92f7d2
 -			log_ptr = log_from_idx(idx, log_buffer);
Philipp Rudo 92f7d2
 +		ptr = log_buffer + log_first_idx;
Philipp Rudo 92f7d2
 +		while (ptr != log_buffer + log_next_idx) {
Philipp Rudo 92f7d2
 +			log_ptr = log_from_ptr(ptr, log_buffer);
Philipp Rudo 92f7d2
  			if (!dump_log_entry(log_ptr, info->fd_dumpfile,
Philipp Rudo 92f7d2
  					    info->name_dumpfile))
Philipp Rudo 92f7d2
  				goto out;
Philipp Rudo 92f7d2
 -			idx = log_next(idx, log_buffer);
Philipp Rudo 92f7d2
 +			ptr = log_next(ptr, log_buffer);
Philipp Rudo 92f7d2
  		}
Philipp Rudo 92f7d2
  		if (!close_files_for_creating_dumpfile())
Philipp Rudo 92f7d2
  			goto out;