summaryrefslogtreecommitdiff
path: root/misc.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2010-07-16 13:57:51 +1000
committerDamien Miller <djm@mindrot.org>2010-07-16 13:57:51 +1000
commit8a0268f1b3f62292d4124f8d158e0587c4f7c330 (patch)
tree43493a3202569a2939f5616127d9de8689613a7b /misc.c
parentd0244d498ba970b9d9348429eaf7a4a0ef2b903c (diff)
- djm@cvs.openbsd.org 2010/07/13 11:52:06
[auth-rsa.c channels.c jpake.c key.c misc.c misc.h monitor.c] [packet.c ssh-rsa.c] implement a timing_safe_cmp() function to compare memory without leaking timing information by short-circuiting like memcmp() and use it for some of the more sensitive comparisons (though nothing high-value was readily attackable anyway); "looks ok" markus@
Diffstat (limited to 'misc.c')
-rw-r--r--misc.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/misc.c b/misc.c
index 4500b7a37..3b98e3fc2 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.c,v 1.77 2010/07/02 04:32:44 djm Exp $ */ 1/* $OpenBSD: misc.c,v 1.78 2010/07/13 11:52:06 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -850,6 +850,18 @@ ms_to_timeval(struct timeval *tv, int ms)
850 tv->tv_usec = (ms % 1000) * 1000; 850 tv->tv_usec = (ms % 1000) * 1000;
851} 851}
852 852
853int
854timing_safe_cmp(const void *_s1, const void *_s2, size_t n)
855{
856 u_char *s1 = (u_char *)_s1;
857 u_char *s2 = (u_char *)_s2;
858 int ret = 0;
859
860 for (; n > 0; n--, s1++, s2++)
861 ret |= *s1 ^ *s2;
862 return ret;
863}
864
853void 865void
854sock_set_v6only(int s) 866sock_set_v6only(int s)
855{ 867{