35 lines
660 B
C
35 lines
660 B
C
|
// SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
#include <linux/bpf.h>
|
||
|
#include <bpf/bpf_helpers.h>
|
||
|
#include "bpf_misc.h"
|
||
|
|
||
|
SEC("socket")
|
||
|
__description("scalars: find linked scalars")
|
||
|
__failure
|
||
|
__msg("math between fp pointer and 2147483647 is not allowed")
|
||
|
__naked void scalars(void)
|
||
|
{
|
||
|
asm volatile (" \
|
||
|
r0 = 0; \
|
||
|
r1 = 0x80000001 ll; \
|
||
|
r1 /= 1; \
|
||
|
r2 = r1; \
|
||
|
r4 = r1; \
|
||
|
w2 += 0x7FFFFFFF; \
|
||
|
w4 += 0; \
|
||
|
if r2 == 0 goto l1; \
|
||
|
exit; \
|
||
|
l1: \
|
||
|
r4 >>= 63; \
|
||
|
r3 = 1; \
|
||
|
r3 -= r4; \
|
||
|
r3 *= 0x7FFFFFFF; \
|
||
|
r3 += r10; \
|
||
|
*(u8*)(r3 - 1) = r0; \
|
||
|
exit; \
|
||
|
" ::: __clobber_all);
|
||
|
}
|
||
|
|
||
|
char _license[] SEC("license") = "GPL";
|