Introduction
Introduction Statistics Contact Development Disclaimer Help
clear passwords with explicit_bzero - slock - simple X display locker utility
git clone git://git.suckless.org/slock
Log
Files
Refs
README
LICENSE
---
commit a7afade1701a809f6a33b53525d59dd29b38d381
parent 65b8d5278882310eed758e6fbfd6ab9676db883c
Author: Hiltjo Posthuma <[email protected]>
Date: Sun, 31 Jul 2016 13:43:00 +0200
clear passwords with explicit_bzero
Make sure to explicitly clear memory that is used for password input. memset
is often optimized out by the compiler.
Brought to attention by the OpenBSD community, see:
https://marc.info/?t=146989502600003&r=1&w=2
Thread subject: x11/slock: clear passwords with explicit_bzero
Changes:
- explicit_bzero.c import from libressl-portable.
- Makefile: add COMPATSRC for compatibility src.
- config.mk: add separate *BSD section in config.mk to simply uncomment it on
these platforms.
Diffstat:
M Makefile | 6 +++---
M config.mk | 4 ++++
A explicit_bzero.c | 19 +++++++++++++++++++
M slock.c | 8 ++++++--
A util.h | 2 ++
5 files changed, 34 insertions(+), 5 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -3,7 +3,7 @@
include config.mk
-SRC = slock.c
+SRC = slock.c ${COMPATSRC}
OBJ = ${SRC:.c=.o}
all: options slock
@@ -35,8 +35,8 @@ clean:
dist: clean
@echo creating dist tarball
@mkdir -p slock-${VERSION}
- @cp -R LICENSE Makefile README config.def.h config.mk ${SRC} slock.1 \
- slock-${VERSION}
+ @cp -R LICENSE Makefile README config.def.h config.mk ${SRC} \
+ explicit_bzero.c slock.1 slock-${VERSION}
@tar -cf slock-${VERSION}.tar slock-${VERSION}
@gzip slock-${VERSION}.tar
@rm -rf slock-${VERSION}
diff --git a/config.mk b/config.mk
@@ -18,9 +18,13 @@ LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXra…
CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
LDFLAGS = -s ${LIBS}
+COMPATSRC = explicit_bzero.c
# On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS and add -DHAVE_BSD_AUTH
# On OpenBSD and Darwin remove -lcrypt from LIBS
+#LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lXext -lXrandr
+#CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_BSD_AUTH -D_BSD_SOURCE
+#COMPATSRC =
# compiler and linker
CC = cc
diff --git a/explicit_bzero.c b/explicit_bzero.c
@@ -0,0 +1,19 @@
+/* $OpenBSD: explicit_bzero.c,v 1.3 2014/06/21 02:34:26 matthew Exp $ */
+/*
+ * Public domain.
+ * Written by Matthew Dempsky.
+ */
+
+#include <string.h>
+
+__attribute__((weak)) void
+__explicit_bzero_hook(void *buf, size_t len)
+{
+}
+
+void
+explicit_bzero(void *buf, size_t len)
+{
+ memset(buf, 0, len);
+ __explicit_bzero_hook(buf, len);
+}
diff --git a/slock.c b/slock.c
@@ -23,6 +23,8 @@
#include <bsd_auth.h>
#endif
+#include "util.h"
+
enum {
INIT,
INPUT,
@@ -135,7 +137,7 @@ readpw(Display *dpy, const char *pws)
* timeout. */
while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) {
- buf[0] = 0;
+ explicit_bzero(&buf, sizeof(buf));
num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym,…
if (IsKeypadKey(ksym)) {
if (ksym == XK_KP_Enter)
@@ -161,14 +163,16 @@ readpw(Display *dpy, const char *pws)
XBell(dpy, 100);
failure = True;
}
+ explicit_bzero(&passwd, sizeof(passwd));
len = 0;
break;
case XK_Escape:
+ explicit_bzero(&passwd, sizeof(passwd));
len = 0;
break;
case XK_BackSpace:
if (len)
- --len;
+ passwd[len--] = 0;
break;
default:
if (num && !iscntrl((int)buf[0]) && (len + num…
diff --git a/util.h b/util.h
@@ -0,0 +1,2 @@
+#undef explicit_bzero
+void explicit_bzero(void *, size_t);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.