2 * Copyright 2008, Google Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following disclaimer
13 * in the documentation and/or other materials provided with the
15 * * Neither the name of Google Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 * Invoke validator for NaCl secure ELF loader (NaCl SEL).
38 #include "native_client/service_runtime/nacl_log.h"
39 #include "native_client/service_runtime/sel_ldr.h"
40 #include "native_client/service_runtime/sel_util.h"
41 #include "native_client/service_runtime/tramp.h"
42 #include "native_client/ncv/ncvalidate.h"
44 static int g_ignore_validator_result
= 0;
45 void NaClIgnoreValidatorResult() {
46 g_ignore_validator_result
= 1;
49 NaClErrorCode
NaClValidateImage(struct NaClApp
*nap
)
53 struct NCValidatorState
*vstate
;
55 NaClErrorCode rcode
= LOAD_BAD_FILE
;
57 memp
= nap
->code_mem_start
+ NACL_TRAMPOLINE_SIZE
;
58 endp
= nap
->code_mem_start
+ nap
->text_region_end
;
59 regionsize
= endp
- memp
;
61 return LOAD_NO_MEMORY
;
64 vstate
= NCValidateInit(memp
, endp
, nap
->align_boundary
);
65 if (vstate
== NULL
) return LOAD_BAD_FILE
;
66 NCValidateSegment((uint8_t *)memp
, memp
, regionsize
, vstate
);
67 if (NCValidateFinish(vstate
) == 0) {
70 if (g_ignore_validator_result
) {
71 NaClLog(LOG_ERROR
, "VALIDATION FAILED: continuing anyway...\n");
74 NaClLog(LOG_ERROR
, "VALIDATION FAILED.\n");
76 "Run sel_ldr in debug mode to ignore validation failure.\n");
77 rcode
= LOAD_BAD_FILE
;
80 NCValidateFreeState(&vstate
);