Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
script3r
GitHub Repository: script3r/os161
Path: blob/master/user/testbin/badcall/bad_sbrk.c
734 views
1
/*
2
* Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
3
* The President and Fellows of Harvard College.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the University nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*/
29
30
/*
31
* sbrk
32
*/
33
34
#include <sys/types.h>
35
#include <sys/stat.h>
36
#include <stdio.h>
37
#include <stdlib.h>
38
#include <string.h>
39
#include <unistd.h>
40
#include <errno.h>
41
#include <err.h>
42
43
#include "config.h"
44
#include "test.h"
45
46
static
47
int
48
try_sbrk(long val)
49
{
50
void *rv;
51
rv = sbrk(val);
52
if (rv==(void *)-1) {
53
return errno;
54
}
55
return 0;
56
}
57
58
static
59
void
60
enforce_sbrk(long val, const char *desc, int err)
61
{
62
int e;
63
64
e = try_sbrk(val);
65
if (e != err && e==0) {
66
warnx("FAILURE: sbrk(%s): no error", desc);
67
return;
68
}
69
if (e != err) {
70
errno = e;
71
warn("FAILURE: sbrk(%s): wrong error", desc);
72
return;
73
}
74
warnx("passed: sbrk(%s)", desc);
75
}
76
77
static
78
void
79
sbrk_bigpos(void)
80
{
81
enforce_sbrk(4096*1024*256, "huge positive", ENOMEM);
82
}
83
84
static
85
void
86
sbrk_bigneg(void)
87
{
88
enforce_sbrk(-4096*1024*256, "huge negative", EINVAL);
89
}
90
91
static
92
void
93
sbrk_neg(void)
94
{
95
enforce_sbrk(-8192, "too-large negative", EINVAL);
96
}
97
98
static
99
void
100
sbrk_unalignedpos(void)
101
{
102
switch (try_sbrk(17)) {
103
case 0:
104
case EINVAL:
105
warnx("passed: sbrk(unaligned positive)");
106
break;
107
default:
108
warn("FAILURE: sbrk(unaligned positive): wrong error");
109
break;
110
}
111
}
112
113
static
114
void
115
sbrk_unalignedneg(void)
116
{
117
switch (try_sbrk(-17)) {
118
case 0:
119
case EINVAL:
120
warnx("passed: sbrk(unaligned negative)");
121
break;
122
default:
123
warn("FAILURE: sbrk(unaligned negative): wrong error");
124
break;
125
}
126
}
127
128
void
129
test_sbrk(void)
130
{
131
sbrk_neg();
132
sbrk_bigpos();
133
sbrk_bigneg();
134
sbrk_unalignedpos();
135
sbrk_unalignedneg();
136
}
137
138
139