[PATCH master 7/7] common: ubsan: replace pr_err with printf

Ahmad Fatoum a.fatoum at pengutronix.de
Mon Sep 14 06:05:53 EDT 2020


The pr_print family of functions also writes to the barebox
log buffer, which we don't require for printing UBSan errors,
which is a debugging aid. This also improves UBSan coverage as now
undefined behavior within pr_print may be reported as well.

Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
 lib/ubsan.c | 88 ++++++++++++++++++++++++++---------------------------
 1 file changed, 44 insertions(+), 44 deletions(-)

diff --git a/lib/ubsan.c b/lib/ubsan.c
index 41a5731dda66..085d470cf784 100644
--- a/lib/ubsan.c
+++ b/lib/ubsan.c
@@ -60,8 +60,8 @@ static bool was_reported(struct source_location *location)
 static void print_source_location(const char *prefix,
 				struct source_location *loc)
 {
-	pr_err("%s %s:%d:%d\n", prefix, loc->file_name,
-		loc->line & LINE_MASK, loc->column & COLUMN_MASK);
+	printf("%s %s:%d:%d\n", prefix, loc->file_name,
+	       loc->line & LINE_MASK, loc->column & COLUMN_MASK);
 }
 
 static bool suppress_report(struct source_location *loc)
@@ -157,16 +157,16 @@ static void ubsan_prologue(struct source_location *location,
 {
 	in_ubsan++;
 
-	pr_err("========================================"
-		"========================================\n");
+	printf("========================================"
+	       "========================================\n");
 	print_source_location("UBSAN: Undefined behaviour in", location);
 }
 
 static void ubsan_epilogue(unsigned long *flags)
 {
 	dump_stack();
-	pr_err("========================================"
-		"========================================\n");
+	printf("========================================"
+	       "========================================\n");
 	in_ubsan--;
 }
 
@@ -186,13 +186,13 @@ static void handle_overflow(struct overflow_data *data, void *lhs,
 
 	val_to_string(lhs_val_str, sizeof(lhs_val_str), type, lhs);
 	val_to_string(rhs_val_str, sizeof(rhs_val_str), type, rhs);
-	pr_err("%s integer overflow:\n",
-		type_is_signed(type) ? "signed" : "unsigned");
-	pr_err("%s %c %s cannot be represented in type %s\n",
-		lhs_val_str,
-		op,
-		rhs_val_str,
-		type->type_name);
+	printf("%s integer overflow:\n",
+	       type_is_signed(type) ? "signed" : "unsigned");
+	printf("%s %c %s cannot be represented in type %s\n",
+	       lhs_val_str,
+	       op,
+	       rhs_val_str,
+	       type->type_name);
 
 	ubsan_epilogue(&flags);
 }
@@ -232,8 +232,8 @@ void __ubsan_handle_negate_overflow(struct overflow_data *data,
 
 	val_to_string(old_val_str, sizeof(old_val_str), data->type, old_val);
 
-	pr_err("negation of %s cannot be represented in type %s:\n",
-		old_val_str, data->type->type_name);
+	printf("negation of %s cannot be represented in type %s:\n",
+	       old_val_str, data->type->type_name);
 
 	ubsan_epilogue(&flags);
 }
@@ -254,10 +254,10 @@ void __ubsan_handle_divrem_overflow(struct overflow_data *data,
 	val_to_string(rhs_val_str, sizeof(rhs_val_str), data->type, rhs);
 
 	if (type_is_signed(data->type) && get_signed_val(data->type, rhs) == -1)
-		pr_err("division of %s by -1 cannot be represented in type %s\n",
-			rhs_val_str, data->type->type_name);
+		printf("division of %s by -1 cannot be represented in type %s\n",
+		       rhs_val_str, data->type->type_name);
 	else
-		pr_err("division by zero\n");
+		printf("division by zero\n");
 
 	ubsan_epilogue(&flags);
 }
@@ -272,9 +272,9 @@ static void handle_null_ptr_deref(struct type_mismatch_data_common *data)
 
 	ubsan_prologue(data->location, &flags);
 
-	pr_err("%s null pointer of type %s\n",
-		type_check_kinds[data->type_check_kind],
-		data->type->type_name);
+	printf("%s null pointer of type %s\n",
+	       type_check_kinds[data->type_check_kind],
+	       data->type->type_name);
 
 	ubsan_epilogue(&flags);
 }
@@ -289,10 +289,10 @@ static void handle_misaligned_access(struct type_mismatch_data_common *data,
 
 	ubsan_prologue(data->location, &flags);
 
-	pr_err("%s misaligned address %p for type %s\n",
-		type_check_kinds[data->type_check_kind],
-		(void *)ptr, data->type->type_name);
-	pr_err("which requires %ld byte alignment\n", data->alignment);
+	printf("%s misaligned address %p for type %s\n",
+	       type_check_kinds[data->type_check_kind],
+	       (void *)ptr, data->type->type_name);
+	printf("which requires %ld byte alignment\n", data->alignment);
 
 	ubsan_epilogue(&flags);
 }
@@ -306,10 +306,10 @@ static void handle_object_size_mismatch(struct type_mismatch_data_common *data,
 		return;
 
 	ubsan_prologue(data->location, &flags);
-	pr_err("%s address %p with insufficient space\n",
+	printf("%s address %p with insufficient space\n",
 		type_check_kinds[data->type_check_kind],
 		(void *) ptr);
-	pr_err("for an object of type %s\n", data->type->type_name);
+	printf("for an object of type %s\n", data->type->type_name);
 	ubsan_epilogue(&flags);
 }
 
@@ -364,8 +364,8 @@ void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, void *index)
 	ubsan_prologue(&data->location, &flags);
 
 	val_to_string(index_str, sizeof(index_str), data->index_type, index);
-	pr_err("index %s is out of range for type %s\n", index_str,
-		data->array_type->type_name);
+	printf("index %s is out of range for type %s\n", index_str,
+	       data->array_type->type_name);
 	ubsan_epilogue(&flags);
 }
 EXPORT_SYMBOL(__ubsan_handle_out_of_bounds);
@@ -408,22 +408,22 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
 	val_to_string(lhs_str, sizeof(lhs_str), lhs_type, lhs);
 
 	if (val_is_negative(rhs_type, rhs))
-		pr_err("shift exponent %s is negative\n", rhs_str);
+		printf("shift exponent %s is negative\n", rhs_str);
 
 	else if (get_unsigned_val(rhs_type, rhs) >=
-		type_bit_width(lhs_type))
-		pr_err("shift exponent %s is too large for %u-bit type %s\n",
-			rhs_str,
-			type_bit_width(lhs_type),
-			lhs_type->type_name);
+		 type_bit_width(lhs_type))
+		printf("shift exponent %s is too large for %u-bit type %s\n",
+		       rhs_str,
+		       type_bit_width(lhs_type),
+		       lhs_type->type_name);
 	else if (val_is_negative(lhs_type, lhs))
-		pr_err("left shift of negative value %s\n",
-			lhs_str);
+		printf("left shift of negative value %s\n",
+		       lhs_str);
 	else
-		pr_err("left shift of %s by %s places cannot be"
-			" represented in type %s\n",
-			lhs_str, rhs_str,
-			lhs_type->type_name);
+		printf("left shift of %s by %s places cannot be"
+		       " represented in type %s\n",
+		       lhs_str, rhs_str,
+		       lhs_type->type_name);
 
 	ubsan_epilogue(&flags);
 }
@@ -435,7 +435,7 @@ void __ubsan_handle_builtin_unreachable(struct unreachable_data *data)
 	unsigned long flags;
 
 	ubsan_prologue(&data->location, &flags);
-	pr_err("calling __builtin_unreachable()\n");
+	printf("calling __builtin_unreachable()\n");
 	ubsan_epilogue(&flags);
 	panic("can't return from __builtin_unreachable()");
 }
@@ -454,8 +454,8 @@ void __ubsan_handle_load_invalid_value(struct invalid_value_data *data,
 
 	val_to_string(val_str, sizeof(val_str), data->type, val);
 
-	pr_err("load of value %s is not a valid value for type %s\n",
-		val_str, data->type->type_name);
+	printf("load of value %s is not a valid value for type %s\n",
+	       val_str, data->type->type_name);
 
 	ubsan_epilogue(&flags);
 }
-- 
2.28.0




More information about the barebox mailing list