[gPXE git] mainline: 2 commits to master (f73ffe8..e9d7419)
git at etherboot.org
git at etherboot.org
Tue Jun 29 03:10:56 EDT 2010
In the Main gPXE repository, branch master has been updated.
adds e9d7419 [tls] Handle multiple handshake records
adds 512bc1a [pcnet32] Fix uninitialised variable
from f73ffe8 [r8169] Remove r8169 driver cfg lookup, use pci_device_id->driver_data instead
Summary of changes:
src/drivers/net/pcnet32.c | 2 +-
src/net/tls.c | 93 ++++++++++++++++++++++++++-------------------
2 files changed, 55 insertions(+), 40 deletions(-)
- Log -----------------------------------------------------------------
------
commit e9d7419f1c4795e8c53630121cad86247ffa522f
Author: Michael Brown <mcb30 at ipxe.org>
Date: Wed Jun 23 01:01:32 2010 +0100
Committer: Stefan Hajnoczi <stefanha at gmail.com>
[tls] Handle multiple handshake records
The handshake record in TLS can contain multiple messages.
Originally-fixed-by: Timothy Stack <tstack at vmware.com>
Signed-off-by: Michael Brown <mcb30 at ipxe.org>
Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
---
src/net/tls.c | 93 +++++++++++++++++++++++++++++++++------------------------
1 files changed, 54 insertions(+), 39 deletions(-)
diff --git a/src/net/tls.c b/src/net/tls.c
index a5b126e..89b5dee 100644
--- a/src/net/tls.c
+++ b/src/net/tls.c
@@ -964,50 +964,65 @@ static int tls_new_finished ( struct tls_session *tls,
*/
static int tls_new_handshake ( struct tls_session *tls,
void *data, size_t len ) {
- struct {
- uint8_t type;
- uint8_t length[3];
- uint8_t payload[0];
- } __attribute__ (( packed )) *handshake = data;
- void *payload = &handshake->payload;
- size_t payload_len = tls_uint24 ( handshake->length );
- void *end = ( payload + payload_len );
+ void *end = ( data + len );
int rc;
- /* Sanity check */
- if ( end != ( data + len ) ) {
- DBGC ( tls, "TLS %p received overlength Handshake\n", tls );
- DBGC_HD ( tls, data, len );
- return -EINVAL;
- }
+ while ( data != end ) {
+ struct {
+ uint8_t type;
+ uint8_t length[3];
+ uint8_t payload[0];
+ } __attribute__ (( packed )) *handshake = data;
+ void *payload = &handshake->payload;
+ size_t payload_len = tls_uint24 ( handshake->length );
+ void *next = ( payload + payload_len );
+
+ /* Sanity check */
+ if ( next > end ) {
+ DBGC ( tls, "TLS %p received overlength Handshake\n",
+ tls );
+ DBGC_HD ( tls, data, len );
+ return -EINVAL;
+ }
- switch ( handshake->type ) {
- case TLS_SERVER_HELLO:
- rc = tls_new_server_hello ( tls, payload, payload_len );
- break;
- case TLS_CERTIFICATE:
- rc = tls_new_certificate ( tls, payload, payload_len );
- break;
- case TLS_SERVER_HELLO_DONE:
- rc = tls_new_server_hello_done ( tls, payload, payload_len );
- break;
- case TLS_FINISHED:
- rc = tls_new_finished ( tls, payload, payload_len );
- break;
- default:
- DBGC ( tls, "TLS %p ignoring handshake type %d\n",
- tls, handshake->type );
- rc = 0;
- break;
- }
+ switch ( handshake->type ) {
+ case TLS_SERVER_HELLO:
+ rc = tls_new_server_hello ( tls, payload, payload_len );
+ break;
+ case TLS_CERTIFICATE:
+ rc = tls_new_certificate ( tls, payload, payload_len );
+ break;
+ case TLS_SERVER_HELLO_DONE:
+ rc = tls_new_server_hello_done ( tls, payload,
+ payload_len );
+ break;
+ case TLS_FINISHED:
+ rc = tls_new_finished ( tls, payload, payload_len );
+ break;
+ default:
+ DBGC ( tls, "TLS %p ignoring handshake type %d\n",
+ tls, handshake->type );
+ rc = 0;
+ break;
+ }
- /* Add to handshake digest (except for Hello Requests, which
- * are explicitly excluded).
- */
- if ( handshake->type != TLS_HELLO_REQUEST )
- tls_add_handshake ( tls, data, len );
+ /* Add to handshake digest (except for Hello Requests,
+ * which are explicitly excluded).
+ */
+ if ( handshake->type != TLS_HELLO_REQUEST )
+ tls_add_handshake ( tls, data,
+ sizeof ( *handshake ) +
+ payload_len );
- return rc;
+ /* Abort on failure */
+ if ( rc != 0 )
+ return rc;
+
+ /* Move to next handshake record */
+ data = next;
+ }
+
+ return 0;
}
/**
------
commit 512bc1ae0687605e0b1a49f5cd91a7fea34e09f4
Author: Geoff Lywood <glywood at vmware.com>
Date: Tue Jun 29 07:51:51 2010 +0100
Committer: Stefan Hajnoczi <stefanha at gmail.com>
[pcnet32] Fix uninitialised variable
Using gcc 4.1.2, I get the following error when running 'make bin/pcnet32.rom':
[BUILD] bin/pcnet32.o
cc1: warnings being treated as errors
drivers/net/pcnet32.c: In function 'pcnet32_probe':
drivers/net/pcnet32.c:516: warning: 'phycount' may be used uninitialized in this function
make: *** [bin/pcnet32.o] Error 1
This patch fixes the problem.
Signed-off-by: Geoff Lywood <glywood at vmware.com>
Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
---
src/drivers/net/pcnet32.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/drivers/net/pcnet32.c b/src/drivers/net/pcnet32.c
index 6bb2c1a..f845aa9 100644
--- a/src/drivers/net/pcnet32.c
+++ b/src/drivers/net/pcnet32.c
@@ -513,7 +513,7 @@ static void
pcnet32_setup_probe_phy ( struct pcnet32_private *priv )
{
unsigned long ioaddr = priv->pci_dev->ioaddr;
- char phycount;
+ char phycount = 0;
int phy_id;
int i;
-----------------------------------------------------------------------
--
Main gPXE repository
More information about the gPXE-commits
mailing list