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

Function eval_sub

dpdk/lib/bpf/bpf_validate.c:268–295  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

266}
267
268static void
269eval_sub(struct bpf_reg_val *rd, const struct bpf_reg_val *rs, uint64_t msk)
270{
271 struct bpf_reg_val rv;
272
273 rv.u.min = (rd->u.min - rs->u.max) & msk;
274 rv.u.max = (rd->u.max - rs->u.min) & msk;
275 rv.s.min = (rd->s.min - rs->s.max) & msk;
276 rv.s.max = (rd->s.max - rs->s.min) & msk;
277
278 /*
279 * if at least one of the operands is not constant,
280 * then check for overflow
281 */
282 if ((rd->u.min != rd->u.max || rs->u.min != rs->u.max) &&
283 (rv.u.min > rd->u.min || rv.u.max > rd->u.max))
284 eval_umax_bound(&rv, msk);
285
286 if ((rd->s.min != rd->s.max || rs->s.min != rs->s.max) &&
287 (((rs->s.min < 0 && rv.s.min < rd->s.min) ||
288 rv.s.min > rd->s.min) ||
289 ((rs->s.max < 0 && rv.s.max < rd->s.max) ||
290 rv.s.max > rd->s.max)))
291 eval_smax_bound(&rv, msk);
292
293 rd->s = rv.s;
294 rd->u = rv.u;
295}
296
297static void
298eval_lsh(struct bpf_reg_val *rd, const struct bpf_reg_val *rs, size_t opsz,

Callers 1

eval_aluFunction · 0.85

Calls 2

eval_umax_boundFunction · 0.85
eval_smax_boundFunction · 0.85

Tested by

no test coverage detected