diff options
author | Phil Sutter <phil.sutter@viprinet.com> | 2012-01-12 19:36:17 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2012-01-14 17:53:10 +0100 |
commit | 6e8414d7d1a19d3012279cfee5bb9aaa879819f3 (patch) | |
tree | b3ab9412a1b8f3c72f53053e1192d4a491599d89 /package/rng-tools | |
parent | 086708293c881c2d33e16fa4e328b082e9d7bfc7 (diff) |
rng-tools: drop tpm support patch, floods syslog
Diffstat (limited to 'package/rng-tools')
-rw-r--r-- | package/rng-tools/patches/rngd_tpm_support.patch | 288 |
1 files changed, 0 insertions, 288 deletions
diff --git a/package/rng-tools/patches/rngd_tpm_support.patch b/package/rng-tools/patches/rngd_tpm_support.patch deleted file mode 100644 index 0edc47109..000000000 --- a/package/rng-tools/patches/rngd_tpm_support.patch +++ /dev/null @@ -1,288 +0,0 @@ -Patch taken from http://sourceforge.net/tracker/?func=detail&aid=2261574&group_id=3242&atid=353242 - -diff -uNr rng-tools-2-orig/rngd.c rng-tools-2/rngd.c ---- rng-tools-2-orig/rngd.c 2004-08-24 23:30:00.000000000 +0530 -+++ rng-tools-2/rngd.c 2008-11-11 15:39:31.000000000 +0530 -@@ -91,6 +91,8 @@ - - { "timeout", 't', "nnn", 0, - "Interval written to random-device when the entropy pool is full, in seconds (default: 60)" }, -+ { "no-tpm", 'n', "1|0", 0, -+ "do not use tpm as a source of random number input (default: 0)" }, - - { 0 }, - }; -@@ -102,6 +104,7 @@ - .random_step = 64, - .fill_watermark = 2048, - .daemon = 1, -+ .no_tpm =0, - }; - struct arguments *arguments = &default_arguments; - -@@ -147,6 +150,15 @@ - arguments->fill_watermark = n; - break; - } -+ case 'n': { -+ int n; -+ if ((sscanf(arg,"%i", &n) == 0) || ((n | 1)!=1)) -+ argp_usage(state); -+ else -+ arguments->no_tpm=0; -+ break; -+ -+ } - - default: - return ARGP_ERR_UNKNOWN; -@@ -162,26 +174,41 @@ - double poll_timeout) - { - unsigned char buf[FIPS_RNG_BUFFER_SIZE]; -- unsigned char *p; -- int fips; -+ int fips,retval; - - for (;;) { -- xread(buf, sizeof buf); -+ if (arguments->no_tpm == 0) { -+ retval=xread_tpm(buf, sizeof buf); -+ if (retval < 0) -+ sleep(1); -+ else -+ update_kernel_random(random_step, -+ poll_timeout, buf, &tpm_fipsctx); -+ } -+ retval=xread(buf, sizeof buf); -+ if (retval > 0) -+ update_kernel_random(random_step, -+ poll_timeout, buf, &fipsctx); -+ } -+} - -- fips = fips_run_rng_test(&fipsctx, buf); -+int update_kernel_random(int random_step, double poll_timeout, -+ unsigned char *buf, fips_ctx_t *fipsctx) { - -- if (fips) { -- message(LOG_DAEMON|LOG_ERR, "failed fips test\n"); -- sleep(1); -- continue; -- } -+ int fips; -+ unsigned char *p; -+ fips = fips_run_rng_test(fipsctx, buf); -+ if (fips) { -+ message(LOG_DAEMON|LOG_ERR, "failed fips test\n"); -+ return 1; -+ } - -- for (p = buf; p + random_step <= &buf[sizeof buf]; -- p += random_step) { -- random_add_entropy(p, random_step); -- random_sleep(poll_timeout); -- } -+ for (p = buf; p + random_step <= &buf[FIPS_RNG_BUFFER_SIZE]; -+ p += random_step) { -+ random_add_entropy(p, random_step); -+ random_sleep(poll_timeout); - } -+ return 0; - } - - -diff -uNr rng-tools-2-orig/rngd_entsource.c rng-tools-2/rngd_entsource.c ---- rng-tools-2-orig/rngd_entsource.c 2004-04-15 10:36:17.000000000 +0530 -+++ rng-tools-2/rngd_entsource.c 2008-11-11 15:39:31.000000000 +0530 -@@ -35,6 +35,7 @@ - #include <errno.h> - #include <syslog.h> - #include <string.h> -+#include <signal.h> - - #include "rngd.h" - #include "fips.h" -@@ -42,17 +43,27 @@ - #include "rngd_entsource.h" - - --/* Logic and contexts */ --static int rng_fd; /* rng data source */ --fips_ctx_t fipsctx; /* Context for the FIPS tests */ -+/* The overhead incured when tpm returns the random nos as per TCG spec -+ * it is 14 bytes.*/ -+#define TPM_GET_RNG_OVERHEAD 14 - -+static const char *rng_device="/dev/tpm0"; -+/* Logic and contexts */ -+static int rng_fd; /* rng data source */ -+fips_ctx_t fipsctx; /* Context for the FIPS tests */ -+fips_ctx_t tpm_fipsctx; /* Context for the tpm FIPS tests */ - - /* Read data from the entropy source */ --void xread(void *buf, size_t size) -+int xread(void *buf, size_t size) - { - size_t off = 0; - ssize_t r; - -+ /* Do nothing if we have no hw rng, maybe we have tpm */ -+ if (rng_fd < 0) { -+ message(LOG_DAEMON|LOG_ERR, "Invalid file handle\n"); -+ return -1; -+ } - while (size > 0) { - do { - r = read(rng_fd, buf + off, size); -@@ -65,8 +76,85 @@ - - if (size) { - message(LOG_DAEMON|LOG_ERR, "read error\n"); -- exit(1); -+ return -1; -+ } -+ return 0; -+} -+ -+alarm_handler(int i) { -+ ; -+} -+/* tpm rng read call to kernel has 13 bytes of overhead -+ * the logic to process this involves reading to a temporary_buf -+ * and copying the no generated to buf*/ -+int xread_tpm(void *buf, size_t size) -+{ -+ size_t bytes_read = 0; -+ ssize_t r; -+ int retval,rngtpm_fd; -+ unsigned char *temp_buf=NULL; -+ unsigned char rng_cmd[] = { -+ 0, 193, /* TPM_TAG_RQU_COMMAND */ -+ 0, 0, 0, 14, /* length */ -+ 0, 0, 0, 70, /* TPM_ORD_GetRandom */ -+ 0, 0, 0, 0, /* number of bytes to return */ -+ }; -+ char *offset; -+ -+ rngtpm_fd=open(rng_device, O_RDWR); -+ if (rngtpm_fd < 0) { -+ message(LOG_ERR|LOG_INFO, -+ "Unable to open %s: %s\n",rng_device,strerror(errno)); -+ return -1; -+ } -+ -+ temp_buf= (unsigned char *) malloc(size + TPM_GET_RNG_OVERHEAD); -+ memset(temp_buf,0,(size+TPM_GET_RNG_OVERHEAD)); -+ if (temp_buf == NULL) { -+ message(LOG_ERR|LOG_INFO,"No memory"); -+ return -1; -+ } -+ /* 32 bits has been reserved for random byte size */ -+ rng_cmd[13]=(unsigned char)(size & 0xFF); -+ rng_cmd[12]=(unsigned char)((size >> 8) & 0xFF); -+ rng_cmd[11]=(unsigned char)((size >> 16) & 0xFF); -+ rng_cmd[10]=(unsigned char)((size >> 24) & 0xFF); -+ offset=buf; -+ while (bytes_read < size) { -+ r=0; -+ while (r < sizeof(rng_cmd)) { -+ retval=write(rngtpm_fd,rng_cmd + r,sizeof(rng_cmd)-r); -+ if (retval < 0) { -+ message(LOG_ERR|LOG_INFO, -+ "Error writing %s\n",rng_device); -+ retval=-1; -+ goto error_out; -+ } -+ r+=retval; -+ } -+ if (r < sizeof(rng_cmd)) { -+ message(LOG_ERR|LOG_INFO, -+ "Error writing %s\n",rng_device); -+ retval=-1; -+ goto error_out; -+ } -+ r=read(rngtpm_fd,temp_buf,size); -+ r=(r - TPM_GET_RNG_OVERHEAD); -+ bytes_read=bytes_read + r; -+ if (bytes_read > size) { -+ memcpy(offset,temp_buf + TPM_GET_RNG_OVERHEAD, -+ r - (bytes_read - size)); -+ break; -+ } -+ memcpy(offset, temp_buf + TPM_GET_RNG_OVERHEAD, -+ r); -+ offset=offset+r; - } -+ retval=0; -+error_out: -+ free(temp_buf); -+ close(rngtpm_fd); -+ return retval; - } - - /* Initialize entropy source */ -@@ -93,14 +181,31 @@ - */ - void init_entropy_source(const char* sourcedev) - { -+ /* We cannot keep the tpm device open always. -+ * We need to open get random data and close -+ * to allow tpm-tools and other utilities -+ * access to /dev/tpm */ -+ int tpm_fd; - rng_fd = open(sourcedev, O_RDONLY); - if (rng_fd == -1) { - message(LOG_DAEMON|LOG_ERR, "can't open %s: %s", - sourcedev, strerror(errno)); -- exit(EXIT_FAIL); -+ /* Try to open tpm this is just a test, no point in proceeding further -+ * if no source of entropy is present -+ */ -+ tpm_fd = open(rng_device, O_RDONLY); -+ if (tpm_fd < 0 ) { -+ message(LOG_DAEMON|LOG_ERR, -+ "can't open entropy source(tpm or intel/amd rng) %s", -+ strerror(errno)); -+ message(LOG_DAEMON|LOG_ERR,"Maybe RNG device modules are not loaded\n"); -+ exit(1); -+ } -+ close(tpm_fd); - } - - /* Bootstrap FIPS tests */ - fips_init(&fipsctx, discard_initial_data()); -+ fips_init(&tpm_fipsctx, 0); - } - -diff -uNr rng-tools-2-orig/rngd_entsource.h rng-tools-2/rngd_entsource.h ---- rng-tools-2-orig/rngd_entsource.h 2004-04-15 10:34:45.000000000 +0530 -+++ rng-tools-2/rngd_entsource.h 2008-11-11 15:39:31.000000000 +0530 -@@ -28,7 +28,7 @@ - - /* Logic and contexts */ - extern fips_ctx_t fipsctx; /* Context for the FIPS tests */ -- -+extern fips_ctx_t tpm_fipsctx; /* Context for the tpm FIPS tests */ - /* - * Initialize entropy source and entropy conditioning - * -@@ -37,6 +37,6 @@ - extern void init_entropy_source(const char* sourcedev); - - /* Read data from the entropy source */ --void xread(void *buf, size_t size); -+int xread(void *buf, size_t size); - - #endif /* RNGD_ENTSOURCE__H */ -diff -uNr rng-tools-2-orig/rngd.h rng-tools-2/rngd.h ---- rng-tools-2-orig/rngd.h 2004-08-24 23:23:04.000000000 +0530 -+++ rng-tools-2/rngd.h 2008-11-11 15:39:31.000000000 +0530 -@@ -42,6 +42,7 @@ - double poll_timeout; - - int daemon; -+ int no_tpm; - }; - extern struct arguments *arguments; - |