Lines Matching refs:data

241 static void handle_overflow(struct overflow_data *data, void *lhs,  in handle_overflow()  argument
245 struct type_descriptor *type = data->type; in handle_overflow()
249 if (suppress_report(&data->location)) in handle_overflow()
252 ubsan_prologue(&data->location, type_is_signed(type) ? in handle_overflow()
267 void __ubsan_handle_add_overflow(void *data, in __ubsan_handle_add_overflow() argument
271 handle_overflow(data, lhs, rhs, '+'); in __ubsan_handle_add_overflow()
275 void __ubsan_handle_sub_overflow(void *data, in __ubsan_handle_sub_overflow() argument
278 handle_overflow(data, lhs, rhs, '-'); in __ubsan_handle_sub_overflow()
282 void __ubsan_handle_mul_overflow(void *data, in __ubsan_handle_mul_overflow() argument
285 handle_overflow(data, lhs, rhs, '*'); in __ubsan_handle_mul_overflow()
291 struct overflow_data *data = _data; in __ubsan_handle_negate_overflow() local
294 if (suppress_report(&data->location)) in __ubsan_handle_negate_overflow()
297 ubsan_prologue(&data->location, "negation-overflow"); in __ubsan_handle_negate_overflow()
299 val_to_string(old_val_str, sizeof(old_val_str), data->type, old_val); in __ubsan_handle_negate_overflow()
302 old_val_str, data->type->type_name); in __ubsan_handle_negate_overflow()
310 struct implicit_conversion_data *data = _data; in __ubsan_handle_implicit_conversion() local
314 if (suppress_report(&data->location)) in __ubsan_handle_implicit_conversion()
317 val_to_string(from_val_str, sizeof(from_val_str), data->from_type, from_val); in __ubsan_handle_implicit_conversion()
318 val_to_string(to_val_str, sizeof(to_val_str), data->to_type, to_val); in __ubsan_handle_implicit_conversion()
320 ubsan_prologue(&data->location, "implicit-conversion"); in __ubsan_handle_implicit_conversion()
323 data->from_type->type_name, in __ubsan_handle_implicit_conversion()
325 type_check_kinds[data->type_check_kind], in __ubsan_handle_implicit_conversion()
326 data->to_type->type_name, in __ubsan_handle_implicit_conversion()
335 struct overflow_data *data = _data; in __ubsan_handle_divrem_overflow() local
338 if (suppress_report(&data->location)) in __ubsan_handle_divrem_overflow()
341 ubsan_prologue(&data->location, "division-overflow"); in __ubsan_handle_divrem_overflow()
343 val_to_string(rhs_val_str, sizeof(rhs_val_str), data->type, rhs); in __ubsan_handle_divrem_overflow()
345 if (type_is_signed(data->type) && get_signed_val(data->type, rhs) == -1) in __ubsan_handle_divrem_overflow()
347 rhs_val_str, data->type->type_name); in __ubsan_handle_divrem_overflow()
355 static void handle_null_ptr_deref(struct type_mismatch_data_common *data) in handle_null_ptr_deref() argument
357 if (suppress_report(data->location)) in handle_null_ptr_deref()
360 ubsan_prologue(data->location, "null-ptr-deref"); in handle_null_ptr_deref()
363 type_check_kinds[data->type_check_kind], in handle_null_ptr_deref()
364 data->type->type_name); in handle_null_ptr_deref()
369 static void handle_misaligned_access(struct type_mismatch_data_common *data, in handle_misaligned_access() argument
372 if (suppress_report(data->location)) in handle_misaligned_access()
375 ubsan_prologue(data->location, "misaligned-access"); in handle_misaligned_access()
378 type_check_kinds[data->type_check_kind], in handle_misaligned_access()
379 (void *)ptr, data->type->type_name); in handle_misaligned_access()
380 pr_err("which requires %ld byte alignment\n", data->alignment); in handle_misaligned_access()
385 static void handle_object_size_mismatch(struct type_mismatch_data_common *data, in handle_object_size_mismatch() argument
388 if (suppress_report(data->location)) in handle_object_size_mismatch()
391 ubsan_prologue(data->location, "object-size-mismatch"); in handle_object_size_mismatch()
393 type_check_kinds[data->type_check_kind], in handle_object_size_mismatch()
395 pr_err("for an object of type %s\n", data->type->type_name); in handle_object_size_mismatch()
399 static void ubsan_type_mismatch_common(struct type_mismatch_data_common *data, in ubsan_type_mismatch_common() argument
405 handle_null_ptr_deref(data); in ubsan_type_mismatch_common()
406 else if (data->alignment && !IS_ALIGNED(ptr, data->alignment)) in ubsan_type_mismatch_common()
407 handle_misaligned_access(data, ptr); in ubsan_type_mismatch_common()
409 handle_object_size_mismatch(data, ptr); in ubsan_type_mismatch_common()
414 void __ubsan_handle_type_mismatch(struct type_mismatch_data *data, in __ubsan_handle_type_mismatch() argument
418 .location = &data->location, in __ubsan_handle_type_mismatch()
419 .type = data->type, in __ubsan_handle_type_mismatch()
420 .alignment = data->alignment, in __ubsan_handle_type_mismatch()
421 .type_check_kind = data->type_check_kind in __ubsan_handle_type_mismatch()
430 struct type_mismatch_data_v1 *data = _data; in __ubsan_handle_type_mismatch_v1() local
432 .location = &data->location, in __ubsan_handle_type_mismatch_v1()
433 .type = data->type, in __ubsan_handle_type_mismatch_v1()
434 .alignment = 1UL << data->log_alignment, in __ubsan_handle_type_mismatch_v1()
435 .type_check_kind = data->type_check_kind in __ubsan_handle_type_mismatch_v1()
444 struct out_of_bounds_data *data = _data; in __ubsan_handle_out_of_bounds() local
447 if (suppress_report(&data->location)) in __ubsan_handle_out_of_bounds()
450 ubsan_prologue(&data->location, "array-index-out-of-bounds"); in __ubsan_handle_out_of_bounds()
452 val_to_string(index_str, sizeof(index_str), data->index_type, index); in __ubsan_handle_out_of_bounds()
454 data->array_type->type_name); in __ubsan_handle_out_of_bounds()
461 struct shift_out_of_bounds_data *data = _data; in __ubsan_handle_shift_out_of_bounds() local
462 struct type_descriptor *rhs_type = data->rhs_type; in __ubsan_handle_shift_out_of_bounds()
463 struct type_descriptor *lhs_type = data->lhs_type; in __ubsan_handle_shift_out_of_bounds()
468 if (suppress_report(&data->location)) in __ubsan_handle_shift_out_of_bounds()
471 ubsan_prologue(&data->location, "shift-out-of-bounds"); in __ubsan_handle_shift_out_of_bounds()
503 struct unreachable_data *data = _data; in __ubsan_handle_builtin_unreachable() local
504 ubsan_prologue(&data->location, "unreachable"); in __ubsan_handle_builtin_unreachable()
513 struct invalid_value_data *data = _data; in __ubsan_handle_load_invalid_value() local
517 if (suppress_report(&data->location)) in __ubsan_handle_load_invalid_value()
520 ubsan_prologue(&data->location, "invalid-load"); in __ubsan_handle_load_invalid_value()
522 val_to_string(val_str, sizeof(val_str), data->type, val); in __ubsan_handle_load_invalid_value()
525 val_str, data->type->type_name); in __ubsan_handle_load_invalid_value()
537 struct alignment_assumption_data *data = _data; in __ubsan_handle_alignment_assumption() local
540 if (suppress_report(&data->location)) in __ubsan_handle_alignment_assumption()
543 ubsan_prologue(&data->location, "alignment-assumption"); in __ubsan_handle_alignment_assumption()
547 align, offset, data->type->type_name); in __ubsan_handle_alignment_assumption()
550 align, data->type->type_name); in __ubsan_handle_alignment_assumption()