1*ec63e07aSXin Li // Copyright 2019 Google LLC
2*ec63e07aSXin Li //
3*ec63e07aSXin Li // Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li // you may not use this file except in compliance with the License.
5*ec63e07aSXin Li // You may obtain a copy of the License at
6*ec63e07aSXin Li //
7*ec63e07aSXin Li // https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li //
9*ec63e07aSXin Li // Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li // distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li // See the License for the specific language governing permissions and
13*ec63e07aSXin Li // limitations under the License.
14*ec63e07aSXin Li
15*ec63e07aSXin Li #include <stdio.h>
16*ec63e07aSXin Li #include <stdlib.h>
17*ec63e07aSXin Li #include <sys/ptrace.h>
18*ec63e07aSXin Li #include <unistd.h>
19*ec63e07aSXin Li
20*ec63e07aSXin Li int sumsymbol = 5;
21*ec63e07aSXin Li
22*ec63e07aSXin Li typedef struct sum_params_s {
23*ec63e07aSXin Li int a;
24*ec63e07aSXin Li int b;
25*ec63e07aSXin Li int ret;
26*ec63e07aSXin Li } sum_params;
27*ec63e07aSXin Li
ftest(FILE * f)28*ec63e07aSXin Li extern int ftest(FILE *f) {
29*ec63e07aSXin Li return f->_offset;
30*ec63e07aSXin Li }
31*ec63e07aSXin Li
sum(int a,int b)32*ec63e07aSXin Li extern int sum(int a, int b) {
33*ec63e07aSXin Li return a + b;
34*ec63e07aSXin Li }
35*ec63e07aSXin Li
sums(sum_params * params)36*ec63e07aSXin Li extern void sums(sum_params* params) {
37*ec63e07aSXin Li params->ret = params->a + params->b;
38*ec63e07aSXin Li }
39*ec63e07aSXin Li
addf(float a,double b,long double c)40*ec63e07aSXin Li extern long double addf(float a, double b, long double c) {
41*ec63e07aSXin Li return a + b + c;
42*ec63e07aSXin Li }
43*ec63e07aSXin Li
sub(int a,int b)44*ec63e07aSXin Li extern int sub(int a, int b) {
45*ec63e07aSXin Li return a - b;
46*ec63e07aSXin Li }
47*ec63e07aSXin Li
mul(int a,int b)48*ec63e07aSXin Li extern int mul(int a, int b) {
49*ec63e07aSXin Li return a * b;
50*ec63e07aSXin Li }
51*ec63e07aSXin Li
divs(int a,int b)52*ec63e07aSXin Li extern int divs(int a, int b) {
53*ec63e07aSXin Li return a / b;
54*ec63e07aSXin Li }
55*ec63e07aSXin Li
muld(double a,float b)56*ec63e07aSXin Li extern double muld(double a, float b) {
57*ec63e07aSXin Li return a * b;
58*ec63e07aSXin Li }
59*ec63e07aSXin Li
crash(void)60*ec63e07aSXin Li extern void crash(void) {
61*ec63e07aSXin Li void(*die)() = (void(*)())(0x0000dead);
62*ec63e07aSXin Li die();
63*ec63e07aSXin Li }
64*ec63e07aSXin Li
violate(void)65*ec63e07aSXin Li extern void violate(void) {
66*ec63e07aSXin Li // Issue a PTRACE_CONT that will always fail, since we are not in stopped
67*ec63e07aSXin Li // state. The actual call should be caught by the sandbox policy.
68*ec63e07aSXin Li ptrace(PTRACE_CONT, 0, NULL, NULL);
69*ec63e07aSXin Li }
70*ec63e07aSXin Li
sumarr(int * input,size_t nelem)71*ec63e07aSXin Li extern int sumarr(int* input, size_t nelem) {
72*ec63e07aSXin Li int s = 0, i;
73*ec63e07aSXin Li for (i = 0; i < nelem; i++) {
74*ec63e07aSXin Li s += input[i];
75*ec63e07aSXin Li }
76*ec63e07aSXin Li return s;
77*ec63e07aSXin Li }
78*ec63e07aSXin Li
testptr(void * ptr)79*ec63e07aSXin Li extern void testptr(void *ptr) {
80*ec63e07aSXin Li if (ptr) {
81*ec63e07aSXin Li puts("Is Not a NULL-ptr");
82*ec63e07aSXin Li } else {
83*ec63e07aSXin Li puts("Is a NULL-ptr");
84*ec63e07aSXin Li }
85*ec63e07aSXin Li }
86*ec63e07aSXin Li
read_int(int fd)87*ec63e07aSXin Li extern int read_int(int fd) {
88*ec63e07aSXin Li char buf[10] = {0};
89*ec63e07aSXin Li int ret = read(fd, buf, sizeof(buf) - 1);
90*ec63e07aSXin Li if(ret > 0) {
91*ec63e07aSXin Li ret = atoi(buf);
92*ec63e07aSXin Li }
93*ec63e07aSXin Li return ret;
94*ec63e07aSXin Li }
95*ec63e07aSXin Li
sleep_for_sec(int sec)96*ec63e07aSXin Li extern void sleep_for_sec(int sec) {
97*ec63e07aSXin Li sleep(sec);
98*ec63e07aSXin Li }
99