1.1 --- a/libexec/lib/src/memory.cc Mon Jun 06 01:02:59 2022 +0200
1.2 +++ b/libexec/lib/src/memory.cc Tue Jun 07 01:14:05 2022 +0200
1.3 @@ -52,12 +52,18 @@
1.4 /* Attempt to get a payload object appropriate for a particular object size
1.5 variant. */
1.6
1.7 - *payload = get_payload(buf);
1.8 + *payload = exec_open_payload(buf);
1.9 +
1.10 + if (*payload == NULL)
1.11 + return -L4_ERANGE;
1.12
1.13 - if ((*payload == NULL) ||
1.14 - (file->size < (*payload)->header_extent()) ||
1.15 + if ((file->size < (*payload)->header_extent()) ||
1.16 (file->size < (*payload)->program_header_extent()))
1.17 - return -L4_ERANGE;
1.18 + {
1.19 + delete *payload;
1.20 + *payload = NULL;
1.21 + return -L4_EIO;
1.22 + }
1.23
1.24 /* Obtain all loadable segments. */
1.25
1.26 @@ -74,7 +80,11 @@
1.27 file_t *rfile = client_open(filename, file_opening_flags(segment->region_flags()));
1.28
1.29 if (rfile == NULL)
1.30 + {
1.31 + delete *payload;
1.32 + *payload = NULL;
1.33 return -L4_EIO;
1.34 + }
1.35
1.36 err = segment->fill(rfile);
1.37 }
1.38 @@ -82,7 +92,11 @@
1.39 err = segment->allocate();
1.40
1.41 if (err)
1.42 + {
1.43 + delete *payload;
1.44 + *payload = NULL;
1.45 return err;
1.46 + }
1.47 }
1.48
1.49 return L4_EOK;