Crank the timeout and decrease the buffer size to not end up dropping
authormpi <mpi@openbsd.org>
Fri, 17 Apr 2015 07:17:51 +0000 (07:17 +0000)
committermpi <mpi@openbsd.org>
Fri, 17 Apr 2015 07:17:51 +0000 (07:17 +0000)
all the entropy provided by the device.

Also make sure we match the right endpoint.

From Sean Levy based on comments from Andreas Gustafsson who's behind
Alea.

sys/dev/usb/ualea.c

index b1f558b..ee995b2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ualea.c,v 1.1 2015/04/16 08:55:21 mpi Exp $ */
+/*     $OpenBSD: ualea.c,v 1.2 2015/04/17 07:17:51 mpi Exp $ */
 /*
  * Copyright (c) 2006 Alexander Yurchenko <grange@openbsd.org>
  * Copyright (c) 2007 Marc Balmer <mbalmer@openbsd.org>
 #include <dev/rndvar.h>
 
 #define ALEA_IFACE             0
+#define ALEA_ENDPOINT          1
 #define ALEA_MSECS             100
-#define ALEA_READ_TIMEOUT      1000
-#define ALEA_BUFSIZ            ((1024/8)*100)  /* 100 kbits */
+#define ALEA_READ_TIMEOUT      5000
+#define ALEA_BUFSIZ            128
 
 #define DEVNAME(_sc) ((_sc)->sc_dev.dv_xname)
 
@@ -101,7 +102,8 @@ ualea_attach(struct device *parent, struct device *self, void *aux)
                        return;
                }
                if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN &&
-                   UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) {
+                   UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK &&
+                   UE_GET_ADDR(ed->bEndpointAddress) == ALEA_ENDPOINT) {
                        ep_ibulk = ed->bEndpointAddress;
                        break;
                }