/* Intel HEX files actually limit the length to 256 bytes, but we have driverswhichwouldbenefitfromusingseparaterecordswhichare
longer than that, so we extend to 16 bits of length */ struct ihex_binrec {
__be32 addr;
__be16 len;
uint8_t data[];
} __attribute__((packed));
/* Check that ihex_next_binrec() won't take us off the end of the image... */ staticinlineint ihex_validate_fw(conststruct firmware *fw)
{ conststruct ihex_binrec *end, *rec;
rec = (constvoid *)fw->data;
end = (constvoid *)&fw->data[fw->size - sizeof(*end)];
for (; rec <= end; rec = __ihex_next_binrec(rec)) { /* Zero length marks end of records */ if (rec == end && !be16_to_cpu(rec->len)) return0;
} return -EINVAL;
}
/* Request firmware and validate it so that we can trust we won't
* run off the end while reading records... */ staticinlineint request_ihex_firmware(conststruct firmware **fw, constchar *fw_name, struct device *dev)
{ conststruct firmware *lfw; int ret;
ret = request_firmware(&lfw, fw_name, dev); if (ret) return ret;
ret = ihex_validate_fw(lfw); if (ret) {
dev_err(dev, "Firmware \"%s\" not valid IHEX records\n",
fw_name);
release_firmware(lfw); return ret;
}
*fw = lfw; return0;
} #endif/* __LINUX_IHEX_H__ */
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.