aboutsummaryrefslogtreecommitdiffstats
path: root/util/secmem.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--util/secmem.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/util/secmem.c b/util/secmem.c
index 44df08b16..e75a13512 100644
--- a/util/secmem.c
+++ b/util/secmem.c
@@ -75,11 +75,22 @@ lock_pool( void *p, size_t n )
uid_t uid;
int err;
+ uid = getuid();
+
+ #ifdef HAVE_BROKEN_MLOCK
+ if( uid )
+ err = EPERM;
+ else {
+ err = mlock( p, n );
+ if( err && errno )
+ err = errno;
+ }
+ #else
err = mlock( p, n );
if( err && errno )
err = errno;
+ #endif
- uid = getuid();
if( uid && !geteuid() ) {
if( setuid( uid ) )
log_fatal("failed to reset uid: %s\n", strerror(errno));