MCPcopy Create free account
hub / github.com/F-Stack/f-stack / eval_add

Function eval_add

dpdk/lib/bpf/bpf_validate.c:239–266  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

237}
238
239static void
240eval_add(struct bpf_reg_val *rd, const struct bpf_reg_val *rs, uint64_t msk)
241{
242 struct bpf_reg_val rv;
243
244 rv.u.min = (rd->u.min + rs->u.min) & msk;
245 rv.u.max = (rd->u.max + rs->u.max) & msk;
246 rv.s.min = (rd->s.min + rs->s.min) & msk;
247 rv.s.max = (rd->s.max + rs->s.max) & msk;
248
249 /*
250 * if at least one of the operands is not constant,
251 * then check for overflow
252 */
253 if ((rd->u.min != rd->u.max || rs->u.min != rs->u.max) &&
254 (rv.u.min < rd->u.min || rv.u.max < rd->u.max))
255 eval_umax_bound(&rv, msk);
256
257 if ((rd->s.min != rd->s.max || rs->s.min != rs->s.max) &&
258 (((rs->s.min < 0 && rv.s.min > rd->s.min) ||
259 rv.s.min < rd->s.min) ||
260 ((rs->s.max < 0 && rv.s.max > rd->s.max) ||
261 rv.s.max < rd->s.max)))
262 eval_smax_bound(&rv, msk);
263
264 rd->s = rv.s;
265 rd->u = rv.u;
266}
267
268static void
269eval_sub(struct bpf_reg_val *rd, const struct bpf_reg_val *rs, uint64_t msk)

Callers 3

eval_ld_mbufFunction · 0.85
eval_aluFunction · 0.85
eval_ptrFunction · 0.85

Calls 2

eval_umax_boundFunction · 0.85
eval_smax_boundFunction · 0.85

Tested by

no test coverage detected