summaryrefslogtreecommitdiffstats
path: root/src/net/dhcpopts.c
diff options
context:
space:
mode:
authorMichael Brown2006-08-11 20:16:34 +0200
committerMichael Brown2006-08-11 20:16:34 +0200
commitdb0ff1731f85d2be846e2ed0c8d792a919dd356f (patch)
tree0722577dc3cdc5db75b6604e5db0c99e30b2271d /src/net/dhcpopts.c
parentAdded basic infrastructure for manipulating settings. (diff)
downloadipxe-db0ff1731f85d2be846e2ed0c8d792a919dd356f.tar.gz
ipxe-db0ff1731f85d2be846e2ed0c8d792a919dd356f.tar.xz
ipxe-db0ff1731f85d2be846e2ed0c8d792a919dd356f.zip
Fail gracefully when set_dhcp_option() is called with options==NULL.
Diffstat (limited to 'src/net/dhcpopts.c')
-rw-r--r--src/net/dhcpopts.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/net/dhcpopts.c b/src/net/dhcpopts.c
index c906b191..e847c81d 100644
--- a/src/net/dhcpopts.c
+++ b/src/net/dhcpopts.c
@@ -409,12 +409,16 @@ struct dhcp_option * set_dhcp_option ( struct dhcp_option_block *options,
const void *data, size_t len ) {
static const uint8_t empty_encapsulator[] = { DHCP_END };
struct dhcp_option *option;
- void *insertion_point = options->data;
+ void *insertion_point;
struct dhcp_option *encapsulator = NULL;
unsigned int encap_tag = DHCP_ENCAPSULATOR ( tag );
size_t old_len = 0;
size_t new_len = ( len ? ( len + DHCP_OPTION_HEADER_LEN ) : 0 );
+ /* Return NULL if no options block specified */
+ if ( ! options )
+ return NULL;
+
/* Find old instance of this option, if any */
option = find_dhcp_option_with_encap ( options, tag, &encapsulator );
if ( option ) {
@@ -428,6 +432,7 @@ struct dhcp_option * set_dhcp_option ( struct dhcp_option_block *options,
}
/* Ensure that encapsulator exists, if required */
+ insertion_point = options->data;
if ( DHCP_IS_ENCAP_OPT ( tag ) ) {
if ( ! encapsulator )
encapsulator = set_dhcp_option ( options, encap_tag,