int dtb_embedded_iterator_next(struct dtb_embedded_iterator* iter, constvoid** dtb,
size_t* dtb_size) { if (!iter) {
TRACEF("Invalid iterator\n"); return ERR_INVALID_ARGS;
} if (!dtb) {
TRACEF("Invalid dtb pointer\n"); return ERR_INVALID_ARGS;
} if (!dtb_size) {
TRACEF("Invalid dtb size pointer\n"); return ERR_INVALID_ARGS;
}
/* Check that the iterator is within the embedded dtb range */
uintptr_t end = (uintptr_t)&__trusty_dtb_end;
uintptr_t start = (uintptr_t)&__trusty_dtb_start;
uintptr_t total_size = end - start; if (iter->offset >= total_size) {
TRACEF("Embedded dtb iterator at offset %" PRIuPTR "out of range\n",
iter->offset); return ERR_OUT_OF_RANGE;
}
/* Validate the header of the next dtb */ constvoid* dtb_start = (constvoid*)(start + iter->offset); int rc = fdt_check_header(dtb_start); if (rc < 0) {
TRACEF("Embedded dtb at offset %" PRIuPTR " has an invalid header (%d)\n",
iter->offset, rc); return ERR_BAD_STATE;
}
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.