.github
.zed
admin
appl
cf
doc
etc
include
kadmin
kcm
kdc
kpasswd
kuser
lib
asn1
base
com_err
gss_preauth
gssapi
hcrypto
hdb
heimdal
hx509
ipc
kadm5
kafs
kdfs
krb5
libedit
ntlm
otp
roken
ChangeLog
Makefile.am
NTMakefile
base32-test.c
base32.c
base32.h
base64-test.c
base64.c
base64.h
bswap.c
chown.c
cloexec.c
closefrom.c
clz.c
concat.c
copyhostent.c
ct.c
daemon.c
detach.c
dirent-test.c
dirent.c
dirent.hin
dlfcn.hin
dlfcn_w32.c
doxygen.c
dumpdata.c
ecalloc.3
ecalloc.c
emalloc.c
environment.c
eread.c
erealloc.c
err.c
err.hin
errx.c
esetenv.c
estrdup.c
ewrite.c
fchown.c
flock.c
fnmatch.c
fnmatch.hin
freeaddrinfo.c
freehostent.c
fseeko.c
ftello.c
gai_strerror.c
get_window_size.c
getaddrinfo-test.c
getaddrinfo.c
getaddrinfo_hostspec.c
getarg.3
getarg.c
getarg.h
getauxval.c
getauxval.h
getcwd.c
getdtablesize.c
getegid.c
geteuid.c
getgid.c
gethostname.c
getifaddrs-test.c
getifaddrs.c
getifaddrs_w32.c
getipnodebyaddr.c
getipnodebyname.c
getnameinfo.c
getnameinfo_verified.c
getopt.c
getprogname.c
gettimeofday.c
getuid.c
getuserinfo.c
getusershell.c
h_errno.c
hex-test.c
hex.c
hex.h
hostent_find_fqdn.c
hstrerror.c
ifaddrs.hin
inet_aton.c
inet_ntop.c
inet_pton.c
initgroups.c
innetgr.c
install-sh
issuid.c
localtime_r.c
lstat.c
memmem.c
memmove.c
memset_s.c
mergesort.c
mergesort_r.c
mini_inetd.c
missing
mkdir.c
mkdtemp.c
mkinstalldirs
mkostemp.c
mkstemp.c
ndbm_wrap.c
ndbm_wrap.h
net_read.c
net_write.c
parse_bytes-test.c
parse_bytes.c
parse_bytes.h
parse_reply-test.c
parse_time-test.c
parse_time.3
parse_time.c
parse_time.h
parse_units.c
parse_units.h
putenv.c
qsort.c
rand.c
rcmd.c
readv.c
realloc.c
recvmsg.c
rename.c
resolve-test.c
resolve.c
resolve.h
rkpty.c
roken-common.h
roken.awk
roken.h.in
roken_gethostby.c
rtbl.3
rtbl.c
rtbl.h
search.hin
secure_getenv.c
secure_getenv.h
sendmsg.c
setegid.c
setenv.c
seteuid.c
setprogname.c
signal.c
simple_exec.c
simple_exec_w32.c
sleep.c
snprintf-test.c
snprintf.c
socket.c
socket_wrapper.c
socket_wrapper.h
sockstartup_w32.c
stdbool.hin
stdint.hin
strcasecmp.c
strcollect.c
strdup.c
strerror.c
strerror_r.c
strftime.c
strlcat.c
strlcpy.c
strlwr.c
strncasecmp.c
strndup.c
strnlen.c
strpftime-test.c
strpftime-test.h
strpool.c
strptime.c
strsep.c
strsep_copy.c
strtok_r.c
strtoll.c
strtoull.c
strupr.c
swab.c
syslog.hin
syslogc.c
test-auxval.c
test-detach.c
test-getuserinfo.c
test-mem.c
test-mem.h
test-mini_inetd.c
test-readenv.c
timegm.c
timeval.c
tm2time.c
tsearch-test.c
tsearch.c
unsetenv.c
unvis.c
verr.c
verrx.c
version-script.map
versionsupport.h
vis-extras.h
vis.c
vis.hin
vsyslog.c
vwarn.c
vwarnx.c
warn.c
warnerr.c
warnx.c
win32_alloc.c
win32_version.c
write_pid.c
writev.c
xdbm.h
xfree.c
sl
sqlite
vers
wind
Makefile.am
NTMakefile
nix
packages
po
tests
tools
windows
.gitignore
.travis.yml
CODE_OF_CONDUCT.md
ChangeLog
ChangeLog.1998
ChangeLog.1999
ChangeLog.2000
ChangeLog.2001
ChangeLog.2002
ChangeLog.2003
ChangeLog.2004
ChangeLog.2005
ChangeLog.2006
ChangeLog.2007
LICENSE
Makefile.am
Makefile.am.common
NEWS
NTMakefile
README
README.fast
README.md
SECURITY.md
TODO
acinclude.m4
appveyor.yml
autogen.sh
configure.ac
flake.lock
flake.nix
krb5.conf

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24356 ec53bebd-3082-4978-b11e-865c3cabbd6b
127 lines
3.5 KiB
C
127 lines
3.5 KiB
C
/*
|
|
* Copyright (c) 2002 Kungliga Tekniska Högskolan
|
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of the Institute nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
#include <sys/types.h>
|
|
#ifdef HAVE_SYS_MMAN_H
|
|
#include <sys/mman.h>
|
|
#endif
|
|
#include <fcntl.h>
|
|
|
|
#include "roken.h"
|
|
#include "resolve.h"
|
|
|
|
struct dns_reply*
|
|
parse_reply(const unsigned char *, size_t);
|
|
|
|
enum { MAX_BUF = 36};
|
|
|
|
static struct testcase {
|
|
unsigned char buf[MAX_BUF];
|
|
size_t buf_len;
|
|
} tests[] = {
|
|
{{0x12, 0x67, 0x84, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
0x03, 'f', 'o', 'o', 0x00,
|
|
0x00, 0x10, 0x00, 0x01,
|
|
0x03, 'f', 'o', 'o', 0x00,
|
|
0x00, 0x10, 0x00, 0x01,
|
|
0x00, 0x00, 0x12, 0x67, 0xff, 0xff}, 36}
|
|
};
|
|
|
|
#ifndef MAP_FAILED
|
|
#define MAP_FAILED (-1)
|
|
#endif
|
|
|
|
static sig_atomic_t val = 0;
|
|
|
|
static RETSIGTYPE
|
|
segv_handler(int sig)
|
|
{
|
|
val = 1;
|
|
}
|
|
|
|
int
|
|
main(int argc, char **argv)
|
|
{
|
|
#ifndef HAVE_MMAP
|
|
return 77; /* signal to automake that this test
|
|
cannot be run */
|
|
#else /* HAVE_MMAP */
|
|
int ret;
|
|
int i;
|
|
struct sigaction sa;
|
|
|
|
sigemptyset (&sa.sa_mask);
|
|
sa.sa_flags = 0;
|
|
sa.sa_handler = segv_handler;
|
|
sigaction (SIGSEGV, &sa, NULL);
|
|
|
|
for (i = 0; val == 0 && i < sizeof(tests)/sizeof(tests[0]); ++i) {
|
|
const struct testcase *t = &tests[i];
|
|
unsigned char *p1, *p2;
|
|
int flags;
|
|
int fd;
|
|
size_t pagesize = getpagesize();
|
|
unsigned char *buf;
|
|
|
|
#ifdef MAP_ANON
|
|
flags = MAP_ANON;
|
|
fd = -1;
|
|
#else
|
|
flags = 0;
|
|
fd = open ("/dev/zero", O_RDONLY);
|
|
if(fd < 0)
|
|
err (1, "open /dev/zero");
|
|
#endif
|
|
flags |= MAP_PRIVATE;
|
|
|
|
p1 = (unsigned char *)mmap(0, 2 * pagesize, PROT_READ | PROT_WRITE,
|
|
flags, fd, 0);
|
|
if (p1 == (unsigned char *)MAP_FAILED)
|
|
err (1, "mmap");
|
|
p2 = p1 + pagesize;
|
|
ret = mprotect ((void *)p2, pagesize, 0);
|
|
if (ret < 0)
|
|
err (1, "mprotect");
|
|
buf = p2 - t->buf_len;
|
|
memcpy (buf, t->buf, t->buf_len);
|
|
parse_reply (buf, t->buf_len);
|
|
ret = munmap ((void *)p1, 2 * pagesize);
|
|
if (ret < 0)
|
|
err (1, "munmap");
|
|
}
|
|
return val;
|
|
#endif /* HAVE_MMAP */
|
|
}
|