kernel/panic: convert print_tainted() to use struct seq_buf internally
Convert print_tainted() to use struct seq_buf internally in order to be more aware of the buffer constraints as well as make it easier to extend in follow-up work. Link: https://lkml.kernel.org/r/cb6006fa7c0f82a6b6885e8eea2920fcdc4fc9d0.1717146197.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
f4b6242338
commit
aff1db0e4e
@ -35,6 +35,7 @@
|
|||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
#include <linux/sysfs.h>
|
#include <linux/sysfs.h>
|
||||||
#include <linux/context_tracking.h>
|
#include <linux/context_tracking.h>
|
||||||
|
#include <linux/seq_buf.h>
|
||||||
#include <trace/events/error_report.h>
|
#include <trace/events/error_report.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
|
|
||||||
@ -496,6 +497,25 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
|
|||||||
[ TAINT_TEST ] = { 'N', ' ', true },
|
[ TAINT_TEST ] = { 'N', ' ', true },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void print_tainted_seq(struct seq_buf *s)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!tainted_mask) {
|
||||||
|
seq_buf_puts(s, "Not tainted");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
seq_buf_printf(s, "Tainted: ");
|
||||||
|
for (i = 0; i < TAINT_FLAGS_COUNT; i++) {
|
||||||
|
const struct taint_flag *t = &taint_flags[i];
|
||||||
|
bool is_set = test_bit(i, &tainted_mask);
|
||||||
|
char c = is_set ? t->c_true : t->c_false;
|
||||||
|
|
||||||
|
seq_buf_putc(s, c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* print_tainted - return a string to represent the kernel taint state.
|
* print_tainted - return a string to represent the kernel taint state.
|
||||||
*
|
*
|
||||||
@ -507,25 +527,15 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
|
|||||||
const char *print_tainted(void)
|
const char *print_tainted(void)
|
||||||
{
|
{
|
||||||
static char buf[TAINT_FLAGS_COUNT + sizeof("Tainted: ")];
|
static char buf[TAINT_FLAGS_COUNT + sizeof("Tainted: ")];
|
||||||
char *s;
|
struct seq_buf s;
|
||||||
int i;
|
|
||||||
|
|
||||||
BUILD_BUG_ON(ARRAY_SIZE(taint_flags) != TAINT_FLAGS_COUNT);
|
BUILD_BUG_ON(ARRAY_SIZE(taint_flags) != TAINT_FLAGS_COUNT);
|
||||||
|
|
||||||
if (!tainted_mask) {
|
seq_buf_init(&s, buf, sizeof(buf));
|
||||||
snprintf(buf, sizeof(buf), "Not tainted");
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
s = buf + sprintf(buf, "Tainted: ");
|
print_tainted_seq(&s);
|
||||||
for (i = 0; i < TAINT_FLAGS_COUNT; i++) {
|
|
||||||
const struct taint_flag *t = &taint_flags[i];
|
|
||||||
*s++ = test_bit(i, &tainted_mask) ?
|
|
||||||
t->c_true : t->c_false;
|
|
||||||
}
|
|
||||||
*s = 0;
|
|
||||||
|
|
||||||
return buf;
|
return seq_buf_str(&s);
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_taint(unsigned flag)
|
int test_taint(unsigned flag)
|
||||||
|
Loading…
Reference in New Issue
Block a user