Print this page
11506 smatch resync
*** 17,26 ****
--- 17,28 ----
#include "smatch.h"
#include "smatch_extra.h"
static int my_id;
+ extern int second_half_id;
+ extern void set_spectre_first_half(struct expression *expr);
static int suppress_multiple = 1;
static int is_write(struct expression *expr)
{
*** 163,174 ****
return;
if (is_harmless(expr))
return;
array_expr = get_array_base(expr);
! if (suppress_multiple && is_ignored_expr(my_id, array_expr))
return;
offset = get_array_offset(expr);
if (!is_user_rl(offset))
return;
if (is_nospec(offset))
--- 165,178 ----
return;
if (is_harmless(expr))
return;
array_expr = get_array_base(expr);
! if (suppress_multiple && is_ignored_expr(my_id, array_expr)) {
! set_spectre_first_half(expr);
return;
+ }
offset = get_array_offset(expr);
if (!is_user_rl(offset))
return;
if (is_nospec(offset))
*** 190,199 ****
--- 194,205 ----
name = expr_to_str(array_expr);
sm_warning("potential spectre issue '%s' [%s]%s",
name,
is_read(expr) ? "r" : "w",
conditions ? " (local cap)" : "");
+
+ set_spectre_first_half(expr);
if (suppress_multiple)
add_ignore_expr(my_id, array_expr);
free_string(name);
}