]> git.ozlabs.org Git - yaboot.git/blobdiff - second/file.c
yaboot-1.3.17
[yaboot.git] / second / file.c
index debf7f42b87e8d87244c5623fd736038be24f2bf..fd081a3010d3ba4710349144da54ac73fe23cb3f 100644 (file)
@@ -88,7 +88,7 @@ static char * is_valid_ipv4_str(char *str)
 
 
 /*
- * Copy the string from source to dest till newline or comma(,) is seen
+ * Copy the string from source to dest until the end of string or comma is seen
  * in the source.
  * Move source and dest pointers respectively.
  * Returns pointer to the start of the string that has just been copied.
@@ -104,9 +104,9 @@ scopy(char **dest, char **source)
      while (**source != ',' && **source != '\0')
          *(*dest)++ = *(*source)++;
      if (**source != '\0')
-         *(*source)++;
+         (void)*(*source)++;
      **dest = '\0';
-     *(*dest)++;
+     (void)*(*dest)++;
      return ret;
 }
 
@@ -186,7 +186,6 @@ enum dhcp_options {
      DHCP_PAD = 0,
      DHCP_NETMASK = 1,
      DHCP_ROUTERS = 3,
-     DHCP_DNS = 6,
      DHCP_END = 255,
 };
 
@@ -218,13 +217,18 @@ extract_vendor_options(struct bootp_packet *packet, struct boot_fspec_t *result)
       *         it's malformed. :( */
      while (options[i] != DHCP_END) {
           __u8 tag = options[i++], len;
-          __u32 value;
+          __u32 value = 0;
 
           if (tag == DHCP_PAD)
                continue;
 
           len = options[i++];
-          memcpy(&value, &options[i], len);
+          /* Clamp the maxium length of the memcpy() to the right size for
+           * value. */
+          if (len > sizeof(value))
+               memcpy(&value, &options[i], sizeof(value));
+          else
+               memcpy(&value, &options[i], len);
 
 #if DEBUG
 {
@@ -671,6 +675,9 @@ int open_file(struct boot_fspec_t* spec, struct boot_file_t* file)
      case FILE_DEVICE_BLOCK:
          DEBUG_F("device is a block device\n");
          return file_block_open(file, spec, spec->part);
+     case FILE_DEVICE_ISCSI:
+         DEBUG_F("device is a iSCSI device\n");
+         return file_block_open(file, spec, spec->part);
      case FILE_DEVICE_NET:
          DEBUG_F("device is a network device\n");
          return file_net_open(file, spec);