forked from pool/open-iscsi
70 lines
2.2 KiB
Plaintext
70 lines
2.2 KiB
Plaintext
diff --git a/kernel/iscsi_tcp.c b/kernel/iscsi_tcp.c
|
|
diff --git a/kernel/iscsi_tcp.h b/kernel/iscsi_tcp.h
|
|
diff --git a/kernel/libiscsi.c b/kernel/libiscsi.c
|
|
diff --git a/kernel/libiscsi.h b/kernel/libiscsi.h
|
|
diff --git a/kernel/scsi_transport_iscsi.c b/kernel/scsi_transport_iscsi.c
|
|
diff --git a/kernel/scsi_transport_iscsi.h b/kernel/scsi_transport_iscsi.h
|
|
diff --git a/usr/discovery.c b/usr/discovery.c
|
|
diff --git a/usr/idbm.c b/usr/idbm.c
|
|
diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c
|
|
diff --git a/utils/fwparam_ibft/fwparam_ibft.c b/utils/fwparam_ibft/fwparam_ibft.c
|
|
index 02f8ac8..4557016 100644
|
|
--- a/utils/fwparam_ibft/fwparam_ibft.c
|
|
+++ b/utils/fwparam_ibft/fwparam_ibft.c
|
|
@@ -39,6 +39,8 @@ int debug;
|
|
int dev_count;
|
|
char filename[FILENAMESZ];
|
|
|
|
+char ID_ROMEXT[]={0x55, 0xaa, 0}; /* extended rom magic */
|
|
+
|
|
const char nulls[16]; /* defaults to zero */
|
|
|
|
int
|
|
@@ -408,22 +410,38 @@ dump_ibft(void *ibft_loc, struct boot_context *context)
|
|
|
|
char *search_ibft(unsigned char *start, int length)
|
|
{
|
|
- unsigned char *cur_ptr;
|
|
+ unsigned char *cur_ptr, *rom_end;
|
|
struct ibft_table_hdr *ibft_hdr;
|
|
- unsigned char check_sum;
|
|
+ unsigned char check_sum, rom_size;
|
|
uint32_t i;
|
|
|
|
cur_ptr = (unsigned char *)start;
|
|
- for (cur_ptr = (unsigned char *)start;
|
|
- cur_ptr < (start + length);
|
|
- cur_ptr++) {
|
|
- if (memcmp(cur_ptr, iBFTSTR,strlen(iBFTSTR)))
|
|
+ while (cur_ptr < (start + length)) {
|
|
+ if (memcmp(cur_ptr, ID_ROMEXT, strlen(ID_ROMEXT)) != 0) {
|
|
+ /* Skip this block */
|
|
+ cur_ptr += 512;
|
|
continue;
|
|
+ }
|
|
+ memcpy(&rom_size, cur_ptr + 2, 1);
|
|
+ /* Don't search past the end of the ROM BIOS block */
|
|
+ rom_end = cur_ptr + (rom_size * 512) - strlen(iBFTSTR);
|
|
+ while (cur_ptr < rom_end) {
|
|
+ if (!memcmp(cur_ptr, iBFTSTR,strlen(iBFTSTR)))
|
|
+ break;
|
|
+ cur_ptr++;
|
|
+ }
|
|
+
|
|
+ if (cur_ptr == rom_end) {
|
|
+ cur_ptr += strlen(iBFTSTR);
|
|
+ continue;
|
|
+ }
|
|
|
|
ibft_hdr = (struct ibft_table_hdr *)cur_ptr;
|
|
/* Make sure it's correct version. */
|
|
- if (ibft_hdr->revision != iBFT_REV)
|
|
+ if (ibft_hdr->revision != iBFT_REV) {
|
|
+ cur_ptr = rom_end + strlen(iBFTSTR);
|
|
continue;
|
|
+ }
|
|
|
|
/* Make sure that length is valid. */
|
|
if ((cur_ptr + ibft_hdr->length) <= (start + length)) {
|
|
diff --git a/utils/fwparam_ibft/fwparam_ibft.h b/utils/fwparam_ibft/fwparam_ibft.h
|