xref: /aosp_15_r20/external/sandboxed-api/sandboxed_api/examples/sum/sum.c (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
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