Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/secure/secure_common.c
- This file was added.
/* $NetBSD: stack_protector.c,v 1.4 2006/11/22 17:23:25 christos Exp $ */ | |||||
/* $OpenBSD: stack_protector.c,v 1.10 2006/03/31 05:34:44 deraadt Exp $ */ | |||||
/* | |||||
* Copyright (c) 2002 Hiroaki Etoh, Federico G. Schwindt, and Miodrag Vallat. | |||||
* All rights reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR | |||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, | |||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | |||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
* POSSIBILITY OF SUCH DAMAGE. | |||||
* | |||||
*/ | |||||
#include <sys/cdefs.h> | |||||
__FBSDID("$FreeBSD$"); | |||||
#include <sys/param.h> | |||||
#include <sys/sysctl.h> | |||||
#include <sys/types.h> | |||||
#include <errno.h> | |||||
#include <link.h> | |||||
#include <signal.h> | |||||
#include <string.h> | |||||
#include <syslog.h> | |||||
#include <unistd.h> | |||||
#include "libc_private.h" | |||||
jilles: Please place `#include "namespace.h"` and `#include "un-namespace.h"` around the other includes… | |||||
Not Done Inline ActionsIf I'm not wrong, all of the newly added c files needs these changes. op: If I'm not wrong, all of the newly added c files needs these changes. | |||||
static void __fail(const char *) __dead2; | |||||
Done Inline Actions__dead2 ? pfg: __dead2 ? | |||||
/*ARGSUSED*/ | |||||
static void | |||||
__fail(const char *msg) | |||||
{ | |||||
struct sigaction sa; | |||||
sigset_t mask; | |||||
/* Immediately block all signal handlers from running code */ | |||||
(void)sigfillset(&mask); | |||||
(void)sigdelset(&mask, SIGABRT); | |||||
(void)sigprocmask(SIG_BLOCK, &mask, NULL); | |||||
/* This may fail on a chroot jail... */ | |||||
syslog(LOG_CRIT, "%s", msg); | |||||
(void)memset(&sa, 0, sizeof(sa)); | |||||
(void)sigemptyset(&sa.sa_mask); | |||||
sa.sa_flags = 0; | |||||
sa.sa_handler = SIG_DFL; | |||||
(void)sigaction(SIGABRT, &sa, NULL); | |||||
(void)kill(getpid(), SIGABRT); | |||||
_exit(127); | |||||
} | |||||
void | |||||
__secure_fail(const char *msg) | |||||
{ | |||||
__fail(msg); | |||||
} |
Please place #include "namespace.h" and #include "un-namespace.h" around the other includes (except libc_private.h which should go after). You will need to use the _ versions of some functions.
This reduces possible interposition and PLT usage in this function.