static int image_load_type ( struct image *image, struct image_type *type ) {
int rc;
+ /* Check image is actually loadable */
+ if ( ! type->load )
+ return -ENOEXEC;
+
+ /* Try the image loader */
if ( ( rc = type->load ( image ) ) != 0 ) {
DBGC ( image, "IMAGE %p could not load as %s: %s\n",
image, type->name, strerror ( rc ) );
assert ( image->type != NULL );
+ /* Check that image is actually executable */
+ if ( ! image->type->exec )
+ return -ENOEXEC;
+
/* Try executing the image */
if ( ( rc = image->type->exec ( image ) ) != 0 ) {
DBGC ( image, "IMAGE %p could not execute: %s\n",