MfH @r295202
Expect to see panics in routing code at least now.
This commit is contained in:
commit
2414e86439
9
Makefile
9
Makefile
@ -136,6 +136,7 @@ TGTS+= ${BITGTS}
|
||||
.ORDER: buildworld installworld
|
||||
.ORDER: buildworld distributeworld
|
||||
.ORDER: buildworld buildkernel
|
||||
.ORDER: installworld distribution
|
||||
.ORDER: buildkernel installkernel
|
||||
.ORDER: buildkernel installkernel.debug
|
||||
.ORDER: buildkernel reinstallkernel
|
||||
@ -328,7 +329,7 @@ bmake: .PHONY
|
||||
${MMAKE} all; \
|
||||
${MMAKE} install DESTDIR=${MYMAKE:H} BINDIR=
|
||||
|
||||
tinderbox toolchains kernel-toolchains: upgrade_checks
|
||||
tinderbox toolchains kernel-toolchains kernels worlds: upgrade_checks
|
||||
|
||||
tinderbox:
|
||||
@cd ${.CURDIR}; ${SUB_MAKE} DOING_TINDERBOX=YES universe
|
||||
@ -339,6 +340,12 @@ toolchains:
|
||||
kernel-toolchains:
|
||||
@cd ${.CURDIR}; ${SUB_MAKE} UNIVERSE_TARGET=kernel-toolchain universe
|
||||
|
||||
kernels:
|
||||
@cd ${.CURDIR}; ${SUB_MAKE} UNIVERSE_TARGET=buildkernel universe
|
||||
|
||||
worlds:
|
||||
@cd ${.CURDIR}; ${SUB_MAKE} UNIVERSE_TARGET=buildworld universe
|
||||
|
||||
#
|
||||
# universe
|
||||
#
|
||||
|
@ -72,7 +72,7 @@ SRCDIR?= ${.CURDIR}
|
||||
SUBDIR= ${SUBDIR_OVERRIDE}
|
||||
.else
|
||||
SUBDIR= lib libexec
|
||||
.if make(install*)
|
||||
.if !defined(NO_ROOT) && (make(installworld) || make(install))
|
||||
# Ensure libraries are installed before progressing.
|
||||
SUBDIR+=.WAIT
|
||||
.endif
|
||||
@ -127,7 +127,7 @@ SUBDIR+= ${_DIR}
|
||||
# by calling 'makedb' in share/man. This is only relevant for
|
||||
# install/distribute so they build the whatis file after every manpage is
|
||||
# installed.
|
||||
.if make(install*)
|
||||
.if make(installworld) || make(install)
|
||||
SUBDIR+=.WAIT
|
||||
.endif
|
||||
SUBDIR+=etc
|
||||
|
7
UPDATING
7
UPDATING
@ -31,6 +31,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11.x IS SLOW:
|
||||
disable the most expensive debugging functionality run
|
||||
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||
|
||||
20160129:
|
||||
Building ZFS pools on top of zvols is prohibited by default. That
|
||||
feature has never worked safely; it's always been prone to deadlocks.
|
||||
Using a zvol as the backing store for a VM guest's virtual disk will
|
||||
still work, even if the guest is using ZFS. Legacy behavior can be
|
||||
restored by setting vfs.zfs.vol.recursive=1.
|
||||
|
||||
20160119:
|
||||
The NONE and HPN patches has been removed from OpenSSH. They are
|
||||
still available in the security/openssh-portable port.
|
||||
|
@ -36,9 +36,9 @@
|
||||
#undef iconv_close
|
||||
|
||||
#define ICONVLIB "libiconv.so"
|
||||
#define ICONV_ENGINE "iconv"
|
||||
#define ICONV_OPEN "iconv_open"
|
||||
#define ICONV_CLOSE "iconv_close"
|
||||
#define ICONV_ENGINE "libiconv"
|
||||
#define ICONV_OPEN "libiconv_open"
|
||||
#define ICONV_CLOSE "libiconv_close"
|
||||
|
||||
typedef iconv_t iconv_open_t(const char *, const char *);
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd September 4, 2015
|
||||
.Dd January 23, 2016
|
||||
.Dt SETFACL 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -62,8 +62,9 @@ starting at position
|
||||
counting from zero.
|
||||
This option is only applicable to NFSv4 ACLs.
|
||||
.It Fl b
|
||||
Remove all ACL entries except for the three required entries
|
||||
(POSIX.1e ACLs) or six "canonical" entries (NFSv4 ACLs).
|
||||
Remove all ACL entries except for the ones synthesized
|
||||
from the file mode - the three mandatory entries in case
|
||||
of POSIX.1e ACL.
|
||||
If the POSIX.1e ACL contains a
|
||||
.Dq Li mask
|
||||
entry, the permissions of the
|
||||
|
48
bin/sh/cd.c
48
bin/sh/cd.c
@ -68,15 +68,13 @@ __FBSDID("$FreeBSD$");
|
||||
static int cdlogical(char *);
|
||||
static int cdphysical(char *);
|
||||
static int docd(char *, int, int);
|
||||
static char *getcomponent(void);
|
||||
static char *getcomponent(char **);
|
||||
static char *findcwd(char *);
|
||||
static void updatepwd(char *);
|
||||
static char *getpwd(void);
|
||||
static char *getpwd2(void);
|
||||
|
||||
static char *curdir = NULL; /* current working directory */
|
||||
static char *prevdir; /* previous working directory */
|
||||
static char *cdcomppath;
|
||||
|
||||
int
|
||||
cdcmd(int argc __unused, char **argv __unused)
|
||||
@ -112,11 +110,10 @@ cdcmd(int argc __unused, char **argv __unused)
|
||||
if (*dest == '\0')
|
||||
dest = ".";
|
||||
if (dest[0] == '-' && dest[1] == '\0') {
|
||||
dest = prevdir ? prevdir : curdir;
|
||||
if (dest)
|
||||
print = 1;
|
||||
else
|
||||
dest = ".";
|
||||
dest = bltinlookup("OLDPWD", 1);
|
||||
if (dest == NULL)
|
||||
error("OLDPWD not set");
|
||||
print = 1;
|
||||
}
|
||||
if (dest[0] == '/' ||
|
||||
(dest[0] == '.' && (dest[1] == '/' || dest[1] == '\0')) ||
|
||||
@ -179,6 +176,7 @@ cdlogical(char *dest)
|
||||
char *p;
|
||||
char *q;
|
||||
char *component;
|
||||
char *path;
|
||||
struct stat statb;
|
||||
int first;
|
||||
int badstat;
|
||||
@ -189,14 +187,14 @@ cdlogical(char *dest)
|
||||
* next time we get the value of the current directory.
|
||||
*/
|
||||
badstat = 0;
|
||||
cdcomppath = stsavestr(dest);
|
||||
path = stsavestr(dest);
|
||||
STARTSTACKSTR(p);
|
||||
if (*dest == '/') {
|
||||
STPUTC('/', p);
|
||||
cdcomppath++;
|
||||
path++;
|
||||
}
|
||||
first = 1;
|
||||
while ((q = getcomponent()) != NULL) {
|
||||
while ((q = getcomponent(&path)) != NULL) {
|
||||
if (q[0] == '\0' || (q[0] == '.' && q[1] == '\0'))
|
||||
continue;
|
||||
if (! first)
|
||||
@ -245,25 +243,25 @@ cdphysical(char *dest)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the next component of the path name pointed to by cdcomppath.
|
||||
* This routine overwrites the string pointed to by cdcomppath.
|
||||
* Get the next component of the path name pointed to by *path.
|
||||
* This routine overwrites *path and the string pointed to by it.
|
||||
*/
|
||||
static char *
|
||||
getcomponent(void)
|
||||
getcomponent(char **path)
|
||||
{
|
||||
char *p;
|
||||
char *start;
|
||||
|
||||
if ((p = cdcomppath) == NULL)
|
||||
if ((p = *path) == NULL)
|
||||
return NULL;
|
||||
start = cdcomppath;
|
||||
start = *path;
|
||||
while (*p != '/' && *p != '\0')
|
||||
p++;
|
||||
if (*p == '\0') {
|
||||
cdcomppath = NULL;
|
||||
*path = NULL;
|
||||
} else {
|
||||
*p++ = '\0';
|
||||
cdcomppath = p;
|
||||
*path = p;
|
||||
}
|
||||
return start;
|
||||
}
|
||||
@ -274,6 +272,7 @@ findcwd(char *dir)
|
||||
{
|
||||
char *new;
|
||||
char *p;
|
||||
char *path;
|
||||
|
||||
/*
|
||||
* If our argument is NULL, we don't know the current directory
|
||||
@ -282,14 +281,14 @@ findcwd(char *dir)
|
||||
*/
|
||||
if (dir == NULL || curdir == NULL)
|
||||
return getpwd2();
|
||||
cdcomppath = stsavestr(dir);
|
||||
path = stsavestr(dir);
|
||||
STARTSTACKSTR(new);
|
||||
if (*dir != '/') {
|
||||
STPUTS(curdir, new);
|
||||
if (STTOPC(new) == '/')
|
||||
STUNPUTC(new);
|
||||
}
|
||||
while ((p = getcomponent()) != NULL) {
|
||||
while ((p = getcomponent(&path)) != NULL) {
|
||||
if (equal(p, "..")) {
|
||||
while (new > stackblock() && (STUNPUTC(new), *new) != '/');
|
||||
} else if (*p != '\0' && ! equal(p, ".")) {
|
||||
@ -311,14 +310,15 @@ findcwd(char *dir)
|
||||
static void
|
||||
updatepwd(char *dir)
|
||||
{
|
||||
char *prevdir;
|
||||
|
||||
hashcd(); /* update command hash table */
|
||||
|
||||
if (prevdir)
|
||||
ckfree(prevdir);
|
||||
setvar("PWD", dir, VEXPORT);
|
||||
setvar("OLDPWD", curdir, VEXPORT);
|
||||
prevdir = curdir;
|
||||
curdir = dir ? savestr(dir) : NULL;
|
||||
setvar("PWD", curdir, VEXPORT);
|
||||
setvar("OLDPWD", prevdir, VEXPORT);
|
||||
ckfree(prevdir);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -91,13 +91,13 @@ struct worddest {
|
||||
static char *expdest; /* output of current string */
|
||||
static struct nodelist *argbackq; /* list of back quote expressions */
|
||||
|
||||
static char *argstr(char *, int, struct worddest *);
|
||||
static char *exptilde(char *, int);
|
||||
static char *expari(char *, int, struct worddest *);
|
||||
static const char *argstr(const char *, int, struct worddest *);
|
||||
static const char *exptilde(const char *, int);
|
||||
static const char *expari(const char *, int, struct worddest *);
|
||||
static void expbackq(union node *, int, int, struct worddest *);
|
||||
static void subevalvar_trim(char *, int, int, int);
|
||||
static int subevalvar_misc(char *, const char *, int, int, int);
|
||||
static char *evalvar(char *, int, struct worddest *);
|
||||
static void subevalvar_trim(const char *, int, int, int);
|
||||
static int subevalvar_misc(const char *, const char *, int, int, int);
|
||||
static const char *evalvar(const char *, int, struct worddest *);
|
||||
static int varisset(const char *, int);
|
||||
static void strtodest(const char *, int, int, int, struct worddest *);
|
||||
static void reprocess(int, int, int, int, struct worddest *);
|
||||
@ -262,8 +262,8 @@ expandarg(union node *arg, struct arglist *arglist, int flag)
|
||||
*
|
||||
* If EXP_SPLIT is set, dst receives any complete words produced.
|
||||
*/
|
||||
static char *
|
||||
argstr(char *p, int flag, struct worddest *dst)
|
||||
static const char *
|
||||
argstr(const char *p, int flag, struct worddest *dst)
|
||||
{
|
||||
char c;
|
||||
int quotes = flag & (EXP_GLOB | EXP_CASE); /* do CTLESC */
|
||||
@ -352,12 +352,15 @@ argstr(char *p, int flag, struct worddest *dst)
|
||||
* Perform tilde expansion, placing the result in the stack string and
|
||||
* returning the next position in the input string to process.
|
||||
*/
|
||||
static char *
|
||||
exptilde(char *p, int flag)
|
||||
static const char *
|
||||
exptilde(const char *p, int flag)
|
||||
{
|
||||
char c, *startp = p;
|
||||
char c;
|
||||
const char *startp = p;
|
||||
const char *user;
|
||||
struct passwd *pw;
|
||||
char *home;
|
||||
int len;
|
||||
|
||||
for (;;) {
|
||||
c = *p;
|
||||
@ -377,14 +380,17 @@ exptilde(char *p, int flag)
|
||||
case '\0':
|
||||
case '/':
|
||||
case CTLENDVAR:
|
||||
*p = '\0';
|
||||
if (*(startp+1) == '\0') {
|
||||
len = p - startp - 1;
|
||||
STPUTBIN(startp + 1, len, expdest);
|
||||
STACKSTRNUL(expdest);
|
||||
user = expdest - len;
|
||||
if (*user == '\0') {
|
||||
home = lookupvar("HOME");
|
||||
} else {
|
||||
pw = getpwnam(startp+1);
|
||||
pw = getpwnam(user);
|
||||
home = pw != NULL ? pw->pw_dir : NULL;
|
||||
}
|
||||
*p = c;
|
||||
STADJUST(-len, expdest);
|
||||
if (home == NULL || *home == '\0')
|
||||
return (startp);
|
||||
strtodest(home, flag, VSNORMAL, 1, NULL);
|
||||
@ -398,8 +404,8 @@ exptilde(char *p, int flag)
|
||||
/*
|
||||
* Expand arithmetic expression.
|
||||
*/
|
||||
static char *
|
||||
expari(char *p, int flag, struct worddest *dst)
|
||||
static const char *
|
||||
expari(const char *p, int flag, struct worddest *dst)
|
||||
{
|
||||
char *q, *start;
|
||||
arith_t result;
|
||||
@ -532,7 +538,7 @@ recordleft(const char *str, const char *loc, char *startp)
|
||||
}
|
||||
|
||||
static void
|
||||
subevalvar_trim(char *p, int strloc, int subtype, int startloc)
|
||||
subevalvar_trim(const char *p, int strloc, int subtype, int startloc)
|
||||
{
|
||||
char *startp;
|
||||
char *loc = NULL;
|
||||
@ -606,7 +612,7 @@ subevalvar_trim(char *p, int strloc, int subtype, int startloc)
|
||||
|
||||
|
||||
static int
|
||||
subevalvar_misc(char *p, const char *var, int subtype, int startloc,
|
||||
subevalvar_misc(const char *p, const char *var, int subtype, int startloc,
|
||||
int varflags)
|
||||
{
|
||||
char *startp;
|
||||
@ -645,12 +651,12 @@ subevalvar_misc(char *p, const char *var, int subtype, int startloc,
|
||||
* input string.
|
||||
*/
|
||||
|
||||
static char *
|
||||
evalvar(char *p, int flag, struct worddest *dst)
|
||||
static const char *
|
||||
evalvar(const char *p, int flag, struct worddest *dst)
|
||||
{
|
||||
int subtype;
|
||||
int varflags;
|
||||
char *var;
|
||||
const char *var;
|
||||
const char *val;
|
||||
int patloc;
|
||||
int c;
|
||||
|
@ -70,6 +70,7 @@ struct redirtab {
|
||||
struct redirtab *next;
|
||||
int renamed[10];
|
||||
int fd0_redirected;
|
||||
unsigned int empty_redirs;
|
||||
};
|
||||
|
||||
|
||||
@ -82,6 +83,9 @@ static struct redirtab *redirlist;
|
||||
*/
|
||||
static int fd0_redirected = 0;
|
||||
|
||||
/* Number of redirtabs that have not been allocated. */
|
||||
static unsigned int empty_redirs = 0;
|
||||
|
||||
static void openredirect(union node *, char[10 ]);
|
||||
static int openhere(union node *);
|
||||
|
||||
@ -115,12 +119,17 @@ redirect(union node *redir, int flags)
|
||||
memory[i] = 0;
|
||||
memory[1] = flags & REDIR_BACKQ;
|
||||
if (flags & REDIR_PUSH) {
|
||||
sv = ckmalloc(sizeof (struct redirtab));
|
||||
for (i = 0 ; i < 10 ; i++)
|
||||
sv->renamed[i] = EMPTY;
|
||||
sv->fd0_redirected = fd0_redirected;
|
||||
sv->next = redirlist;
|
||||
redirlist = sv;
|
||||
empty_redirs++;
|
||||
if (redir != NULL) {
|
||||
sv = ckmalloc(sizeof (struct redirtab));
|
||||
for (i = 0 ; i < 10 ; i++)
|
||||
sv->renamed[i] = EMPTY;
|
||||
sv->fd0_redirected = fd0_redirected;
|
||||
sv->empty_redirs = empty_redirs - 1;
|
||||
sv->next = redirlist;
|
||||
redirlist = sv;
|
||||
empty_redirs = 0;
|
||||
}
|
||||
}
|
||||
for (n = redir ; n ; n = n->nfile.next) {
|
||||
fd = n->nfile.fd;
|
||||
@ -303,6 +312,12 @@ popredir(void)
|
||||
struct redirtab *rp = redirlist;
|
||||
int i;
|
||||
|
||||
INTOFF;
|
||||
if (empty_redirs > 0) {
|
||||
empty_redirs--;
|
||||
INTON;
|
||||
return;
|
||||
}
|
||||
for (i = 0 ; i < 10 ; i++) {
|
||||
if (rp->renamed[i] != EMPTY) {
|
||||
if (rp->renamed[i] >= 0) {
|
||||
@ -313,8 +328,8 @@ popredir(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
INTOFF;
|
||||
fd0_redirected = rp->fd0_redirected;
|
||||
empty_redirs = rp->empty_redirs;
|
||||
redirlist = rp->next;
|
||||
ckfree(rp);
|
||||
INTON;
|
||||
|
25
bin/sh/sh.1
25
bin/sh/sh.1
@ -32,7 +32,7 @@
|
||||
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd August 29, 2015
|
||||
.Dd January 30, 2016
|
||||
.Dt SH 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -1952,13 +1952,20 @@ Execute the specified built-in command,
|
||||
This is useful when the user wishes to override a shell function
|
||||
with the same name as a built-in command.
|
||||
.It Ic cd Oo Fl L | P Oc Oo Fl e Oc Op Ar directory
|
||||
.It Ic cd Fl
|
||||
Switch to the specified
|
||||
.Ar directory ,
|
||||
or to the directory specified in the
|
||||
to the directory specified in the
|
||||
.Va HOME
|
||||
environment variable if no
|
||||
.Ar directory
|
||||
is specified.
|
||||
is specified or
|
||||
to the directory specified in the
|
||||
.Va OLDPWD
|
||||
environment variable if
|
||||
.Ar directory
|
||||
is
|
||||
.Fl .
|
||||
If
|
||||
.Ar directory
|
||||
does not begin with
|
||||
@ -1982,10 +1989,12 @@ the
|
||||
.Ic cd
|
||||
command will print out the name of the directory
|
||||
that it actually switched to
|
||||
if this is different from the name that the user gave.
|
||||
These may be different either because the
|
||||
if the
|
||||
.Va CDPATH
|
||||
mechanism was used or because a symbolic link was crossed.
|
||||
mechanism was used or if
|
||||
.Ar directory
|
||||
was
|
||||
.Fl .
|
||||
.Pp
|
||||
If the
|
||||
.Fl P
|
||||
@ -2774,6 +2783,10 @@ Initialization file for interactive shells.
|
||||
Locale settings.
|
||||
These are inherited by children of the shell,
|
||||
and is used in a limited manner by the shell itself.
|
||||
.It Ev OLDPWD
|
||||
The previous current directory.
|
||||
This is used and updated by
|
||||
.Ic cd .
|
||||
.It Ev PWD
|
||||
An absolute pathname for the current directory,
|
||||
possibly containing symbolic links.
|
||||
|
@ -112,6 +112,8 @@ FILES+= local2.0
|
||||
FILES+= local3.0
|
||||
FILES+= local4.0
|
||||
FILES+= local5.0
|
||||
FILES+= local6.0
|
||||
FILES+= local7.0
|
||||
.if ${MK_NLS} != "no"
|
||||
FILES+= locale1.0
|
||||
.endif
|
||||
|
10
bin/sh/tests/builtins/local6.0
Normal file
10
bin/sh/tests/builtins/local6.0
Normal file
@ -0,0 +1,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
f() {
|
||||
local x
|
||||
readonly x=2
|
||||
}
|
||||
x=3
|
||||
f
|
||||
x=4
|
||||
[ "$x" = 4 ]
|
10
bin/sh/tests/builtins/local7.0
Normal file
10
bin/sh/tests/builtins/local7.0
Normal file
@ -0,0 +1,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
f() {
|
||||
local x
|
||||
readonly x=2
|
||||
}
|
||||
unset x
|
||||
f
|
||||
x=4
|
||||
[ "$x" = 4 ]
|
@ -802,6 +802,7 @@ poplocalvars(void)
|
||||
ckfree(lvp->text);
|
||||
optschanged();
|
||||
} else if ((lvp->flags & (VUNSET|VSTRFIXED)) == VUNSET) {
|
||||
vp->flags &= ~VREADONLY;
|
||||
(void)unsetvar(vp->text);
|
||||
} else {
|
||||
islocalevar = (vp->flags | lvp->flags) & VEXPORT &&
|
||||
|
166
bin/test/test.c
166
bin/test/test.c
@ -120,51 +120,53 @@ enum token {
|
||||
|
||||
#define TOKEN_TYPE(token) ((token) & 0xff00)
|
||||
|
||||
static struct t_op {
|
||||
char op_text[4];
|
||||
static const struct t_op {
|
||||
char op_text[2];
|
||||
short op_num;
|
||||
} const ops [] = {
|
||||
{"-r", FILRD},
|
||||
{"-w", FILWR},
|
||||
{"-x", FILEX},
|
||||
{"-e", FILEXIST},
|
||||
{"-f", FILREG},
|
||||
{"-d", FILDIR},
|
||||
{"-c", FILCDEV},
|
||||
{"-b", FILBDEV},
|
||||
{"-p", FILFIFO},
|
||||
{"-u", FILSUID},
|
||||
{"-g", FILSGID},
|
||||
{"-k", FILSTCK},
|
||||
{"-s", FILGZ},
|
||||
{"-t", FILTT},
|
||||
{"-z", STREZ},
|
||||
{"-n", STRNZ},
|
||||
{"-h", FILSYM}, /* for backwards compat */
|
||||
{"-O", FILUID},
|
||||
{"-G", FILGID},
|
||||
{"-L", FILSYM},
|
||||
{"-S", FILSOCK},
|
||||
} ops1[] = {
|
||||
{"=", STREQ},
|
||||
{"==", STREQ},
|
||||
{"!=", STRNE},
|
||||
{"<", STRLT},
|
||||
{">", STRGT},
|
||||
{"-eq", INTEQ},
|
||||
{"-ne", INTNE},
|
||||
{"-ge", INTGE},
|
||||
{"-gt", INTGT},
|
||||
{"-le", INTLE},
|
||||
{"-lt", INTLT},
|
||||
{"-nt", FILNT},
|
||||
{"-ot", FILOT},
|
||||
{"-ef", FILEQ},
|
||||
{"!", UNOT},
|
||||
{"-a", BAND},
|
||||
{"-o", BOR},
|
||||
{"(", LPAREN},
|
||||
{")", RPAREN},
|
||||
{"", 0}
|
||||
}, opsm1[] = {
|
||||
{"r", FILRD},
|
||||
{"w", FILWR},
|
||||
{"x", FILEX},
|
||||
{"e", FILEXIST},
|
||||
{"f", FILREG},
|
||||
{"d", FILDIR},
|
||||
{"c", FILCDEV},
|
||||
{"b", FILBDEV},
|
||||
{"p", FILFIFO},
|
||||
{"u", FILSUID},
|
||||
{"g", FILSGID},
|
||||
{"k", FILSTCK},
|
||||
{"s", FILGZ},
|
||||
{"t", FILTT},
|
||||
{"z", STREZ},
|
||||
{"n", STRNZ},
|
||||
{"h", FILSYM}, /* for backwards compat */
|
||||
{"O", FILUID},
|
||||
{"G", FILGID},
|
||||
{"L", FILSYM},
|
||||
{"S", FILSOCK},
|
||||
{"a", BAND},
|
||||
{"o", BOR},
|
||||
}, ops2[] = {
|
||||
{"==", STREQ},
|
||||
{"!=", STRNE},
|
||||
}, opsm2[] = {
|
||||
{"eq", INTEQ},
|
||||
{"ne", INTNE},
|
||||
{"ge", INTGE},
|
||||
{"gt", INTGT},
|
||||
{"le", INTLE},
|
||||
{"lt", INTLT},
|
||||
{"nt", FILNT},
|
||||
{"ot", FILOT},
|
||||
{"ef", FILEQ},
|
||||
};
|
||||
|
||||
static int nargc;
|
||||
@ -416,35 +418,71 @@ filstat(char *nm, enum token mode)
|
||||
}
|
||||
}
|
||||
|
||||
static enum token
|
||||
t_lex(char *s)
|
||||
static int
|
||||
find_op_1char(const struct t_op *op, const struct t_op *end, const char *s)
|
||||
{
|
||||
struct t_op const *op = ops;
|
||||
char c;
|
||||
|
||||
if (s == 0) {
|
||||
return EOI;
|
||||
}
|
||||
while (*op->op_text) {
|
||||
if (strcmp(s, op->op_text) == 0) {
|
||||
if (((TOKEN_TYPE(op->op_num) == UNOP ||
|
||||
TOKEN_TYPE(op->op_num) == BUNOP)
|
||||
&& isunopoperand()) ||
|
||||
(op->op_num == LPAREN && islparenoperand()) ||
|
||||
(op->op_num == RPAREN && isrparenoperand()))
|
||||
break;
|
||||
c = s[0];
|
||||
while (op != end) {
|
||||
if (c == *op->op_text)
|
||||
return op->op_num;
|
||||
}
|
||||
op++;
|
||||
}
|
||||
return OPERAND;
|
||||
}
|
||||
|
||||
static int
|
||||
find_op_2char(const struct t_op *op, const struct t_op *end, const char *s)
|
||||
{
|
||||
while (op != end) {
|
||||
if (s[0] == op->op_text[0] && s[1] == op->op_text[1])
|
||||
return op->op_num;
|
||||
op++;
|
||||
}
|
||||
return OPERAND;
|
||||
}
|
||||
|
||||
static int
|
||||
find_op(const char *s)
|
||||
{
|
||||
if (s[0] == '\0')
|
||||
return OPERAND;
|
||||
else if (s[1] == '\0')
|
||||
return find_op_1char(ops1, (&ops1)[1], s);
|
||||
else if (s[2] == '\0')
|
||||
return s[0] == '-' ? find_op_1char(opsm1, (&opsm1)[1], s + 1) :
|
||||
find_op_2char(ops2, (&ops2)[1], s);
|
||||
else if (s[3] == '\0')
|
||||
return s[0] == '-' ? find_op_2char(opsm2, (&opsm2)[1], s + 1) :
|
||||
OPERAND;
|
||||
else
|
||||
return OPERAND;
|
||||
}
|
||||
|
||||
static enum token
|
||||
t_lex(char *s)
|
||||
{
|
||||
int num;
|
||||
|
||||
if (s == 0) {
|
||||
return EOI;
|
||||
}
|
||||
num = find_op(s);
|
||||
if (((TOKEN_TYPE(num) == UNOP || TOKEN_TYPE(num) == BUNOP)
|
||||
&& isunopoperand()) ||
|
||||
(num == LPAREN && islparenoperand()) ||
|
||||
(num == RPAREN && isrparenoperand()))
|
||||
return OPERAND;
|
||||
return num;
|
||||
}
|
||||
|
||||
static int
|
||||
isunopoperand(void)
|
||||
{
|
||||
struct t_op const *op = ops;
|
||||
char *s;
|
||||
char *t;
|
||||
int num;
|
||||
|
||||
if (nargc == 1)
|
||||
return 1;
|
||||
@ -452,20 +490,16 @@ isunopoperand(void)
|
||||
if (nargc == 2)
|
||||
return parenlevel == 1 && strcmp(s, ")") == 0;
|
||||
t = *(t_wp + 2);
|
||||
while (*op->op_text) {
|
||||
if (strcmp(s, op->op_text) == 0)
|
||||
return TOKEN_TYPE(op->op_num) == BINOP &&
|
||||
(parenlevel == 0 || t[0] != ')' || t[1] != '\0');
|
||||
op++;
|
||||
}
|
||||
return 0;
|
||||
num = find_op(s);
|
||||
return TOKEN_TYPE(num) == BINOP &&
|
||||
(parenlevel == 0 || t[0] != ')' || t[1] != '\0');
|
||||
}
|
||||
|
||||
static int
|
||||
islparenoperand(void)
|
||||
{
|
||||
struct t_op const *op = ops;
|
||||
char *s;
|
||||
int num;
|
||||
|
||||
if (nargc == 1)
|
||||
return 1;
|
||||
@ -474,12 +508,8 @@ islparenoperand(void)
|
||||
return parenlevel == 1 && strcmp(s, ")") == 0;
|
||||
if (nargc != 3)
|
||||
return 0;
|
||||
while (*op->op_text) {
|
||||
if (strcmp(s, op->op_text) == 0)
|
||||
return TOKEN_TYPE(op->op_num) == BINOP;
|
||||
op++;
|
||||
}
|
||||
return 0;
|
||||
num = find_op(s);
|
||||
return TOKEN_TYPE(num) == BINOP;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -2841,8 +2841,11 @@ Do not actually receive the stream. This can be useful in conjunction with the
|
||||
option to verify the name the receive operation would use.
|
||||
.It Fl o Sy origin Ns = Ns Ar snapshot
|
||||
Forces the stream to be received as a clone of the given snapshot.
|
||||
This is only valid if the stream is an incremental stream whose source
|
||||
is the same as the provided origin.
|
||||
If the stream is a full send stream, this will create the filesystem
|
||||
described by the stream as a clone of the specified snapshot. Which
|
||||
snapshot was specified will not affect the success or failure of the
|
||||
receive, as long as the snapshot does exist. If the stream is an
|
||||
incremental send stream, all the normal verification will be performed.
|
||||
.It Fl F
|
||||
Force a rollback of the file system to the most recent snapshot before
|
||||
performing the receive operation. If receiving an incremental replication
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2012 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2015 by Syneto S.R.L. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -246,8 +247,9 @@ zpool_get_features(zpool_handle_t *zhp)
|
||||
config = zpool_get_config(zhp, NULL);
|
||||
}
|
||||
|
||||
verify(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_FEATURE_STATS,
|
||||
&features) == 0);
|
||||
if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_FEATURE_STATS,
|
||||
&features) != 0)
|
||||
return (NULL);
|
||||
|
||||
return (features);
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
* Copyright (c) 2012 Pawel Jakub Dawidek <pawel@dawidek.net>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2013 Steven Hartland. All rights reserved.
|
||||
* Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
@ -67,7 +68,7 @@ extern void zfs_setprop_error(libzfs_handle_t *, zfs_prop_t, int, char *);
|
||||
|
||||
static int zfs_receive_impl(libzfs_handle_t *, const char *, const char *,
|
||||
recvflags_t *, int, const char *, nvlist_t *, avl_tree_t *, char **, int,
|
||||
uint64_t *);
|
||||
uint64_t *, const char *);
|
||||
static int guid_to_name(libzfs_handle_t *, const char *,
|
||||
uint64_t, boolean_t, char *);
|
||||
|
||||
@ -2602,6 +2603,7 @@ zfs_receive_package(libzfs_handle_t *hdl, int fd, const char *destname,
|
||||
nvlist_t *stream_nv = NULL;
|
||||
avl_tree_t *stream_avl = NULL;
|
||||
char *fromsnap = NULL;
|
||||
char *sendsnap = NULL;
|
||||
char *cp;
|
||||
char tofs[ZFS_MAXNAMELEN];
|
||||
char sendfs[ZFS_MAXNAMELEN];
|
||||
@ -2750,8 +2752,16 @@ zfs_receive_package(libzfs_handle_t *hdl, int fd, const char *destname,
|
||||
*/
|
||||
(void) strlcpy(sendfs, drr->drr_u.drr_begin.drr_toname,
|
||||
ZFS_MAXNAMELEN);
|
||||
if ((cp = strchr(sendfs, '@')) != NULL)
|
||||
if ((cp = strchr(sendfs, '@')) != NULL) {
|
||||
*cp = '\0';
|
||||
/*
|
||||
* Find the "sendsnap", the final snapshot in a replication
|
||||
* stream. zfs_receive_one() handles certain errors
|
||||
* differently, depending on if the contained stream is the
|
||||
* last one or not.
|
||||
*/
|
||||
sendsnap = (cp + 1);
|
||||
}
|
||||
|
||||
/* Finally, receive each contained stream */
|
||||
do {
|
||||
@ -2764,7 +2774,7 @@ zfs_receive_package(libzfs_handle_t *hdl, int fd, const char *destname,
|
||||
*/
|
||||
error = zfs_receive_impl(hdl, destname, NULL, flags, fd,
|
||||
sendfs, stream_nv, stream_avl, top_zfs, cleanup_fd,
|
||||
action_handlep);
|
||||
action_handlep, sendsnap);
|
||||
if (error == ENODATA) {
|
||||
error = 0;
|
||||
break;
|
||||
@ -2930,7 +2940,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap,
|
||||
const char *originsnap, recvflags_t *flags, dmu_replay_record_t *drr,
|
||||
dmu_replay_record_t *drr_noswap, const char *sendfs, nvlist_t *stream_nv,
|
||||
avl_tree_t *stream_avl, char **top_zfs, int cleanup_fd,
|
||||
uint64_t *action_handlep)
|
||||
uint64_t *action_handlep, const char *finalsnap)
|
||||
{
|
||||
zfs_cmd_t zc = { 0 };
|
||||
time_t begin_time;
|
||||
@ -2947,6 +2957,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap,
|
||||
nvlist_t *snapprops_nvlist = NULL;
|
||||
zprop_errflags_t prop_errflags;
|
||||
boolean_t recursive;
|
||||
char *snapname = NULL;
|
||||
|
||||
begin_time = time(NULL);
|
||||
|
||||
@ -2957,7 +2968,6 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap,
|
||||
ENOENT);
|
||||
|
||||
if (stream_avl != NULL) {
|
||||
char *snapname;
|
||||
nvlist_t *fs = fsavl_find(stream_avl, drrb->drr_toguid,
|
||||
&snapname);
|
||||
nvlist_t *props;
|
||||
@ -3313,7 +3323,21 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap,
|
||||
ZPROP_N_MORE_ERRORS) == 0) {
|
||||
trunc_prop_errs(intval);
|
||||
break;
|
||||
} else {
|
||||
} else if (snapname == NULL || finalsnap == NULL ||
|
||||
strcmp(finalsnap, snapname) == 0 ||
|
||||
strcmp(nvpair_name(prop_err),
|
||||
zfs_prop_to_name(ZFS_PROP_REFQUOTA)) != 0) {
|
||||
/*
|
||||
* Skip the special case of, for example,
|
||||
* "refquota", errors on intermediate
|
||||
* snapshots leading up to a final one.
|
||||
* That's why we have all of the checks above.
|
||||
*
|
||||
* See zfs_ioctl.c's extract_delay_props() for
|
||||
* a list of props which can fail on
|
||||
* intermediate snapshots, but shouldn't
|
||||
* affect the overall receive.
|
||||
*/
|
||||
(void) snprintf(tbuf, sizeof (tbuf),
|
||||
dgettext(TEXT_DOMAIN,
|
||||
"cannot receive %s property on %s"),
|
||||
@ -3498,7 +3522,7 @@ static int
|
||||
zfs_receive_impl(libzfs_handle_t *hdl, const char *tosnap,
|
||||
const char *originsnap, recvflags_t *flags, int infd, const char *sendfs,
|
||||
nvlist_t *stream_nv, avl_tree_t *stream_avl, char **top_zfs, int cleanup_fd,
|
||||
uint64_t *action_handlep)
|
||||
uint64_t *action_handlep, const char *finalsnap)
|
||||
{
|
||||
int err;
|
||||
dmu_replay_record_t drr, drr_noswap;
|
||||
@ -3594,10 +3618,11 @@ zfs_receive_impl(libzfs_handle_t *hdl, const char *tosnap,
|
||||
if ((cp = strchr(nonpackage_sendfs, '@')) != NULL)
|
||||
*cp = '\0';
|
||||
sendfs = nonpackage_sendfs;
|
||||
VERIFY(finalsnap == NULL);
|
||||
}
|
||||
return (zfs_receive_one(hdl, infd, tosnap, originsnap, flags,
|
||||
&drr, &drr_noswap, sendfs, stream_nv, stream_avl, top_zfs,
|
||||
cleanup_fd, action_handlep));
|
||||
cleanup_fd, action_handlep, finalsnap));
|
||||
} else {
|
||||
assert(DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo) ==
|
||||
DMU_COMPOUNDSTREAM);
|
||||
@ -3632,7 +3657,7 @@ zfs_receive(libzfs_handle_t *hdl, const char *tosnap, nvlist_t *props,
|
||||
VERIFY(cleanup_fd >= 0);
|
||||
|
||||
err = zfs_receive_impl(hdl, tosnap, originsnap, flags, infd, NULL, NULL,
|
||||
stream_avl, &top_zfs, cleanup_fd, &action_handle);
|
||||
stream_avl, &top_zfs, cleanup_fd, &action_handle, NULL);
|
||||
|
||||
VERIFY(0 == close(cleanup_fd));
|
||||
|
||||
|
@ -26,7 +26,7 @@ _libzpool= libzpool
|
||||
.endif
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} != "sparc64"
|
||||
.if ${MACHINE_CPUARCH} != "sparc64" && ${MACHINE_CPUARCH} != "riscv"
|
||||
_drti= drti
|
||||
_libdtrace= libdtrace
|
||||
.endif
|
||||
|
@ -982,7 +982,7 @@ handle_rtmsg(struct rt_msghdr *rtm)
|
||||
{
|
||||
struct sockaddr *addrs[RTAX_MAX];
|
||||
struct if_msghdr *ifm;
|
||||
struct ifa_msghdr ifam;
|
||||
struct ifa_msghdr ifam, *ifamp;
|
||||
struct ifma_msghdr *ifmam;
|
||||
#ifdef RTM_IFANNOUNCE
|
||||
struct if_announcemsghdr *ifan;
|
||||
@ -1002,8 +1002,9 @@ handle_rtmsg(struct rt_msghdr *rtm)
|
||||
switch (rtm->rtm_type) {
|
||||
|
||||
case RTM_NEWADDR:
|
||||
memcpy(&ifam, rtm, sizeof(ifam));
|
||||
mib_extract_addrs(ifam.ifam_addrs, (u_char *)(&ifam + 1), addrs);
|
||||
ifamp = (struct ifa_msghdr *)rtm;
|
||||
memcpy(&ifam, ifamp, sizeof(ifam));
|
||||
mib_extract_addrs(ifam.ifam_addrs, (u_char *)(ifamp + 1), addrs);
|
||||
if (addrs[RTAX_IFA] == NULL || addrs[RTAX_NETMASK] == NULL)
|
||||
break;
|
||||
|
||||
@ -1029,8 +1030,9 @@ handle_rtmsg(struct rt_msghdr *rtm)
|
||||
break;
|
||||
|
||||
case RTM_DELADDR:
|
||||
memcpy(&ifam, rtm, sizeof(ifam));
|
||||
mib_extract_addrs(ifam.ifam_addrs, (u_char *)(&ifam + 1), addrs);
|
||||
ifamp = (struct ifa_msghdr *)rtm;
|
||||
memcpy(&ifam, ifamp, sizeof(ifam));
|
||||
mib_extract_addrs(ifam.ifam_addrs, (u_char *)(ifamp + 1), addrs);
|
||||
if (addrs[RTAX_IFA] == NULL)
|
||||
break;
|
||||
|
||||
|
@ -45,10 +45,10 @@ struct tcp_index {
|
||||
};
|
||||
|
||||
static uint64_t tcp_tick;
|
||||
static uint64_t tcp_stats_tick;
|
||||
static struct tcpstat tcpstat;
|
||||
static struct xinpgen *xinpgen;
|
||||
static size_t xinpgen_len;
|
||||
static u_int tcp_count;
|
||||
static u_int tcp_total;
|
||||
|
||||
static u_int oidnum;
|
||||
@ -64,13 +64,9 @@ tcp_compare(const void *p1, const void *p2)
|
||||
}
|
||||
|
||||
static int
|
||||
fetch_tcp(void)
|
||||
fetch_tcp_stats(void)
|
||||
{
|
||||
size_t len;
|
||||
struct xinpgen *ptr;
|
||||
struct xtcpcb *tp;
|
||||
struct tcp_index *oid;
|
||||
in_addr_t inaddr;
|
||||
|
||||
len = sizeof(tcpstat);
|
||||
if (sysctlbyname("net.inet.tcp.stats", &tcpstat, &len, NULL, 0) == -1) {
|
||||
@ -82,6 +78,20 @@ fetch_tcp(void)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
tcp_stats_tick = get_ticks();
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
fetch_tcp(void)
|
||||
{
|
||||
size_t len;
|
||||
struct xinpgen *ptr;
|
||||
struct xtcpcb *tp;
|
||||
struct tcp_index *oid;
|
||||
in_addr_t inaddr;
|
||||
|
||||
len = 0;
|
||||
if (sysctlbyname("net.inet.tcp.pcblist", NULL, &len, NULL, 0) == -1) {
|
||||
syslog(LOG_ERR, "net.inet.tcp.pcblist: %m");
|
||||
@ -102,7 +112,6 @@ fetch_tcp(void)
|
||||
|
||||
tcp_tick = get_ticks();
|
||||
|
||||
tcp_count = 0;
|
||||
tcp_total = 0;
|
||||
for (ptr = (struct xinpgen *)(void *)((char *)xinpgen + xinpgen->xig_len);
|
||||
ptr->xig_len > sizeof(struct xinpgen);
|
||||
@ -114,10 +123,6 @@ fetch_tcp(void)
|
||||
|
||||
if (tp->xt_inp.inp_vflag & INP_IPV4)
|
||||
tcp_total++;
|
||||
|
||||
if (tp->xt_tp.t_state == TCPS_ESTABLISHED ||
|
||||
tp->xt_tp.t_state == TCPS_CLOSE_WAIT)
|
||||
tcp_count++;
|
||||
}
|
||||
|
||||
if (oidnum < tcp_total) {
|
||||
@ -184,8 +189,8 @@ op_tcp(struct snmp_context *ctx __unused, struct snmp_value *value,
|
||||
abort();
|
||||
}
|
||||
|
||||
if (tcp_tick < this_tick)
|
||||
if (fetch_tcp() == -1)
|
||||
if (tcp_stats_tick < this_tick)
|
||||
if (fetch_tcp_stats() == -1)
|
||||
return (SNMP_ERR_GENERR);
|
||||
|
||||
switch (value->var.subs[sub - 1]) {
|
||||
@ -226,7 +231,8 @@ op_tcp(struct snmp_context *ctx __unused, struct snmp_value *value,
|
||||
break;
|
||||
|
||||
case LEAF_tcpCurrEstab:
|
||||
value->v.uint32 = tcp_count;
|
||||
value->v.uint32 = tcpstat.tcps_states[TCPS_ESTABLISHED] +
|
||||
tcpstat.tcps_states[TCPS_CLOSE_WAIT];
|
||||
break;
|
||||
|
||||
case LEAF_tcpInSegs:
|
||||
|
@ -74,11 +74,13 @@
|
||||
* global header to prevent other C files from making the detour
|
||||
* through __c?zdi2() as well.
|
||||
*
|
||||
* This problem has only been observed on FreeBSD for sparc64 and
|
||||
* mips64 with GCC 4.2.1.
|
||||
* This problem has been observed on FreeBSD for sparc64 and
|
||||
* mips64 with GCC 4.2.1, and for riscv with GCC 5.2.0.
|
||||
* Presumably it's any version of GCC, and targeting an arch that
|
||||
* does not have dedicated bit counting instructions.
|
||||
*/
|
||||
#if defined(__FreeBSD__) && (defined(__sparc64__) || \
|
||||
defined(__mips_n64) || defined(__mips_o64))
|
||||
defined(__mips_n64) || defined(__mips_o64) || defined(__riscv__))
|
||||
si_int __clzsi2(si_int);
|
||||
si_int __ctzsi2(si_int);
|
||||
#define __builtin_clz __clzsi2
|
||||
|
@ -76,6 +76,10 @@ namespace __sanitizer {
|
||||
#elif defined(__powerpc64__)
|
||||
const unsigned struct_kernel_stat_sz = 144;
|
||||
const unsigned struct_kernel_stat64_sz = 104;
|
||||
#elif defined(__riscv__)
|
||||
/* RISCVTODO: check that these values are correct */
|
||||
const unsigned struct_kernel_stat_sz = 128;
|
||||
const unsigned struct_kernel_stat64_sz = 128;
|
||||
#elif defined(__mips__)
|
||||
#if SANITIZER_WORDSIZE == 64
|
||||
const unsigned struct_kernel_stat_sz = 216;
|
||||
@ -103,7 +107,7 @@ namespace __sanitizer {
|
||||
|
||||
#if SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
|
||||
#if defined(__powerpc64__)
|
||||
#if defined(__powerpc64__) || defined(__riscv__)
|
||||
const unsigned struct___old_kernel_stat_sz = 0;
|
||||
#else
|
||||
const unsigned struct___old_kernel_stat_sz = 32;
|
||||
@ -481,7 +485,7 @@ namespace __sanitizer {
|
||||
typedef long __sanitizer___kernel_off_t;
|
||||
#endif
|
||||
|
||||
#if defined(__powerpc__) || defined(__mips__)
|
||||
#if defined(__powerpc__) || defined(__mips__) || defined(__riscv__)
|
||||
typedef unsigned int __sanitizer___kernel_old_uid_t;
|
||||
typedef unsigned int __sanitizer___kernel_old_gid_t;
|
||||
#else
|
||||
|
@ -97,6 +97,12 @@
|
||||
#define LIBELF_BYTEORDER ELFDATA2MSB
|
||||
#define LIBELF_CLASS ELFCLASS32
|
||||
|
||||
#elif defined(__riscv64)
|
||||
|
||||
#define LIBELF_ARCH EM_RISCV
|
||||
#define LIBELF_BYTEORDER ELFDATA2LSB
|
||||
#define LIBELF_CLASS ELFCLASS64
|
||||
|
||||
#elif defined(__sparc__)
|
||||
|
||||
#define LIBELF_ARCH EM_SPARCV9
|
||||
|
6
contrib/gcc/config/riscv64/freebsd.h
Normal file
6
contrib/gcc/config/riscv64/freebsd.h
Normal file
@ -0,0 +1,6 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#undef INIT_SECTION_ASM_OP
|
||||
#undef FINI_SECTION_ASM_OP
|
||||
#define INIT_ARRAY_SECTION_ASM_OP "\t.section\t.init_array,\"aw\",%init_array"
|
||||
#define FINI_ARRAY_SECTION_ASM_OP "\t.section\t.fini_array,\"aw\",%fini_array"
|
1
contrib/gcc/config/riscv64/riscv64.h
Normal file
1
contrib/gcc/config/riscv64/riscv64.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
@ -253,6 +253,9 @@ typedef unsigned szind_t;
|
||||
# ifdef __powerpc__
|
||||
# define LG_QUANTUM 4
|
||||
# endif
|
||||
# ifdef __riscv__
|
||||
# define LG_QUANTUM 4
|
||||
# endif
|
||||
# ifdef __s390__
|
||||
# define LG_QUANTUM 4
|
||||
# endif
|
||||
|
@ -52,6 +52,9 @@
|
||||
#elif defined(__powerpc__)
|
||||
# define LG_SIZEOF_PTR 2
|
||||
#endif
|
||||
#ifdef __riscv__
|
||||
# define LG_SIZEOF_PTR 3
|
||||
#endif
|
||||
|
||||
#ifndef JEMALLOC_TLS_MODEL
|
||||
# define JEMALLOC_TLS_MODEL /* Default. */
|
||||
|
8
contrib/libucl/tests/.gitignore
vendored
8
contrib/libucl/tests/.gitignore
vendored
@ -1,8 +0,0 @@
|
||||
*.log
|
||||
*.trs
|
||||
*.plist
|
||||
|
||||
test_basic
|
||||
test_generate
|
||||
test_schema
|
||||
test_speed
|
46
contrib/libxo/.gitignore
vendored
46
contrib/libxo/.gitignore
vendored
@ -1,46 +0,0 @@
|
||||
# Object files
|
||||
*.o
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.app
|
||||
|
||||
*~
|
||||
*.orig
|
||||
|
||||
aclocal.m4
|
||||
ar-lib
|
||||
autom4te.cache
|
||||
build
|
||||
compile
|
||||
config.guess
|
||||
config.h.in
|
||||
config.sub
|
||||
depcomp
|
||||
install-sh
|
||||
ltmain.sh
|
||||
missing
|
||||
m4
|
||||
|
||||
Makefile.in
|
||||
configure
|
||||
.DS_Store
|
||||
|
||||
xoconfig.h.in
|
||||
xo_config.h.in
|
||||
|
||||
.gdbinit
|
||||
.gdbinit.local
|
||||
xtest
|
||||
xtest.dSYM
|
||||
tests/w
|
@ -295,6 +295,77 @@ enum {
|
||||
UNW_PPC_SPEFSCR = 112
|
||||
};
|
||||
|
||||
// 64-bit RISC-V registers
|
||||
enum {
|
||||
UNW_RISCV_X0 = 0,
|
||||
UNW_RISCV_X1 = 1,
|
||||
UNW_RISCV_RA = 1,
|
||||
UNW_RISCV_X2 = 2,
|
||||
UNW_RISCV_SP = 2,
|
||||
UNW_RISCV_X3 = 3,
|
||||
UNW_RISCV_X4 = 4,
|
||||
UNW_RISCV_X5 = 5,
|
||||
UNW_RISCV_X6 = 6,
|
||||
UNW_RISCV_X7 = 7,
|
||||
UNW_RISCV_X8 = 8,
|
||||
UNW_RISCV_X9 = 9,
|
||||
UNW_RISCV_X10 = 10,
|
||||
UNW_RISCV_X11 = 11,
|
||||
UNW_RISCV_X12 = 12,
|
||||
UNW_RISCV_X13 = 13,
|
||||
UNW_RISCV_X14 = 14,
|
||||
UNW_RISCV_X15 = 15,
|
||||
UNW_RISCV_X16 = 16,
|
||||
UNW_RISCV_X17 = 17,
|
||||
UNW_RISCV_X18 = 18,
|
||||
UNW_RISCV_X19 = 19,
|
||||
UNW_RISCV_X20 = 20,
|
||||
UNW_RISCV_X21 = 21,
|
||||
UNW_RISCV_X22 = 22,
|
||||
UNW_RISCV_X23 = 23,
|
||||
UNW_RISCV_X24 = 24,
|
||||
UNW_RISCV_X25 = 25,
|
||||
UNW_RISCV_X26 = 26,
|
||||
UNW_RISCV_X27 = 27,
|
||||
UNW_RISCV_X28 = 28,
|
||||
UNW_RISCV_X29 = 29,
|
||||
UNW_RISCV_X30 = 30,
|
||||
UNW_RISCV_X31 = 31,
|
||||
// reserved block
|
||||
UNW_RISCV_D0 = 64,
|
||||
UNW_RISCV_D1 = 65,
|
||||
UNW_RISCV_D2 = 66,
|
||||
UNW_RISCV_D3 = 67,
|
||||
UNW_RISCV_D4 = 68,
|
||||
UNW_RISCV_D5 = 69,
|
||||
UNW_RISCV_D6 = 70,
|
||||
UNW_RISCV_D7 = 71,
|
||||
UNW_RISCV_D8 = 72,
|
||||
UNW_RISCV_D9 = 73,
|
||||
UNW_RISCV_D10 = 74,
|
||||
UNW_RISCV_D11 = 75,
|
||||
UNW_RISCV_D12 = 76,
|
||||
UNW_RISCV_D13 = 77,
|
||||
UNW_RISCV_D14 = 78,
|
||||
UNW_RISCV_D15 = 79,
|
||||
UNW_RISCV_D16 = 80,
|
||||
UNW_RISCV_D17 = 81,
|
||||
UNW_RISCV_D18 = 82,
|
||||
UNW_RISCV_D19 = 83,
|
||||
UNW_RISCV_D20 = 84,
|
||||
UNW_RISCV_D21 = 85,
|
||||
UNW_RISCV_D22 = 86,
|
||||
UNW_RISCV_D23 = 87,
|
||||
UNW_RISCV_D24 = 88,
|
||||
UNW_RISCV_D25 = 89,
|
||||
UNW_RISCV_D26 = 90,
|
||||
UNW_RISCV_D27 = 91,
|
||||
UNW_RISCV_D28 = 92,
|
||||
UNW_RISCV_D29 = 93,
|
||||
UNW_RISCV_D30 = 94,
|
||||
UNW_RISCV_D31 = 95,
|
||||
};
|
||||
|
||||
// 64-bit ARM64 registers
|
||||
enum {
|
||||
UNW_ARM64_X0 = 0,
|
||||
|
@ -1024,6 +1024,264 @@ inline const char *Registers_ppc::getRegisterName(int regNum) {
|
||||
|
||||
}
|
||||
|
||||
/// Registers_riscv holds the register state of a thread in a 64-bit RISC-V
|
||||
/// process.
|
||||
class _LIBUNWIND_HIDDEN Registers_riscv {
|
||||
public:
|
||||
Registers_riscv();
|
||||
Registers_riscv(const void *registers);
|
||||
|
||||
bool validRegister(int num) const;
|
||||
uint64_t getRegister(int num) const;
|
||||
void setRegister(int num, uint64_t value);
|
||||
bool validFloatRegister(int num) const;
|
||||
double getFloatRegister(int num) const;
|
||||
void setFloatRegister(int num, double value);
|
||||
bool validVectorRegister(int num) const;
|
||||
v128 getVectorRegister(int num) const;
|
||||
void setVectorRegister(int num, v128 value);
|
||||
const char *getRegisterName(int num);
|
||||
void jumpto();
|
||||
static int lastDwarfRegNum() { return 95; }
|
||||
|
||||
uint64_t getSP() const { return _registers.__x[2]; }
|
||||
void setSP(uint64_t value) { _registers.__x[2] = value; }
|
||||
uint64_t getIP() const { return _registers.__x[1]; }
|
||||
void setIP(uint64_t value) { _registers.__x[1] = value; }
|
||||
|
||||
private:
|
||||
struct GPRs {
|
||||
uint64_t __x[32]; // x0-x31
|
||||
};
|
||||
|
||||
GPRs _registers;
|
||||
double _vectorHalfRegisters[32];
|
||||
// Currently only the lower double in 128-bit vectore registers
|
||||
// is perserved during unwinding. We could define new register
|
||||
// numbers (> 96) which mean whole vector registers, then this
|
||||
// struct would need to change to contain whole vector registers.
|
||||
};
|
||||
|
||||
inline Registers_riscv::Registers_riscv(const void *registers) {
|
||||
static_assert(sizeof(Registers_riscv) < sizeof(unw_context_t),
|
||||
"riscv registers do not fit into unw_context_t");
|
||||
memcpy(&_registers, registers, sizeof(_registers));
|
||||
static_assert(sizeof(GPRs) == 0x100,
|
||||
"expected VFP registers to be at offset 256");
|
||||
memcpy(_vectorHalfRegisters,
|
||||
static_cast<const uint8_t *>(registers) + sizeof(GPRs),
|
||||
sizeof(_vectorHalfRegisters));
|
||||
}
|
||||
|
||||
inline Registers_riscv::Registers_riscv() {
|
||||
memset(&_registers, 0, sizeof(_registers));
|
||||
memset(&_vectorHalfRegisters, 0, sizeof(_vectorHalfRegisters));
|
||||
}
|
||||
|
||||
inline bool Registers_riscv::validRegister(int regNum) const {
|
||||
if (regNum == UNW_REG_IP)
|
||||
return true;
|
||||
if (regNum == UNW_REG_SP)
|
||||
return true;
|
||||
if (regNum < 0)
|
||||
return false;
|
||||
if (regNum > 95)
|
||||
return false;
|
||||
if ((regNum > 31) && (regNum < 64))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline uint64_t Registers_riscv::getRegister(int regNum) const {
|
||||
if (regNum == UNW_REG_IP)
|
||||
return _registers.__x[1];
|
||||
if (regNum == UNW_REG_SP)
|
||||
return _registers.__x[2];
|
||||
if ((regNum >= 0) && (regNum < 32))
|
||||
return _registers.__x[regNum];
|
||||
_LIBUNWIND_ABORT("unsupported riscv register");
|
||||
}
|
||||
|
||||
inline void Registers_riscv::setRegister(int regNum, uint64_t value) {
|
||||
if (regNum == UNW_REG_IP)
|
||||
_registers.__x[1] = value;
|
||||
else if (regNum == UNW_REG_SP)
|
||||
_registers.__x[2] = value;
|
||||
else if ((regNum >= 0) && (regNum < 32))
|
||||
_registers.__x[regNum] = value;
|
||||
else
|
||||
_LIBUNWIND_ABORT("unsupported riscv register");
|
||||
}
|
||||
|
||||
inline const char *Registers_riscv::getRegisterName(int regNum) {
|
||||
switch (regNum) {
|
||||
case UNW_REG_IP:
|
||||
return "ra";
|
||||
case UNW_REG_SP:
|
||||
return "sp";
|
||||
case UNW_RISCV_X0:
|
||||
return "x0";
|
||||
case UNW_RISCV_X1:
|
||||
return "ra";
|
||||
case UNW_RISCV_X2:
|
||||
return "sp";
|
||||
case UNW_RISCV_X3:
|
||||
return "x3";
|
||||
case UNW_RISCV_X4:
|
||||
return "x4";
|
||||
case UNW_RISCV_X5:
|
||||
return "x5";
|
||||
case UNW_RISCV_X6:
|
||||
return "x6";
|
||||
case UNW_RISCV_X7:
|
||||
return "x7";
|
||||
case UNW_RISCV_X8:
|
||||
return "x8";
|
||||
case UNW_RISCV_X9:
|
||||
return "x9";
|
||||
case UNW_RISCV_X10:
|
||||
return "x10";
|
||||
case UNW_RISCV_X11:
|
||||
return "x11";
|
||||
case UNW_RISCV_X12:
|
||||
return "x12";
|
||||
case UNW_RISCV_X13:
|
||||
return "x13";
|
||||
case UNW_RISCV_X14:
|
||||
return "x14";
|
||||
case UNW_RISCV_X15:
|
||||
return "x15";
|
||||
case UNW_RISCV_X16:
|
||||
return "x16";
|
||||
case UNW_RISCV_X17:
|
||||
return "x17";
|
||||
case UNW_RISCV_X18:
|
||||
return "x18";
|
||||
case UNW_RISCV_X19:
|
||||
return "x19";
|
||||
case UNW_RISCV_X20:
|
||||
return "x20";
|
||||
case UNW_RISCV_X21:
|
||||
return "x21";
|
||||
case UNW_RISCV_X22:
|
||||
return "x22";
|
||||
case UNW_RISCV_X23:
|
||||
return "x23";
|
||||
case UNW_RISCV_X24:
|
||||
return "x24";
|
||||
case UNW_RISCV_X25:
|
||||
return "x25";
|
||||
case UNW_RISCV_X26:
|
||||
return "x26";
|
||||
case UNW_RISCV_X27:
|
||||
return "x27";
|
||||
case UNW_RISCV_X28:
|
||||
return "x28";
|
||||
case UNW_RISCV_X29:
|
||||
return "x29";
|
||||
case UNW_RISCV_X30:
|
||||
return "x30";
|
||||
case UNW_RISCV_X31:
|
||||
return "x31";
|
||||
case UNW_RISCV_D0:
|
||||
return "d0";
|
||||
case UNW_RISCV_D1:
|
||||
return "d1";
|
||||
case UNW_RISCV_D2:
|
||||
return "d2";
|
||||
case UNW_RISCV_D3:
|
||||
return "d3";
|
||||
case UNW_RISCV_D4:
|
||||
return "d4";
|
||||
case UNW_RISCV_D5:
|
||||
return "d5";
|
||||
case UNW_RISCV_D6:
|
||||
return "d6";
|
||||
case UNW_RISCV_D7:
|
||||
return "d7";
|
||||
case UNW_RISCV_D8:
|
||||
return "d8";
|
||||
case UNW_RISCV_D9:
|
||||
return "d9";
|
||||
case UNW_RISCV_D10:
|
||||
return "d10";
|
||||
case UNW_RISCV_D11:
|
||||
return "d11";
|
||||
case UNW_RISCV_D12:
|
||||
return "d12";
|
||||
case UNW_RISCV_D13:
|
||||
return "d13";
|
||||
case UNW_RISCV_D14:
|
||||
return "d14";
|
||||
case UNW_RISCV_D15:
|
||||
return "d15";
|
||||
case UNW_RISCV_D16:
|
||||
return "d16";
|
||||
case UNW_RISCV_D17:
|
||||
return "d17";
|
||||
case UNW_RISCV_D18:
|
||||
return "d18";
|
||||
case UNW_RISCV_D19:
|
||||
return "d19";
|
||||
case UNW_RISCV_D20:
|
||||
return "d20";
|
||||
case UNW_RISCV_D21:
|
||||
return "d21";
|
||||
case UNW_RISCV_D22:
|
||||
return "d22";
|
||||
case UNW_RISCV_D23:
|
||||
return "d23";
|
||||
case UNW_RISCV_D24:
|
||||
return "d24";
|
||||
case UNW_RISCV_D25:
|
||||
return "d25";
|
||||
case UNW_RISCV_D26:
|
||||
return "d26";
|
||||
case UNW_RISCV_D27:
|
||||
return "d27";
|
||||
case UNW_RISCV_D28:
|
||||
return "d28";
|
||||
case UNW_RISCV_D29:
|
||||
return "d29";
|
||||
case UNW_RISCV_D30:
|
||||
return "d30";
|
||||
case UNW_RISCV_D31:
|
||||
return "d31";
|
||||
default:
|
||||
return "unknown register";
|
||||
}
|
||||
}
|
||||
|
||||
inline bool Registers_riscv::validFloatRegister(int regNum) const {
|
||||
if (regNum < UNW_RISCV_D0)
|
||||
return false;
|
||||
if (regNum > UNW_RISCV_D31)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline double Registers_riscv::getFloatRegister(int regNum) const {
|
||||
assert(validFloatRegister(regNum));
|
||||
return _vectorHalfRegisters[regNum - UNW_RISCV_D0];
|
||||
}
|
||||
|
||||
inline void Registers_riscv::setFloatRegister(int regNum, double value) {
|
||||
assert(validFloatRegister(regNum));
|
||||
_vectorHalfRegisters[regNum - UNW_RISCV_D0] = value;
|
||||
}
|
||||
|
||||
inline bool Registers_riscv::validVectorRegister(int) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
inline v128 Registers_riscv::getVectorRegister(int) const {
|
||||
_LIBUNWIND_ABORT("no riscv vector register support yet");
|
||||
}
|
||||
|
||||
inline void Registers_riscv::setVectorRegister(int, v128) {
|
||||
_LIBUNWIND_ABORT("no riscv vector register support yet");
|
||||
}
|
||||
|
||||
|
||||
/// Registers_arm64 holds the register state of a thread in a 64-bit arm
|
||||
/// process.
|
||||
|
@ -562,6 +562,10 @@ private:
|
||||
compact_unwind_encoding_t dwarfEncoding(Registers_or1k &) const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
compact_unwind_encoding_t dwarfEncoding(Registers_riscv &) const {
|
||||
return 0;
|
||||
}
|
||||
#endif // _LIBUNWIND_SUPPORT_DWARF_UNWIND
|
||||
|
||||
|
||||
|
@ -478,4 +478,8 @@ DEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind14Registers_or1k6jumptoEv)
|
||||
l.jr r9
|
||||
l.nop
|
||||
|
||||
#elif defined(__riscv__)
|
||||
|
||||
/* RISCVTODO */
|
||||
|
||||
#endif
|
||||
|
@ -463,4 +463,9 @@ DEFINE_LIBUNWIND_FUNCTION(unw_getcontext)
|
||||
l.sw 116(r3), r29
|
||||
l.sw 120(r3), r30
|
||||
l.sw 124(r3), r31
|
||||
|
||||
#elif defined(__riscv__)
|
||||
|
||||
/* RISCVTODO */
|
||||
|
||||
#endif
|
||||
|
@ -74,7 +74,8 @@
|
||||
#define _LIBUNWIND_BUILD_ZERO_COST_APIS (defined(__i386__) || \
|
||||
defined(__x86_64__) || \
|
||||
defined(__arm__) || \
|
||||
defined(__aarch64__))
|
||||
defined(__aarch64__) || \
|
||||
defined(__riscv__))
|
||||
#define _LIBUNWIND_BUILD_SJLJ_APIS 0
|
||||
#define _LIBUNWIND_SUPPORT_FRAME_APIS (defined(__i386__) || \
|
||||
defined(__x86_64__))
|
||||
|
@ -66,6 +66,9 @@ _LIBUNWIND_EXPORT int unw_init_local(unw_cursor_t *cursor,
|
||||
context, LocalAddressSpace::sThisAddressSpace);
|
||||
#elif defined(__mips__)
|
||||
#warning The MIPS architecture is not supported.
|
||||
#elif defined(__riscv__)
|
||||
new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_riscv>(
|
||||
context, LocalAddressSpace::sThisAddressSpace);
|
||||
#else
|
||||
#error Architecture not supported
|
||||
#endif
|
||||
|
@ -206,7 +206,8 @@ ATF_TC_BODY(mincore_resid, tc)
|
||||
"might be low on memory");
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_REQUIRE(mlock(addr, npgs * page) == 0);
|
||||
ATF_REQUIRE_MSG(mlock(addr, npgs * page) == 0, "mlock failed: %s",
|
||||
strerror(errno));
|
||||
#endif
|
||||
ATF_REQUIRE(check_residency(addr, npgs) == npgs);
|
||||
ATF_REQUIRE(munmap(addr, npgs * page) == 0);
|
||||
|
@ -47,12 +47,89 @@ __RCSID("$NetBSD: t_mlock.c,v 1.5 2014/02/26 20:49:26 martin Exp $");
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <limits.h>
|
||||
#define _KMEMUSER
|
||||
#include <machine/vmparam.h>
|
||||
#endif
|
||||
|
||||
static long page = 0;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#define VM_MAX_WIRED "vm.max_wired"
|
||||
|
||||
static void
|
||||
vm_max_wired_sysctl(int *old_value, int *new_value)
|
||||
{
|
||||
size_t old_len;
|
||||
size_t new_len = (new_value == NULL ? 0 : sizeof(int));
|
||||
|
||||
if (old_value == NULL)
|
||||
printf("Setting the new value to %d\n", *new_value);
|
||||
else {
|
||||
ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, NULL, &old_len,
|
||||
new_value, new_len) == 0,
|
||||
"sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
|
||||
}
|
||||
|
||||
ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, old_value, &old_len,
|
||||
new_value, new_len) == 0,
|
||||
"sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
|
||||
|
||||
if (old_value != NULL)
|
||||
printf("Saved the old value (%d)\n", *old_value);
|
||||
}
|
||||
|
||||
static void
|
||||
set_vm_max_wired(int new_value)
|
||||
{
|
||||
FILE *fp;
|
||||
int old_value;
|
||||
|
||||
fp = fopen(VM_MAX_WIRED, "w");
|
||||
if (fp == NULL) {
|
||||
atf_tc_skip("could not open %s for writing: %s",
|
||||
VM_MAX_WIRED, strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
||||
vm_max_wired_sysctl(&old_value, NULL);
|
||||
|
||||
ATF_REQUIRE_MSG(fprintf(fp, "%d", old_value) > 0,
|
||||
"saving %s failed", VM_MAX_WIRED);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
vm_max_wired_sysctl(NULL, &new_value);
|
||||
}
|
||||
|
||||
static void
|
||||
restore_vm_max_wired(void)
|
||||
{
|
||||
FILE *fp;
|
||||
int saved_max_wired;
|
||||
|
||||
fp = fopen(VM_MAX_WIRED, "r");
|
||||
if (fp == NULL) {
|
||||
perror("fopen failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (fscanf(fp, "%d", &saved_max_wired) != 1) {
|
||||
perror("fscanf failed\n");
|
||||
fclose(fp);
|
||||
return;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
printf("old value in %s: %d\n", VM_MAX_WIRED, saved_max_wired);
|
||||
|
||||
if (saved_max_wired == 0) /* This will cripple the test host */
|
||||
return;
|
||||
|
||||
vm_max_wired_sysctl(NULL, &saved_max_wired);
|
||||
}
|
||||
#endif
|
||||
|
||||
ATF_TC(mlock_clip);
|
||||
ATF_TC_HEAD(mlock_clip, tc)
|
||||
{
|
||||
@ -78,11 +155,19 @@ ATF_TC_BODY(mlock_clip, tc)
|
||||
free(buf);
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_TC_WITH_CLEANUP(mlock_err);
|
||||
#else
|
||||
ATF_TC(mlock_err);
|
||||
#endif
|
||||
ATF_TC_HEAD(mlock_err, tc)
|
||||
{
|
||||
atf_tc_set_md_var(tc, "descr",
|
||||
"Test error conditions in mlock(2) and munlock(2)");
|
||||
#ifdef __FreeBSD__
|
||||
atf_tc_set_md_var(tc, "require.config", "allow_sysctl_side_effects");
|
||||
atf_tc_set_md_var(tc, "require.user", "root");
|
||||
#endif
|
||||
}
|
||||
|
||||
ATF_TC_BODY(mlock_err, tc)
|
||||
@ -99,6 +184,8 @@ ATF_TC_BODY(mlock_err, tc)
|
||||
if ((uintptr_t)VM_MIN_ADDRESS > 0)
|
||||
null_errno = EINVAL; /* NULL is not inside user VM */
|
||||
#endif
|
||||
/* Set max_wired really really high to avoid EAGAIN */
|
||||
set_vm_max_wired(INT_MAX);
|
||||
#else
|
||||
if (sysctlbyname("vm.minaddress", &vmin, &len, NULL, 0) != 0)
|
||||
atf_tc_fail("failed to read vm.minaddress");
|
||||
@ -139,6 +226,14 @@ ATF_TC_BODY(mlock_err, tc)
|
||||
ATF_REQUIRE_ERRNO(ENOMEM, munlock(invalid_ptr, page) == -1);
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_TC_CLEANUP(mlock_err, tc)
|
||||
{
|
||||
|
||||
restore_vm_max_wired();
|
||||
}
|
||||
#endif
|
||||
|
||||
ATF_TC(mlock_limits);
|
||||
ATF_TC_HEAD(mlock_limits, tc)
|
||||
{
|
||||
@ -200,10 +295,18 @@ ATF_TC_BODY(mlock_limits, tc)
|
||||
free(buf);
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_TC_WITH_CLEANUP(mlock_mmap);
|
||||
#else
|
||||
ATF_TC(mlock_mmap);
|
||||
#endif
|
||||
ATF_TC_HEAD(mlock_mmap, tc)
|
||||
{
|
||||
atf_tc_set_md_var(tc, "descr", "Test mlock(2)-mmap(2) interaction");
|
||||
#ifdef __FreeBSD__
|
||||
atf_tc_set_md_var(tc, "require.config", "allow_sysctl_side_effects");
|
||||
atf_tc_set_md_var(tc, "require.user", "root");
|
||||
#endif
|
||||
}
|
||||
|
||||
ATF_TC_BODY(mlock_mmap, tc)
|
||||
@ -215,6 +318,11 @@ ATF_TC_BODY(mlock_mmap, tc)
|
||||
#endif
|
||||
void *buf;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
/* Set max_wired really really high to avoid EAGAIN */
|
||||
set_vm_max_wired(INT_MAX);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Make a wired RW mapping and check that mlock(2)
|
||||
* does not fail for the (already locked) mapping.
|
||||
@ -248,11 +356,27 @@ ATF_TC_BODY(mlock_mmap, tc)
|
||||
ATF_REQUIRE(munmap(buf, page) == 0);
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_TC_CLEANUP(mlock_mmap, tc)
|
||||
{
|
||||
|
||||
restore_vm_max_wired();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_TC_WITH_CLEANUP(mlock_nested);
|
||||
#else
|
||||
ATF_TC(mlock_nested);
|
||||
#endif
|
||||
ATF_TC_HEAD(mlock_nested, tc)
|
||||
{
|
||||
atf_tc_set_md_var(tc, "descr",
|
||||
"Test that consecutive mlock(2) calls succeed");
|
||||
#ifdef __FreeBSD__
|
||||
atf_tc_set_md_var(tc, "require.config", "allow_sysctl_side_effects");
|
||||
atf_tc_set_md_var(tc, "require.user", "root");
|
||||
#endif
|
||||
}
|
||||
|
||||
ATF_TC_BODY(mlock_nested, tc)
|
||||
@ -260,6 +384,11 @@ ATF_TC_BODY(mlock_nested, tc)
|
||||
const size_t maxiter = 100;
|
||||
void *buf;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
/* Set max_wired really really high to avoid EAGAIN */
|
||||
set_vm_max_wired(INT_MAX);
|
||||
#endif
|
||||
|
||||
buf = malloc(page);
|
||||
ATF_REQUIRE(buf != NULL);
|
||||
|
||||
@ -270,6 +399,14 @@ ATF_TC_BODY(mlock_nested, tc)
|
||||
free(buf);
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_TC_CLEANUP(mlock_nested, tc)
|
||||
{
|
||||
|
||||
restore_vm_max_wired();
|
||||
}
|
||||
#endif
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
|
@ -70,7 +70,15 @@ recurse_body()
|
||||
echo -e "cod\ndover sole\nhaddock\nhalibut\npilchard" > recurse/d/fish
|
||||
echo -e "cod\nhaddock\nplaice" > recurse/a/f/favourite-fish
|
||||
|
||||
# Begin FreeBSD
|
||||
if true; then
|
||||
atf_check -o file:"$(atf_get_srcdir)/d_recurse.out" -x "grep -r haddock recurse | sort"
|
||||
else
|
||||
# End FreeBSD
|
||||
atf_check -o file:"$(atf_get_srcdir)/d_recurse.out" grep -r haddock recurse
|
||||
# Begin FreeBSD
|
||||
fi
|
||||
# End FreeBSD
|
||||
}
|
||||
|
||||
atf_test_case recurse_symlink
|
||||
|
@ -5,7 +5,6 @@
|
||||
PROG= cmatose
|
||||
MAN=
|
||||
SRCS= cmatose.c
|
||||
LDADD+= -libverbs -lrdmacm -lpthread
|
||||
LDADD+= -lmlx4
|
||||
LIBADD= ibverbs rdmacm pthread mlx4
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -5,7 +5,6 @@
|
||||
PROG= mckey
|
||||
MAN=
|
||||
SRCS= mckey.c
|
||||
LDADD+= -libverbs -lrdmacm -lpthread
|
||||
LDADD+= -lmlx4
|
||||
LIBADD= ibverbs rdmacm pthread mlx4
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -5,7 +5,8 @@
|
||||
PROG= rping
|
||||
MAN=
|
||||
SRCS= rping.c
|
||||
LDADD+= -libverbs -lrdmacm -lpthread
|
||||
LDADD+= -lmlx4
|
||||
LIBADD+= ibverbs rdmacm pthread
|
||||
LIBADD+= mlx4
|
||||
LIBADD+= cxgb4
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -5,7 +5,6 @@
|
||||
PROG= udaddy
|
||||
MAN=
|
||||
SRCS= udaddy.c
|
||||
LDADD+= -libverbs -lrdmacm -lpthread
|
||||
LDADD+= -lmlx4
|
||||
LIBADD= ibverbs rdmacm pthread mlx4
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -1,5 +1,5 @@
|
||||
PKG= openresolv
|
||||
VERSION= 3.7.0
|
||||
VERSION= 3.7.1
|
||||
|
||||
# Nasty hack so that make clean works without configure being run
|
||||
_CONFIG_MK!= test -e config.mk && echo config.mk || echo config-null.mk
|
||||
@ -37,7 +37,7 @@ SED_RESTARTCMD= -e 's:@RESTARTCMD \(.*\)@:${RESTARTCMD}:g'
|
||||
|
||||
DISTPREFIX?= ${PKG}-${VERSION}
|
||||
DISTFILEGZ?= ${DISTPREFIX}.tar.gz
|
||||
DISTFILE?= ${DISTPREFIX}.tar.bz2
|
||||
DISTFILE?= ${DISTPREFIX}.tar.xz
|
||||
FOSSILID?= current
|
||||
|
||||
.SUFFIXES: .in
|
||||
@ -77,9 +77,9 @@ install: proginstall maninstall
|
||||
import:
|
||||
rm -rf /tmp/${DISTPREFIX}
|
||||
${INSTALL} -d /tmp/${DISTPREFIX}
|
||||
cp README ${SRCS} /tmp/${DISPREFIX}
|
||||
cp README ${SRCS} /tmp/${DISTPREFIX}
|
||||
|
||||
dist:
|
||||
fossil tarball --name ${DISTPREFIX} ${FOSSILID} ${DISTFILEGZ}
|
||||
gunzip -c ${DISTFILEGZ} | bzip2 >${DISTFILE}
|
||||
gunzip -c ${DISTFILEGZ} | xz >${DISTFILE}
|
||||
rm ${DISTFILEGZ}
|
||||
|
@ -22,7 +22,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd April 27, 2014
|
||||
.Dd April 27, 2015
|
||||
.Dt RESOLVCONF 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -22,7 +22,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd March 20, 2015
|
||||
.Dd May 14, 2015
|
||||
.Dt RESOLVCONF.CONF 5
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -91,6 +91,11 @@ To remove a block, you can use 192.168.*
|
||||
These interfaces name servers will only be queried for the domains listed
|
||||
in their resolv.conf.
|
||||
Useful for VPN domains.
|
||||
Setting
|
||||
.Sy private_interfaces Ns ="*"
|
||||
will stop the forwarding of the root zone and allows the local resolver to
|
||||
recursively query the root servers directly.
|
||||
Requires a local nameserver other than libc.
|
||||
This is equivalent to the
|
||||
.Nm resolvconf -p
|
||||
option.
|
||||
@ -149,7 +154,7 @@ When set to /dev/null or NULL,
|
||||
.Sy resolv_conf_local_only
|
||||
is defaulted to NO,
|
||||
.Sy local_nameservers
|
||||
is unset unless overriden and only the information set in
|
||||
is unset unless overridden and only the information set in
|
||||
.Nm
|
||||
is written to
|
||||
.Sy resolv_conf .
|
||||
@ -271,7 +276,7 @@ Each subscriber attempts to automatically configure itself, but not every
|
||||
distribution has been catered for.
|
||||
Also, users could equally want to use a different version from the one
|
||||
installed by default, such as bind8 and bind9.
|
||||
To accomodate this, the subscribers have these files in configurable
|
||||
To accommodate this, the subscribers have these files in configurable
|
||||
variables, documented below.
|
||||
.Pp
|
||||
.Bl -tag -width indent
|
||||
|
@ -50,7 +50,6 @@ elif [ -d "$SYSCONFDIR/resolvconf" ]; then
|
||||
interface_order="$(cat "$SYSCONFDIR"/interface-order)"
|
||||
fi
|
||||
fi
|
||||
TMPDIR="$VARDIR/tmp"
|
||||
IFACEDIR="$VARDIR/interfaces"
|
||||
METRICDIR="$VARDIR/metrics"
|
||||
PRIVATEDIR="$VARDIR/private"
|
||||
|
@ -45,7 +45,8 @@ for d in $DOMAINS; do
|
||||
ns="${d#*:}"
|
||||
case "$unbound_insecure" in
|
||||
[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
|
||||
newconf="$newconf${NL}domain-insecure: \"$dn\""
|
||||
newconf="$newconf${NL}server:$NL"
|
||||
newconf="$newconf domain-insecure: \"$dn\"$NL"
|
||||
;;
|
||||
esac
|
||||
newconf="$newconf${NL}forward-zone:$NL name: \"$dn\"$NL"
|
||||
|
@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <stdlib.h>
|
||||
#include <sysexits.h>
|
||||
|
38
contrib/unbound/.gitignore
vendored
38
contrib/unbound/.gitignore
vendored
@ -1,38 +0,0 @@
|
||||
*.lo
|
||||
*.o
|
||||
/.libs/
|
||||
/Makefile
|
||||
/autom4te.cache/
|
||||
/config.h
|
||||
/config.log
|
||||
/config.status
|
||||
/dnstap/dnstap_config.h
|
||||
/doc/example.conf
|
||||
/doc/libunbound.3
|
||||
/doc/unbound-anchor.8
|
||||
/doc/unbound-checkconf.8
|
||||
/doc/unbound-control.8
|
||||
/doc/unbound-host.1
|
||||
/doc/unbound.8
|
||||
/doc/unbound.conf.5
|
||||
/libtool
|
||||
/libunbound.la
|
||||
/smallapp/unbound-control-setup.sh
|
||||
/unbound
|
||||
/unbound-anchor
|
||||
/unbound-checkconf
|
||||
/unbound-control
|
||||
/unbound-control-setup
|
||||
/unbound-host
|
||||
/unbound.h
|
||||
/asynclook
|
||||
/delayer
|
||||
/lock-verify
|
||||
/memstats
|
||||
/perf
|
||||
/petal
|
||||
/pktview
|
||||
/streamtcp
|
||||
/testbound
|
||||
/unittest
|
||||
|
@ -117,6 +117,7 @@
|
||||
- PasswordAuthentication defaults to "no".
|
||||
- VersionAddendum defaults to "FreeBSD-YYYYMMDD".
|
||||
- PrivilegeSeparation defaults to "sandbox".
|
||||
- UseDNS defaults to "yes".
|
||||
|
||||
2) Modified client-side defaults
|
||||
|
||||
|
@ -320,7 +320,7 @@ fill_default_server_options(ServerOptions *options)
|
||||
if (options->max_sessions == -1)
|
||||
options->max_sessions = DEFAULT_SESSIONS_MAX;
|
||||
if (options->use_dns == -1)
|
||||
options->use_dns = 0;
|
||||
options->use_dns = 1;
|
||||
if (options->client_alive_interval == -1)
|
||||
options->client_alive_interval = 0;
|
||||
if (options->client_alive_count_max == -1)
|
||||
|
@ -45,7 +45,7 @@
|
||||
# Authentication:
|
||||
|
||||
#LoginGraceTime 2m
|
||||
#PermitRootLogin prohibit-password
|
||||
#PermitRootLogin no
|
||||
#StrictModes yes
|
||||
#MaxAuthTries 6
|
||||
#MaxSessions 10
|
||||
@ -115,7 +115,7 @@
|
||||
#Compression delayed
|
||||
#ClientAliveInterval 0
|
||||
#ClientAliveCountMax 3
|
||||
#UseDNS no
|
||||
#UseDNS yes
|
||||
#PidFile /var/run/sshd.pid
|
||||
#MaxStartups 10:30:100
|
||||
#PermitTunnel no
|
||||
|
@ -1217,7 +1217,7 @@ The argument must be
|
||||
or
|
||||
.Dq no .
|
||||
The default is
|
||||
.Dq prohibit-password .
|
||||
.Dq no .
|
||||
Note that if
|
||||
.Cm ChallengeResponseAuthentication
|
||||
is
|
||||
@ -1541,8 +1541,8 @@ the resolved host name for the remote IP address maps back to the
|
||||
very same IP address.
|
||||
.Pp
|
||||
If this option is set to
|
||||
.Dq no
|
||||
(the default) then only addresses and not host names may be used in
|
||||
.Dq no ,
|
||||
then only addresses and not host names may be used in
|
||||
.Pa ~/.ssh/known_hosts
|
||||
.Cm from
|
||||
and
|
||||
@ -1550,6 +1550,8 @@ and
|
||||
.Cm Match
|
||||
.Cm Host
|
||||
directives.
|
||||
The default is
|
||||
.Dq yes .
|
||||
.It Cm UseLogin
|
||||
Specifies whether
|
||||
.Xr login 1
|
||||
|
@ -1,30 +1,2 @@
|
||||
The OpenSSL project depends on volunteer efforts and financial support from
|
||||
the end user community. That support comes in the form of donations and paid
|
||||
sponsorships, software support contracts, paid consulting services
|
||||
and commissioned software development.
|
||||
|
||||
Since all these activities support the continued development and improvement
|
||||
of OpenSSL we consider all these clients and customers as sponsors of the
|
||||
OpenSSL project.
|
||||
|
||||
We would like to identify and thank the following such sponsors for their past
|
||||
or current significant support of the OpenSSL project:
|
||||
|
||||
Major support:
|
||||
|
||||
Qualys http://www.qualys.com/
|
||||
|
||||
Very significant support:
|
||||
|
||||
OpenGear: http://www.opengear.com/
|
||||
|
||||
Significant support:
|
||||
|
||||
PSW Group: http://www.psw.net/
|
||||
Acano Ltd. http://acano.com/
|
||||
|
||||
Please note that we ask permission to identify sponsors and that some sponsors
|
||||
we consider eligible for inclusion here have requested to remain anonymous.
|
||||
|
||||
Additional sponsorship or financial support is always welcome: for more
|
||||
information please contact the OpenSSL Software Foundation.
|
||||
Please https://www.openssl.org/community/thanks.html for the current
|
||||
acknowledgements.
|
||||
|
@ -2,6 +2,54 @@
|
||||
OpenSSL CHANGES
|
||||
_______________
|
||||
|
||||
Changes between 1.0.2e and 1.0.2f [28 Jan 2016]
|
||||
|
||||
*) DH small subgroups
|
||||
|
||||
Historically OpenSSL only ever generated DH parameters based on "safe"
|
||||
primes. More recently (in version 1.0.2) support was provided for
|
||||
generating X9.42 style parameter files such as those required for RFC 5114
|
||||
support. The primes used in such files may not be "safe". Where an
|
||||
application is using DH configured with parameters based on primes that are
|
||||
not "safe" then an attacker could use this fact to find a peer's private
|
||||
DH exponent. This attack requires that the attacker complete multiple
|
||||
handshakes in which the peer uses the same private DH exponent. For example
|
||||
this could be used to discover a TLS server's private DH exponent if it's
|
||||
reusing the private DH exponent or it's using a static DH ciphersuite.
|
||||
|
||||
OpenSSL provides the option SSL_OP_SINGLE_DH_USE for ephemeral DH (DHE) in
|
||||
TLS. It is not on by default. If the option is not set then the server
|
||||
reuses the same private DH exponent for the life of the server process and
|
||||
would be vulnerable to this attack. It is believed that many popular
|
||||
applications do set this option and would therefore not be at risk.
|
||||
|
||||
The fix for this issue adds an additional check where a "q" parameter is
|
||||
available (as is the case in X9.42 based parameters). This detects the
|
||||
only known attack, and is the only possible defense for static DH
|
||||
ciphersuites. This could have some performance impact.
|
||||
|
||||
Additionally the SSL_OP_SINGLE_DH_USE option has been switched on by
|
||||
default and cannot be disabled. This could have some performance impact.
|
||||
|
||||
This issue was reported to OpenSSL by Antonio Sanso (Adobe).
|
||||
(CVE-2016-0701)
|
||||
[Matt Caswell]
|
||||
|
||||
*) SSLv2 doesn't block disabled ciphers
|
||||
|
||||
A malicious client can negotiate SSLv2 ciphers that have been disabled on
|
||||
the server and complete SSLv2 handshakes even if all SSLv2 ciphers have
|
||||
been disabled, provided that the SSLv2 protocol was not also disabled via
|
||||
SSL_OP_NO_SSLv2.
|
||||
|
||||
This issue was reported to OpenSSL on 26th December 2015 by Nimrod Aviram
|
||||
and Sebastian Schinzel.
|
||||
(CVE-2015-3197)
|
||||
[Viktor Dukhovni]
|
||||
|
||||
*) Reject DH handshakes with parameters shorter than 1024 bits.
|
||||
[Kurt Roeckx]
|
||||
|
||||
Changes between 1.0.2d and 1.0.2e [3 Dec 2015]
|
||||
|
||||
*) BN_mod_exp may produce incorrect results on x86_64
|
||||
|
@ -124,6 +124,9 @@ my $clang_disabled_warnings = "-Wno-unused-parameter -Wno-missing-field-initiali
|
||||
# -Wextended-offsetof
|
||||
my $clang_devteam_warn = "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-language-extension-token -Wno-extended-offsetof -Qunused-arguments";
|
||||
|
||||
# Warn that "make depend" should be run?
|
||||
my $warn_make_depend = 0;
|
||||
|
||||
my $strict_warnings = 0;
|
||||
|
||||
my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
|
||||
@ -1513,7 +1516,7 @@ if ($target =~ /\-icc$/) # Intel C compiler
|
||||
# linker only when --prefix is not /usr.
|
||||
if ($target =~ /^BSD\-/)
|
||||
{
|
||||
$shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
|
||||
$shared_ldflag.=" -Wl,-rpath,\$\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
|
||||
}
|
||||
|
||||
if ($sys_id ne "")
|
||||
@ -2028,14 +2031,8 @@ EOF
|
||||
&dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
|
||||
}
|
||||
if ($depflags ne $default_depflags && !$make_depend) {
|
||||
print <<EOF;
|
||||
|
||||
Since you've disabled or enabled at least one algorithm, you need to do
|
||||
the following before building:
|
||||
|
||||
make depend
|
||||
EOF
|
||||
}
|
||||
$warn_make_depend++;
|
||||
}
|
||||
}
|
||||
|
||||
# create the ms/version32.rc file if needed
|
||||
@ -2114,12 +2111,18 @@ EOF
|
||||
|
||||
print <<\EOF if ($no_shared_warn);
|
||||
|
||||
You gave the option 'shared'. Normally, that would give you shared libraries.
|
||||
Unfortunately, the OpenSSL configuration doesn't include shared library support
|
||||
for this platform yet, so it will pretend you gave the option 'no-shared'. If
|
||||
you can inform the developpers (openssl-dev\@openssl.org) how to support shared
|
||||
libraries on this platform, they will at least look at it and try their best
|
||||
(but please first make sure you have tried with a current version of OpenSSL).
|
||||
You gave the option 'shared', which is not supported on this platform, so
|
||||
we will pretend you gave the option 'no-shared'. If you know how to implement
|
||||
shared libraries, please let us know (but please first make sure you have
|
||||
tried with a current version of OpenSSL).
|
||||
EOF
|
||||
|
||||
print <<EOF if ($warn_make_depend);
|
||||
|
||||
*** Because of configuration changes, you MUST do the following before
|
||||
*** building:
|
||||
|
||||
make depend
|
||||
EOF
|
||||
|
||||
exit(0);
|
||||
|
@ -164,10 +164,10 @@
|
||||
standard headers). If it is a problem with OpenSSL itself, please
|
||||
report the problem to <openssl-bugs@openssl.org> (note that your
|
||||
message will be recorded in the request tracker publicly readable
|
||||
via http://www.openssl.org/support/rt.html and will be forwarded to a
|
||||
public mailing list). Include the output of "make report" in your message.
|
||||
Please check out the request tracker. Maybe the bug was already
|
||||
reported or has already been fixed.
|
||||
at https://www.openssl.org/community/index.html#bugs and will be
|
||||
forwarded to a public mailing list). Include the output of "make
|
||||
report" in your message. Please check out the request tracker. Maybe
|
||||
the bug was already reported or has already been fixed.
|
||||
|
||||
[If you encounter assembler error messages, try the "no-asm"
|
||||
configuration option as an immediate fix.]
|
||||
|
@ -12,7 +12,7 @@
|
||||
---------------
|
||||
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
|
||||
* Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
|
@ -4,7 +4,7 @@
|
||||
## Makefile for OpenSSL
|
||||
##
|
||||
|
||||
VERSION=1.0.2e
|
||||
VERSION=1.0.2f
|
||||
MAJOR=1
|
||||
MINOR=0.2
|
||||
SHLIB_VERSION_NUMBER=1.0.0
|
||||
@ -182,8 +182,7 @@ SHARED_LDFLAGS=
|
||||
GENERAL= Makefile
|
||||
BASENAME= openssl
|
||||
NAME= $(BASENAME)-$(VERSION)
|
||||
TARFILE= $(NAME).tar
|
||||
WTARFILE= $(NAME)-win.tar
|
||||
TARFILE= ../$(NAME).tar
|
||||
EXHEADER= e_os2.h
|
||||
HEADER= e_os.h
|
||||
|
||||
@ -501,38 +500,35 @@ TABLE: Configure
|
||||
# would occur. Therefore the list of files is temporarily stored into a file
|
||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
|
||||
# tar does not support the --files-from option.
|
||||
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list \
|
||||
--owner openssl:0 --group openssl:0 \
|
||||
--transform 's|^|openssl-$(VERSION)/|' \
|
||||
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from $(TARFILE).list \
|
||||
--owner 0 --group 0 \
|
||||
--transform 's|^|$(NAME)/|' \
|
||||
-cvf -
|
||||
|
||||
../$(TARFILE).list:
|
||||
$(TARFILE).list:
|
||||
find * \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \
|
||||
\! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \
|
||||
\! -name '*test' \! -name '.#*' \! -name '*~' \
|
||||
| sort > ../$(TARFILE).list
|
||||
\( \! -name '*test' -o -name bctest -o -name pod2mantest \) \
|
||||
\! -name '.#*' \! -name '*~' \! -type l \
|
||||
| sort > $(TARFILE).list
|
||||
|
||||
tar: ../$(TARFILE).list
|
||||
tar: $(TARFILE).list
|
||||
find . -type d -print | xargs chmod 755
|
||||
find . -type f -print | xargs chmod a+r
|
||||
find . -type f -perm -0100 -print | xargs chmod a+x
|
||||
$(TAR_COMMAND) | gzip --best >../$(TARFILE).gz
|
||||
rm -f ../$(TARFILE).list
|
||||
ls -l ../$(TARFILE).gz
|
||||
$(TAR_COMMAND) | gzip --best > $(TARFILE).gz
|
||||
rm -f $(TARFILE).list
|
||||
ls -l $(TARFILE).gz
|
||||
|
||||
tar-snap: ../$(TARFILE).list
|
||||
$(TAR_COMMAND) > ../$(TARFILE)
|
||||
rm -f ../$(TARFILE).list
|
||||
ls -l ../$(TARFILE)
|
||||
tar-snap: $(TARFILE).list
|
||||
$(TAR_COMMAND) > $(TARFILE)
|
||||
rm -f $(TARFILE).list
|
||||
ls -l $(TARFILE)
|
||||
|
||||
dist:
|
||||
$(PERL) Configure dist
|
||||
@$(MAKE) dist_pem_h
|
||||
@$(MAKE) SDIRS='$(SDIRS)' clean
|
||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar
|
||||
|
||||
dist_pem_h:
|
||||
(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
|
||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar
|
||||
|
||||
install: all install_docs install_sw
|
||||
|
||||
|
@ -180,8 +180,7 @@ SHARED_LDFLAGS=
|
||||
GENERAL= Makefile
|
||||
BASENAME= openssl
|
||||
NAME= $(BASENAME)-$(VERSION)
|
||||
TARFILE= $(NAME).tar
|
||||
WTARFILE= $(NAME)-win.tar
|
||||
TARFILE= ../$(NAME).tar
|
||||
EXHEADER= e_os2.h
|
||||
HEADER= e_os.h
|
||||
|
||||
@ -499,38 +498,35 @@ TABLE: Configure
|
||||
# would occur. Therefore the list of files is temporarily stored into a file
|
||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
|
||||
# tar does not support the --files-from option.
|
||||
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list \
|
||||
--owner openssl:0 --group openssl:0 \
|
||||
--transform 's|^|openssl-$(VERSION)/|' \
|
||||
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from $(TARFILE).list \
|
||||
--owner 0 --group 0 \
|
||||
--transform 's|^|$(NAME)/|' \
|
||||
-cvf -
|
||||
|
||||
../$(TARFILE).list:
|
||||
$(TARFILE).list:
|
||||
find * \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \
|
||||
\! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \
|
||||
\! -name '*test' \! -name '.#*' \! -name '*~' \
|
||||
| sort > ../$(TARFILE).list
|
||||
\( \! -name '*test' -o -name bctest -o -name pod2mantest \) \
|
||||
\! -name '.#*' \! -name '*~' \! -type l \
|
||||
| sort > $(TARFILE).list
|
||||
|
||||
tar: ../$(TARFILE).list
|
||||
tar: $(TARFILE).list
|
||||
find . -type d -print | xargs chmod 755
|
||||
find . -type f -print | xargs chmod a+r
|
||||
find . -type f -perm -0100 -print | xargs chmod a+x
|
||||
$(TAR_COMMAND) | gzip --best >../$(TARFILE).gz
|
||||
rm -f ../$(TARFILE).list
|
||||
ls -l ../$(TARFILE).gz
|
||||
$(TAR_COMMAND) | gzip --best > $(TARFILE).gz
|
||||
rm -f $(TARFILE).list
|
||||
ls -l $(TARFILE).gz
|
||||
|
||||
tar-snap: ../$(TARFILE).list
|
||||
$(TAR_COMMAND) > ../$(TARFILE)
|
||||
rm -f ../$(TARFILE).list
|
||||
ls -l ../$(TARFILE)
|
||||
tar-snap: $(TARFILE).list
|
||||
$(TAR_COMMAND) > $(TARFILE)
|
||||
rm -f $(TARFILE).list
|
||||
ls -l $(TARFILE)
|
||||
|
||||
dist:
|
||||
$(PERL) Configure dist
|
||||
@$(MAKE) dist_pem_h
|
||||
@$(MAKE) SDIRS='$(SDIRS)' clean
|
||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar
|
||||
|
||||
dist_pem_h:
|
||||
(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
|
||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar
|
||||
|
||||
install: all install_docs install_sw
|
||||
|
||||
|
@ -5,6 +5,11 @@
|
||||
This file gives a brief overview of the major changes between each OpenSSL
|
||||
release. For more details please read the CHANGES file.
|
||||
|
||||
Major changes between OpenSSL 1.0.2e and OpenSSL 1.0.2f [28 Jan 2016]
|
||||
|
||||
o DH small subgroups (CVE-2016-0701)
|
||||
o SSLv2 doesn't block disabled ciphers (CVE-2015-3197)
|
||||
|
||||
Major changes between OpenSSL 1.0.2d and OpenSSL 1.0.2e [3 Dec 2015]
|
||||
|
||||
o BN_mod_exp may produce incorrect results on x86_64 (CVE-2015-3193)
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
OpenSSL 1.0.2e 3 Dec 2015
|
||||
OpenSSL 1.0.2f 28 Jan 2016
|
||||
|
||||
Copyright (c) 1998-2015 The OpenSSL Project
|
||||
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
||||
@ -90,11 +90,12 @@
|
||||
|
||||
In order to avoid spam, this is a moderated mailing list, and it might
|
||||
take a day for the ticket to show up. (We also scan posts to make sure
|
||||
that security disclosures aren't publically posted by mistake.) Mail to
|
||||
this address is recorded in the public RT (request tracker) database (see
|
||||
https://www.openssl.org/support/rt.html for details) and also forwarded
|
||||
the public openssl-dev mailing list. Confidential mail may be sent to
|
||||
openssl-security@openssl.org (PGP key available from the key servers).
|
||||
that security disclosures aren't publically posted by mistake.) Mail
|
||||
to this address is recorded in the public RT (request tracker) database
|
||||
(see https://www.openssl.org/community/index.html#bugs for details) and
|
||||
also forwarded the public openssl-dev mailing list. Confidential mail
|
||||
may be sent to openssl-security@openssl.org (PGP key available from the
|
||||
key servers).
|
||||
|
||||
Please do NOT use this for general assistance or support queries.
|
||||
Just because something doesn't work the way you expect does not mean it
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
|
||||
/* apps/engine.c */
|
||||
/*
|
||||
* Written by Richard Levitte <richard@levitte.org> for the OpenSSL project
|
||||
* 2000.
|
||||
|
@ -1041,7 +1041,7 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req,
|
||||
bs = OCSP_BASICRESP_new();
|
||||
thisupd = X509_gmtime_adj(NULL, 0);
|
||||
if (ndays != -1)
|
||||
nextupd = X509_gmtime_adj(NULL, nmin * 60 + ndays * 3600 * 24);
|
||||
nextupd = X509_time_adj_ex(NULL, ndays, nmin * 60, NULL);
|
||||
|
||||
/* Examine each certificate id in the request */
|
||||
for (i = 0; i < id_count; i++) {
|
||||
|
@ -79,7 +79,8 @@ const EVP_CIPHER *enc;
|
||||
# define CLCERTS 0x8
|
||||
# define CACERTS 0x10
|
||||
|
||||
int get_cert_chain(X509 *cert, X509_STORE *store, STACK_OF(X509) **chain);
|
||||
static int get_cert_chain(X509 *cert, X509_STORE *store,
|
||||
STACK_OF(X509) **chain);
|
||||
int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen,
|
||||
int options, char *pempass);
|
||||
int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags,
|
||||
@ -594,7 +595,7 @@ int MAIN(int argc, char **argv)
|
||||
vret = get_cert_chain(ucert, store, &chain2);
|
||||
X509_STORE_free(store);
|
||||
|
||||
if (!vret) {
|
||||
if (vret == X509_V_OK) {
|
||||
/* Exclude verified certificate */
|
||||
for (i = 1; i < sk_X509_num(chain2); i++)
|
||||
sk_X509_push(certs, sk_X509_value(chain2, i));
|
||||
@ -602,7 +603,7 @@ int MAIN(int argc, char **argv)
|
||||
X509_free(sk_X509_value(chain2, 0));
|
||||
sk_X509_free(chain2);
|
||||
} else {
|
||||
if (vret >= 0)
|
||||
if (vret != X509_V_ERR_UNSPECIFIED)
|
||||
BIO_printf(bio_err, "Error %s getting chain.\n",
|
||||
X509_verify_cert_error_string(vret));
|
||||
else
|
||||
@ -906,36 +907,25 @@ int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass,
|
||||
|
||||
/* Given a single certificate return a verified chain or NULL if error */
|
||||
|
||||
/* Hope this is OK .... */
|
||||
|
||||
int get_cert_chain(X509 *cert, X509_STORE *store, STACK_OF(X509) **chain)
|
||||
static int get_cert_chain(X509 *cert, X509_STORE *store,
|
||||
STACK_OF(X509) **chain)
|
||||
{
|
||||
X509_STORE_CTX store_ctx;
|
||||
STACK_OF(X509) *chn;
|
||||
STACK_OF(X509) *chn = NULL;
|
||||
int i = 0;
|
||||
|
||||
/*
|
||||
* FIXME: Should really check the return status of X509_STORE_CTX_init
|
||||
* for an error, but how that fits into the return value of this function
|
||||
* is less obvious.
|
||||
*/
|
||||
X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
|
||||
if (X509_verify_cert(&store_ctx) <= 0) {
|
||||
i = X509_STORE_CTX_get_error(&store_ctx);
|
||||
if (i == 0)
|
||||
/*
|
||||
* avoid returning 0 if X509_verify_cert() did not set an
|
||||
* appropriate error value in the context
|
||||
*/
|
||||
i = -1;
|
||||
chn = NULL;
|
||||
goto err;
|
||||
} else
|
||||
if (!X509_STORE_CTX_init(&store_ctx, store, cert, NULL)) {
|
||||
*chain = NULL;
|
||||
return X509_V_ERR_UNSPECIFIED;
|
||||
}
|
||||
|
||||
if (X509_verify_cert(&store_ctx) > 0)
|
||||
chn = X509_STORE_CTX_get1_chain(&store_ctx);
|
||||
err:
|
||||
else if ((i = X509_STORE_CTX_get_error(&store_ctx)) == 0)
|
||||
i = X509_V_ERR_UNSPECIFIED;
|
||||
|
||||
X509_STORE_CTX_cleanup(&store_ctx);
|
||||
*chain = chn;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
@ -74,10 +74,11 @@ static void usage(void);
|
||||
|
||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||
char *keyfile, int keyform, int key_type,
|
||||
char *passargin, int pkey_op, ENGINE *e);
|
||||
char *passargin, int pkey_op, ENGINE *e,
|
||||
int impl);
|
||||
|
||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
||||
const char *file);
|
||||
const char *file, ENGINE* e);
|
||||
|
||||
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
|
||||
unsigned char *out, size_t *poutlen,
|
||||
@ -97,6 +98,7 @@ int MAIN(int argc, char **argv)
|
||||
EVP_PKEY_CTX *ctx = NULL;
|
||||
char *passargin = NULL;
|
||||
int keysize = -1;
|
||||
int engine_impl = 0;
|
||||
|
||||
unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
|
||||
size_t buf_outlen;
|
||||
@ -137,7 +139,7 @@ int MAIN(int argc, char **argv)
|
||||
else {
|
||||
ctx = init_ctx(&keysize,
|
||||
*(++argv), keyform, key_type,
|
||||
passargin, pkey_op, e);
|
||||
passargin, pkey_op, e, engine_impl);
|
||||
if (!ctx) {
|
||||
BIO_puts(bio_err, "Error initializing context\n");
|
||||
ERR_print_errors(bio_err);
|
||||
@ -147,7 +149,7 @@ int MAIN(int argc, char **argv)
|
||||
} else if (!strcmp(*argv, "-peerkey")) {
|
||||
if (--argc < 1)
|
||||
badarg = 1;
|
||||
else if (!setup_peer(bio_err, ctx, peerform, *(++argv)))
|
||||
else if (!setup_peer(bio_err, ctx, peerform, *(++argv), e))
|
||||
badarg = 1;
|
||||
} else if (!strcmp(*argv, "-passin")) {
|
||||
if (--argc < 1)
|
||||
@ -171,6 +173,8 @@ int MAIN(int argc, char **argv)
|
||||
badarg = 1;
|
||||
else
|
||||
e = setup_engine(bio_err, *(++argv), 0);
|
||||
} else if (!strcmp(*argv, "-engine_impl")) {
|
||||
engine_impl = 1;
|
||||
}
|
||||
#endif
|
||||
else if (!strcmp(*argv, "-pubin"))
|
||||
@ -368,7 +372,8 @@ static void usage()
|
||||
BIO_printf(bio_err, "-hexdump hex dump output\n");
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
BIO_printf(bio_err,
|
||||
"-engine e use engine e, possibly a hardware device.\n");
|
||||
"-engine e use engine e, maybe a hardware device, for loading keys.\n");
|
||||
BIO_printf(bio_err, "-engine_impl also use engine given by -engine for crypto operations\n");
|
||||
#endif
|
||||
BIO_printf(bio_err, "-passin arg pass phrase source\n");
|
||||
|
||||
@ -376,10 +381,12 @@ static void usage()
|
||||
|
||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||
char *keyfile, int keyform, int key_type,
|
||||
char *passargin, int pkey_op, ENGINE *e)
|
||||
char *passargin, int pkey_op, ENGINE *e,
|
||||
int engine_impl)
|
||||
{
|
||||
EVP_PKEY *pkey = NULL;
|
||||
EVP_PKEY_CTX *ctx = NULL;
|
||||
ENGINE *impl = NULL;
|
||||
char *passin = NULL;
|
||||
int rv = -1;
|
||||
X509 *x;
|
||||
@ -418,9 +425,14 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||
|
||||
if (!pkey)
|
||||
goto end;
|
||||
|
||||
ctx = EVP_PKEY_CTX_new(pkey, e);
|
||||
|
||||
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
if (engine_impl)
|
||||
impl = e;
|
||||
#endif
|
||||
|
||||
ctx = EVP_PKEY_CTX_new(pkey, impl);
|
||||
|
||||
EVP_PKEY_free(pkey);
|
||||
|
||||
if (!ctx)
|
||||
@ -467,16 +479,20 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||
}
|
||||
|
||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
||||
const char *file)
|
||||
const char *file, ENGINE* e)
|
||||
{
|
||||
EVP_PKEY *peer = NULL;
|
||||
ENGINE* engine = NULL;
|
||||
int ret;
|
||||
if (!ctx) {
|
||||
BIO_puts(err, "-peerkey command before -inkey\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
|
||||
if (peerform == FORMAT_ENGINE)
|
||||
engine = e;
|
||||
|
||||
peer = load_pubkey(bio_err, file, peerform, 0, NULL, engine, "Peer Key");
|
||||
|
||||
if (!peer) {
|
||||
BIO_printf(bio_err, "Error reading peer key %s\n", file);
|
||||
|
@ -308,7 +308,7 @@ static void sc_usage(void)
|
||||
" -connect host:port - who to connect to (default is %s:%s)\n",
|
||||
SSL_HOST_NAME, PORT_STR);
|
||||
BIO_printf(bio_err,
|
||||
" -verify_host host - check peer certificate matches \"host\"\n");
|
||||
" -verify_hostname host - check peer certificate matches \"host\"\n");
|
||||
BIO_printf(bio_err,
|
||||
" -verify_email email - check peer certificate matches \"email\"\n");
|
||||
BIO_printf(bio_err,
|
||||
|
@ -498,7 +498,7 @@ static void sv_usage(void)
|
||||
BIO_printf(bio_err,
|
||||
" -accept arg - port to accept on (default is %d)\n", PORT);
|
||||
BIO_printf(bio_err,
|
||||
" -verify_host host - check peer certificate matches \"host\"\n");
|
||||
" -verify_hostname host - check peer certificate matches \"host\"\n");
|
||||
BIO_printf(bio_err,
|
||||
" -verify_email email - check peer certificate matches \"email\"\n");
|
||||
BIO_printf(bio_err,
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* apps/speed.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* apps/speed.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -1226,12 +1226,7 @@ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext,
|
||||
if (X509_gmtime_adj(X509_get_notBefore(x), 0) == NULL)
|
||||
goto err;
|
||||
|
||||
/* Lets just make it 12:00am GMT, Jan 1 1970 */
|
||||
/* memcpy(x->cert_info->validity->notBefore,"700101120000Z",13); */
|
||||
/* 28 days to be certified */
|
||||
|
||||
if (X509_gmtime_adj(X509_get_notAfter(x), (long)60 * 60 * 24 * days) ==
|
||||
NULL)
|
||||
if (X509_time_adj_ex(X509_get_notAfter(x), days, 0, NULL) == NULL)
|
||||
goto err;
|
||||
|
||||
if (!X509_set_pubkey(x, pkey))
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes.h */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_cbc.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_cbc.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_cfb.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_cfb.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_core.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_core.c */
|
||||
/**
|
||||
* rijndael-alg-fst.c
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_ctr.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_ctr.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_ecb.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_ecb.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_ige.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_ige.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes.h */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_misc.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_misc.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_ofb.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_ofb.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/aes/aes_core.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/aes/aes_core.c */
|
||||
/**
|
||||
* rijndael-alg-fst.c
|
||||
*
|
||||
|
@ -63,7 +63,7 @@ if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
||||
$avx = ($1>=10) + ($1>=11);
|
||||
}
|
||||
|
||||
if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([3-9]\.[0-9]+)/) {
|
||||
if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9]\.[0-9]+)/) {
|
||||
$avx = ($2>=3.0) + ($2>3.0);
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ $avx=1 if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
|
||||
$avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
||||
`ml64 2>&1` =~ /Version ([0-9]+)\./ &&
|
||||
$1>=10);
|
||||
$avx=1 if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([3-9]\.[0-9]+)/ && $2>=3.0);
|
||||
$avx=1 if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9]\.[0-9]+)/ && $2>=3.0);
|
||||
|
||||
$shaext=1; ### set to zero if compiling for 1.0.1
|
||||
|
||||
|
@ -59,7 +59,7 @@ if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
||||
$avx = ($1>=10) + ($1>=12);
|
||||
}
|
||||
|
||||
if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([3-9]\.[0-9]+)/) {
|
||||
if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9]\.[0-9]+)/) {
|
||||
$avx = ($2>=3.0) + ($2>3.0);
|
||||
}
|
||||
|
||||
|
@ -479,11 +479,11 @@ struct bio_dgram_sctp_prinfo {
|
||||
# define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)
|
||||
# define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)
|
||||
# define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)
|
||||
# define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3,0)
|
||||
# define BIO_get_conn_int_port(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,0,NULL)
|
||||
|
||||
# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)
|
||||
|
||||
/* BIO_s_accept_socket() */
|
||||
/* BIO_s_accept() */
|
||||
# define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name)
|
||||
# define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)
|
||||
/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */
|
||||
@ -496,6 +496,7 @@ struct bio_dgram_sctp_prinfo {
|
||||
# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL)
|
||||
# define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL)
|
||||
|
||||
/* BIO_s_accept() and BIO_s_connect() */
|
||||
# define BIO_do_connect(b) BIO_do_handshake(b)
|
||||
# define BIO_do_accept(b) BIO_do_handshake(b)
|
||||
# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)
|
||||
@ -515,12 +516,15 @@ struct bio_dgram_sctp_prinfo {
|
||||
# define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url))
|
||||
# define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL)
|
||||
|
||||
/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */
|
||||
# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)
|
||||
# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)
|
||||
|
||||
/* BIO_s_file() */
|
||||
# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp)
|
||||
# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp)
|
||||
|
||||
/* BIO_s_fd() and BIO_s_file() */
|
||||
# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL)
|
||||
# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/bio/bss_bio.c -*- Mode: C; c-file-style: "eay" -*- */
|
||||
/* crypto/bio/bss_bio.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -419,7 +419,7 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
{
|
||||
BIO *dbio;
|
||||
int *ip;
|
||||
const char **pptr;
|
||||
const char **pptr = NULL;
|
||||
long ret = 1;
|
||||
BIO_CONNECT *data;
|
||||
|
||||
@ -442,19 +442,28 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
case BIO_C_GET_CONNECT:
|
||||
if (ptr != NULL) {
|
||||
pptr = (const char **)ptr;
|
||||
if (num == 0) {
|
||||
*pptr = data->param_hostname;
|
||||
}
|
||||
|
||||
} else if (num == 1) {
|
||||
*pptr = data->param_port;
|
||||
} else if (num == 2) {
|
||||
*pptr = (char *)&(data->ip[0]);
|
||||
} else if (num == 3) {
|
||||
*((int *)ptr) = data->port;
|
||||
if (b->init) {
|
||||
if (pptr != NULL) {
|
||||
ret = 1;
|
||||
if (num == 0) {
|
||||
*pptr = data->param_hostname;
|
||||
} else if (num == 1) {
|
||||
*pptr = data->param_port;
|
||||
} else if (num == 2) {
|
||||
*pptr = (char *)&(data->ip[0]);
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
if ((!b->init) || (ptr == NULL))
|
||||
if (num == 3) {
|
||||
ret = data->port;
|
||||
}
|
||||
} else {
|
||||
if (pptr != NULL)
|
||||
*pptr = "not initialized";
|
||||
ret = 1;
|
||||
ret = 0;
|
||||
}
|
||||
break;
|
||||
case BIO_C_SET_CONNECT:
|
||||
|
@ -519,10 +519,8 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
switch (cmd) {
|
||||
case BIO_CTRL_RESET:
|
||||
num = 0;
|
||||
case BIO_C_FILE_SEEK:
|
||||
ret = 0;
|
||||
break;
|
||||
case BIO_C_FILE_TELL:
|
||||
case BIO_CTRL_INFO:
|
||||
ret = 0;
|
||||
break;
|
||||
|
@ -113,7 +113,7 @@ if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
||||
$addx = ($1>=12);
|
||||
}
|
||||
|
||||
if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([3-9])\.([0-9]+)/) {
|
||||
if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9])\.([0-9]+)/) {
|
||||
my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
|
||||
$addx = ($ver>=3.03);
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
||||
$addx = ($1>=12);
|
||||
}
|
||||
|
||||
if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([3-9])\.([0-9]+)/) {
|
||||
if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9])\.([0-9]+)/) {
|
||||
my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
|
||||
$addx = ($ver>=3.03);
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
||||
$addx = ($1>=12);
|
||||
}
|
||||
|
||||
if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([3-9])\.([0-9]+)/) {
|
||||
if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9])\.([0-9]+)/) {
|
||||
my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
|
||||
$addx = ($ver>=3.03);
|
||||
}
|
||||
|
@ -282,9 +282,14 @@ int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
||||
}
|
||||
|
||||
bits = BN_num_bits(p);
|
||||
|
||||
if (bits == 0) {
|
||||
ret = BN_one(r);
|
||||
/* x**0 mod 1 is still zero. */
|
||||
if (BN_is_one(m)) {
|
||||
ret = 1;
|
||||
BN_zero(r);
|
||||
} else {
|
||||
ret = BN_one(r);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -418,7 +423,13 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
}
|
||||
bits = BN_num_bits(p);
|
||||
if (bits == 0) {
|
||||
ret = BN_one(rr);
|
||||
/* x**0 mod 1 is still zero. */
|
||||
if (BN_is_one(m)) {
|
||||
ret = 1;
|
||||
BN_zero(rr);
|
||||
} else {
|
||||
ret = BN_one(rr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -639,7 +650,7 @@ static int MOD_EXP_CTIME_COPY_FROM_PREBUF(BIGNUM *b, int top,
|
||||
* precomputation memory layout to limit data-dependency to a minimum to
|
||||
* protect secret exponents (cf. the hyper-threading timing attacks pointed
|
||||
* out by Colin Percival,
|
||||
* http://www.daemong-consideredperthreading-considered-harmful/)
|
||||
* http://www.daemonology.net/hyperthreading-considered-harmful/)
|
||||
*/
|
||||
int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
const BIGNUM *m, BN_CTX *ctx,
|
||||
@ -671,7 +682,13 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
||||
|
||||
bits = BN_num_bits(p);
|
||||
if (bits == 0) {
|
||||
ret = BN_one(rr);
|
||||
/* x**0 mod 1 is still zero. */
|
||||
if (BN_is_one(m)) {
|
||||
ret = 1;
|
||||
BN_zero(rr);
|
||||
} else {
|
||||
ret = BN_one(rr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1182,8 +1199,9 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,
|
||||
if (BN_is_one(m)) {
|
||||
ret = 1;
|
||||
BN_zero(rr);
|
||||
} else
|
||||
} else {
|
||||
ret = BN_one(rr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
if (a == 0) {
|
||||
@ -1297,9 +1315,14 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
||||
}
|
||||
|
||||
bits = BN_num_bits(p);
|
||||
|
||||
if (bits == 0) {
|
||||
ret = BN_one(r);
|
||||
if (bits == 0) {
|
||||
/* x**0 mod 1 is still zero. */
|
||||
if (BN_is_one(m)) {
|
||||
ret = 1;
|
||||
BN_zero(r);
|
||||
} else {
|
||||
ret = BN_one(r);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -72,6 +72,25 @@
|
||||
static const char rnd_seed[] =
|
||||
"string to make the random number generator think it has entropy";
|
||||
|
||||
/*
|
||||
* Test that r == 0 in test_exp_mod_zero(). Returns one on success,
|
||||
* returns zero and prints debug output otherwise.
|
||||
*/
|
||||
static int a_is_zero_mod_one(const char *method, const BIGNUM *r,
|
||||
const BIGNUM *a) {
|
||||
if (!BN_is_zero(r)) {
|
||||
fprintf(stderr, "%s failed:\n", method);
|
||||
fprintf(stderr, "a ** 0 mod 1 = r (should be 0)\n");
|
||||
fprintf(stderr, "a = ");
|
||||
BN_print_fp(stderr, a);
|
||||
fprintf(stderr, "\nr = ");
|
||||
BN_print_fp(stderr, r);
|
||||
fprintf(stderr, "\n");
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* test_exp_mod_zero tests that x**0 mod 1 == 0. It returns zero on success.
|
||||
*/
|
||||
@ -79,8 +98,9 @@ static int test_exp_mod_zero()
|
||||
{
|
||||
BIGNUM a, p, m;
|
||||
BIGNUM r;
|
||||
BN_ULONG one_word = 1;
|
||||
BN_CTX *ctx = BN_CTX_new();
|
||||
int ret = 1;
|
||||
int ret = 1, failed = 0;
|
||||
|
||||
BN_init(&m);
|
||||
BN_one(&m);
|
||||
@ -92,21 +112,65 @@ static int test_exp_mod_zero()
|
||||
BN_zero(&p);
|
||||
|
||||
BN_init(&r);
|
||||
BN_mod_exp(&r, &a, &p, &m, ctx);
|
||||
BN_CTX_free(ctx);
|
||||
|
||||
if (BN_is_zero(&r))
|
||||
ret = 0;
|
||||
else {
|
||||
printf("1**0 mod 1 = ");
|
||||
BN_print_fp(stdout, &r);
|
||||
printf(", should be 0\n");
|
||||
if (!BN_rand(&a, 1024, 0, 0))
|
||||
goto err;
|
||||
|
||||
if (!BN_mod_exp(&r, &a, &p, &m, ctx))
|
||||
goto err;
|
||||
|
||||
if (!a_is_zero_mod_one("BN_mod_exp", &r, &a))
|
||||
failed = 1;
|
||||
|
||||
if (!BN_mod_exp_recp(&r, &a, &p, &m, ctx))
|
||||
goto err;
|
||||
|
||||
if (!a_is_zero_mod_one("BN_mod_exp_recp", &r, &a))
|
||||
failed = 1;
|
||||
|
||||
if (!BN_mod_exp_simple(&r, &a, &p, &m, ctx))
|
||||
goto err;
|
||||
|
||||
if (!a_is_zero_mod_one("BN_mod_exp_simple", &r, &a))
|
||||
failed = 1;
|
||||
|
||||
if (!BN_mod_exp_mont(&r, &a, &p, &m, ctx, NULL))
|
||||
goto err;
|
||||
|
||||
if (!a_is_zero_mod_one("BN_mod_exp_mont", &r, &a))
|
||||
failed = 1;
|
||||
|
||||
if (!BN_mod_exp_mont_consttime(&r, &a, &p, &m, ctx, NULL)) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!a_is_zero_mod_one("BN_mod_exp_mont_consttime", &r, &a))
|
||||
failed = 1;
|
||||
|
||||
/*
|
||||
* A different codepath exists for single word multiplication
|
||||
* in non-constant-time only.
|
||||
*/
|
||||
if (!BN_mod_exp_mont_word(&r, one_word, &p, &m, ctx, NULL))
|
||||
goto err;
|
||||
|
||||
if (!BN_is_zero(&r)) {
|
||||
fprintf(stderr, "BN_mod_exp_mont_word failed:\n");
|
||||
fprintf(stderr, "1 ** 0 mod 1 = r (should be 0)\n");
|
||||
fprintf(stderr, "r = ");
|
||||
BN_print_fp(stderr, &r);
|
||||
fprintf(stderr, "\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = failed;
|
||||
|
||||
err:
|
||||
BN_free(&r);
|
||||
BN_free(&a);
|
||||
BN_free(&p);
|
||||
BN_free(&m);
|
||||
BN_CTX_free(ctx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/camellia/camellia.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/camellia/camellia.c */
|
||||
/* ====================================================================
|
||||
* Copyright 2006 NTT (Nippon Telegraph and Telephone Corporation) .
|
||||
* ALL RIGHTS RESERVED.
|
||||
@ -67,7 +67,7 @@
|
||||
|
||||
/*
|
||||
* Algorithm Specification
|
||||
* http://info.isl.llia/specicrypt/eng/camellia/specifications.html
|
||||
* http://info.isl.ntt.co.jp/crypt/eng/camellia/specifications.html
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/camellia/camellia.h -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/camellia/camellia.h */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/camellia/camellia_cbc.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/camellia/camellia_cbc.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/camellia/camellia_cfb.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/camellia/camellia_cfb.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/camellia/camellia_ctr.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/camellia/camellia_ctr.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* crypto/camellia/camellia_ecb.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* crypto/camellia/camellia_ecb.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user