Commit 87f8b7b4 authored by Steven Rostedt (VMware)'s avatar Steven Rostedt (VMware) Committed by Lu Jialin
Browse files

seq_buf: Add seq_buf_terminate() API

mainline inclusion
from mainline-v5.13-rc1
commit f2616c77
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8C7BS

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f2616c772c768485de18e7fcb2816bcdcd098339



-------------------------------------------------

In the case that the seq_buf buffer needs to be printed directly, add a way
to make sure that the buffer is safe to read by forcing a nul terminating
character at the end of the string, or the last byte of the buffer if the
string has overflowed.

Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: default avatarLu Jialin <lujialin4@huawei.com>
parent 69c2f248
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -71,6 +71,31 @@ static inline unsigned int seq_buf_used(struct seq_buf *s)
	return min(s->len, s->size);
}

/**
 * seq_buf_terminate - Make sure buffer is nul terminated
 * @s: the seq_buf descriptor to terminate.
 *
 * This makes sure that the buffer in @s is nul terminated and
 * safe to read as a string.
 *
 * Note, if this is called when the buffer has overflowed, then
 * the last byte of the buffer is zeroed, and the len will still
 * point passed it.
 *
 * After this function is called, s->buffer is safe to use
 * in string operations.
 */
static inline void seq_buf_terminate(struct seq_buf *s)
{
	if (WARN_ON(s->size == 0))
		return;

	if (seq_buf_buffer_left(s))
		s->buffer[s->len] = 0;
	else
		s->buffer[s->size - 1] = 0;
}

/**
 * seq_buf_get_buf - get buffer to write arbitrary data to
 * @s: the seq_buf handle