Skip to content

Commit b74171a

Browse files
authored
[mono] Remove verifier (#48142)
* remove DISABLE_VERIFIER * Remove metadata-verify and calls to verifier-disabled functions * Chase down callers of mini_method_verify and remove
1 parent 9385751 commit b74171a

22 files changed

+19
-11168
lines changed

src/mono/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ set(DISABLE_MDB 1)
7979
set(DISABLE_COM 1)
8080
set(DISABLE_PERFCOUNTERS 1)
8181
set(DISABLE_ATTACH 1)
82-
set(DISABLE_VERIFIER 1)
8382

8483
# Dependencies between options
8584
if(ENABLE_INTERP_LIB)

src/mono/cmake/options.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ option (DISABLE_COM "Disable COM support")
1515
option (DISABLE_SSA "Disable advanced SSA JIT optimizations")
1616
option (DISABLE_GENERICS "Disable generics support")
1717
option (DISABLE_ATTACH "Disable agent attach support")
18-
option (DISABLE_VERIFIER "Disables the verifier")
1918
option (DISABLE_JIT "Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.")
2019
option (DISABLE_INTERPRETER "Disable the interpreter.")
2120
option (DISABLE_SIMD "Disable SIMD intrinsics related optimizations.")

src/mono/mono/metadata/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ set(metadata_common_sources
117117
mempool.h
118118
mempool-internals.h
119119
metadata.c
120-
metadata-verify.c
121120
metadata-internals.h
122121
metadata-update.h
123122
metadata-update.c
@@ -168,7 +167,6 @@ set(metadata_common_sources
168167
threads.c
169168
threads-types.h
170169
verify.c
171-
verify-internals.h
172170
wrapper-types.h
173171
dynamic-image-internals.h
174172
dynamic-stream.c

src/mono/mono/metadata/class-init.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2767,11 +2767,6 @@ mono_class_init_internal (MonoClass *klass)
27672767
* information and write it to @klass inside a lock.
27682768
*/
27692769

2770-
if (mono_verifier_is_enabled_for_class (klass) && !mono_verifier_verify_class (klass)) {
2771-
mono_class_set_type_load_failure (klass, "%s", concat_two_strings_with_zero (klass->image, klass->name, klass->image->assembly_name));
2772-
goto leave;
2773-
}
2774-
27752770
MonoType *klass_byval_arg;
27762771
klass_byval_arg = m_class_get_byval_arg (klass);
27772772
if (klass_byval_arg->type == MONO_TYPE_ARRAY || klass_byval_arg->type == MONO_TYPE_SZARRAY) {

src/mono/mono/metadata/class.c

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
#include <mono/metadata/security-core-clr.h>
4141
#include <mono/metadata/attrdefs.h>
4242
#include <mono/metadata/gc-internals.h>
43-
#include <mono/metadata/verify-internals.h>
4443
#include <mono/metadata/mono-debug.h>
4544
#include <mono/utils/mono-counters.h>
4645
#include <mono/utils/mono-string.h>
@@ -128,9 +127,6 @@ mono_class_from_typeref_checked (MonoImage *image, guint32 type_token, MonoError
128127

129128
error_init (error);
130129

131-
if (!mono_verifier_verify_typeref_row (image, (type_token & 0xffffff) - 1, error))
132-
return NULL;
133-
134130
mono_metadata_decode_row (t, (type_token&0xffffff)-1, cols, MONO_TYPEREF_SIZE);
135131

136132
name = mono_metadata_string_heap (image, cols [MONO_TYPEREF_NAME]);
@@ -1551,9 +1547,6 @@ mono_class_find_enum_basetype (MonoClass *klass, MonoError *error)
15511547
if (cols [MONO_FIELD_FLAGS] & FIELD_ATTRIBUTE_STATIC) //no need to decode static fields
15521548
continue;
15531549

1554-
if (!mono_verifier_verify_field_signature (image, cols [MONO_FIELD_SIGNATURE], error))
1555-
goto fail;
1556-
15571550
sig = mono_metadata_blob_heap (image, cols [MONO_FIELD_SIGNATURE]);
15581551
mono_metadata_decode_value (sig, &sig);
15591552
/* FIELD signature == 0x06 */
@@ -2711,20 +2704,13 @@ mono_class_name_from_token (MonoImage *image, guint32 type_token)
27112704
}
27122705

27132706
case MONO_TOKEN_TYPE_REF: {
2714-
ERROR_DECL (error);
27152707
guint32 cols [MONO_TYPEREF_SIZE];
27162708
MonoTableInfo *t = &image->tables [MONO_TABLE_TYPEREF];
27172709
guint tidx = mono_metadata_token_index (type_token);
27182710

27192711
if (tidx > t->rows)
27202712
return g_strdup_printf ("Invalid type token 0x%08x", type_token);
27212713

2722-
if (!mono_verifier_verify_typeref_row (image, tidx - 1, error)) {
2723-
char *msg = g_strdup_printf ("Invalid type token 0x%08x due to '%s'", type_token, mono_error_get_message (error));
2724-
mono_error_cleanup (error);
2725-
return msg;
2726-
}
2727-
27282714
mono_metadata_decode_row (t, tidx-1, cols, MONO_TYPEREF_SIZE);
27292715
name = mono_metadata_string_heap (image, cols [MONO_TYPEREF_NAME]);
27302716
nspace = mono_metadata_string_heap (image, cols [MONO_TYPEREF_NAMESPACE]);
@@ -2755,7 +2741,6 @@ mono_assembly_name_from_token (MonoImage *image, guint32 type_token)
27552741
return g_strdup (image->assembly_name);
27562742
return g_strdup_printf ("%s", image->name ? image->name : "[Could not resolve assembly name");
27572743
case MONO_TOKEN_TYPE_REF: {
2758-
ERROR_DECL (error);
27592744
MonoAssemblyName aname;
27602745
memset (&aname, 0, sizeof (MonoAssemblyName));
27612746
guint32 cols [MONO_TYPEREF_SIZE];
@@ -2765,11 +2750,6 @@ mono_assembly_name_from_token (MonoImage *image, guint32 type_token)
27652750
if (idx > t->rows)
27662751
return g_strdup_printf ("Invalid type token 0x%08x", type_token);
27672752

2768-
if (!mono_verifier_verify_typeref_row (image, idx - 1, error)) {
2769-
char *msg = g_strdup_printf ("Invalid type token 0x%08x due to '%s'", type_token, mono_error_get_message (error));
2770-
mono_error_cleanup (error);
2771-
return msg;
2772-
}
27732753
mono_metadata_decode_row (t, idx-1, cols, MONO_TYPEREF_SIZE);
27742754

27752755
idx = cols [MONO_TYPEREF_SCOPE] >> MONO_RESOLUTION_SCOPE_BITS;
@@ -6378,11 +6358,6 @@ mono_field_resolve_type (MonoClassField *field, MonoError *error)
63786358
/* first_field_idx and idx points into the fieldptr table */
63796359
mono_metadata_decode_table_row (image, MONO_TABLE_FIELD, idx, cols, MONO_FIELD_SIZE);
63806360

6381-
if (!mono_verifier_verify_field_signature (image, cols [MONO_FIELD_SIGNATURE], error)) {
6382-
mono_class_set_type_load_failure (klass, "%s", mono_error_get_message (error));
6383-
return;
6384-
}
6385-
63866361
sig = mono_metadata_blob_heap (image, cols [MONO_FIELD_SIGNATURE]);
63876362

63886363
mono_metadata_decode_value (sig, &sig);

src/mono/mono/metadata/custom-attrs.c

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include "mono/metadata/reflection-internals.h"
2525
#include "mono/metadata/tabledefs.h"
2626
#include "mono/metadata/tokentype.h"
27-
#include "mono/metadata/verify-internals.h"
2827
#include "mono/metadata/icall-decl.h"
2928
#include "mono/utils/checked-build.h"
3029

@@ -875,9 +874,6 @@ create_custom_attr (MonoImage *image, MonoMethod *method, const guchar *data, gu
875874

876875
mono_class_init_internal (method->klass);
877876

878-
if (!mono_verifier_verify_cattr_content (image, method, data, len, error))
879-
goto fail;
880-
881877
if (len == 0) {
882878
attr = mono_object_new_handle (mono_domain_get (), method->klass, error);
883879
goto_if_nok (error, fail);
@@ -1069,9 +1065,6 @@ mono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *meth
10691065

10701066
error_init (error);
10711067

1072-
if (!mono_verifier_verify_cattr_content (image, method, data, len, error))
1073-
return;
1074-
10751068
mono_class_init_internal (method->klass);
10761069

10771070
domain = mono_domain_get ();
@@ -1235,9 +1228,6 @@ mono_reflection_create_custom_attr_data_args_noalloc (MonoImage *image, MonoMeth
12351228

12361229
error_init (error);
12371230

1238-
if (!mono_verifier_verify_cattr_content (image, method, data, len, error))
1239-
goto fail;
1240-
12411231
mono_class_init_internal (method->klass);
12421232

12431233
if (len < 2 || read16 (p) != 0x0001) /* Prolog */
@@ -1688,11 +1678,6 @@ mono_custom_attrs_from_index_checked (MonoImage *image, guint32 idx, gboolean ig
16881678
}
16891679
}
16901680

1691-
if (!mono_verifier_verify_cattr_blob (image, cols [MONO_CUSTOM_ATTR_VALUE], error)) {
1692-
g_array_free (attr_array, TRUE);
1693-
g_free (ainfo);
1694-
return NULL;
1695-
}
16961681
data = mono_metadata_blob_heap (image, cols [MONO_CUSTOM_ATTR_VALUE]);
16971682
attr->data_size = mono_metadata_decode_value (data, &data);
16981683
attr->data = (guchar*)data;

src/mono/mono/metadata/image.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include <mono/metadata/assembly.h>
4343
#include <mono/metadata/object-internals.h>
4444
#include <mono/metadata/security-core-clr.h>
45-
#include <mono/metadata/verify-internals.h>
4645
#include <mono/metadata/verify.h>
4746
#include <mono/metadata/image-internals.h>
4847
#include <mono/metadata/loaded-images-internals.h>
@@ -1233,9 +1232,6 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
12331232
if (care_about_pecoff == FALSE)
12341233
goto done;
12351234

1236-
if (image->loader == &pe_loader && !mono_verifier_verify_pe_data (image, error))
1237-
goto invalid_image;
1238-
12391235
if (!mono_image_load_pe_data (image))
12401236
goto invalid_image;
12411237
} else {
@@ -1246,15 +1242,9 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
12461242
goto done;
12471243
}
12481244

1249-
if (image->loader == &pe_loader && !image->metadata_only && !mono_verifier_verify_cli_data (image, error))
1250-
goto invalid_image;
1251-
12521245
if (!mono_image_load_cli_data (image))
12531246
goto invalid_image;
12541247

1255-
if (image->loader == &pe_loader && !image->metadata_only && !mono_verifier_verify_table_data (image, error))
1256-
goto invalid_image;
1257-
12581248
#ifdef ENABLE_METADATA_UPDATE
12591249
dump_encmap (image);
12601250
#endif

src/mono/mono/metadata/loader.c

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include <mono/metadata/exception.h>
4343
#include <mono/metadata/marshal.h>
4444
#include <mono/metadata/lock-tracer.h>
45-
#include <mono/metadata/verify-internals.h>
4645
#include <mono/metadata/exception-internals.h>
4746
#include <mono/utils/mono-logger-internals.h>
4847
#include <mono/utils/mono-dl.h>
@@ -274,9 +273,6 @@ field_from_memberref (MonoImage *image, guint32 token, MonoClass **retklass,
274273

275274
fname = mono_metadata_string_heap (image, cols [MONO_MEMBERREF_NAME]);
276275

277-
if (!mono_verifier_verify_memberref_field_signature (image, cols [MONO_MEMBERREF_SIGNATURE], error))
278-
return NULL;
279-
280276
switch (class_index) {
281277
case MONO_MEMBERREF_PARENT_TYPEDEF:
282278
klass = mono_class_get_checked (image, MONO_TOKEN_TYPE_DEF | nindex, error);
@@ -775,9 +771,6 @@ mono_method_get_signature_checked (MonoMethod *method, MonoImage *image, guint32
775771

776772
sig = (MonoMethodSignature *)find_cached_memberref_sig (image, sig_idx);
777773
if (!sig) {
778-
if (!mono_verifier_verify_memberref_method_signature (image, sig_idx, error))
779-
return NULL;
780-
781774
ptr = mono_metadata_blob_heap (image, sig_idx);
782775
mono_metadata_decode_blob_size (ptr, &ptr);
783776

@@ -787,14 +780,6 @@ mono_method_get_signature_checked (MonoMethod *method, MonoImage *image, guint32
787780

788781
sig = (MonoMethodSignature *)cache_memberref_sig (image, sig_idx, sig);
789782
}
790-
/* FIXME: we probably should verify signature compat in the dynamic case too*/
791-
if (!mono_verifier_is_sig_compatible (image, method, sig)) {
792-
guint32 klass = cols [MONO_MEMBERREF_CLASS] & MONO_MEMBERREF_PARENT_MASK;
793-
const char *fname = mono_metadata_string_heap (image, cols [MONO_MEMBERREF_NAME]);
794-
795-
mono_error_set_bad_image (error, image, "Incompatible method signature class token 0x%08x field name %s token 0x%08x", klass, fname, token);
796-
return NULL;
797-
}
798783
}
799784

800785
if (context) {
@@ -916,9 +901,6 @@ method_from_memberref (MonoImage *image, guint32 idx, MonoGenericContext *typesp
916901

917902
sig_idx = cols [MONO_MEMBERREF_SIGNATURE];
918903

919-
if (!mono_verifier_verify_memberref_method_signature (image, sig_idx, error))
920-
goto fail;
921-
922904
ptr = mono_metadata_blob_heap (image, sig_idx);
923905
mono_metadata_decode_blob_size (ptr, &ptr);
924906

@@ -985,9 +967,6 @@ method_from_methodspec (MonoImage *image, MonoGenericContext *context, guint32 i
985967
token = cols [MONO_METHODSPEC_METHOD];
986968
nindex = token >> MONO_METHODDEFORREF_BITS;
987969

988-
if (!mono_verifier_verify_methodspec_signature (image, cols [MONO_METHODSPEC_SIGNATURE], error))
989-
return NULL;
990-
991970
ptr = mono_metadata_blob_heap (image, cols [MONO_METHODSPEC_SIGNATURE]);
992971

993972
mono_metadata_decode_value (ptr, &ptr);
@@ -1862,9 +1841,6 @@ mono_method_signature_checked_slow (MonoMethod *m, MonoError *error)
18621841

18631842
if (!signature) {
18641843
const char *sig_body;
1865-
/*TODO we should cache the failure result somewhere*/
1866-
if (!mono_verifier_verify_method_signature (img, sig_offset, error))
1867-
return NULL;
18681844

18691845
/* size = */ mono_metadata_decode_blob_size (sig, &sig_body);
18701846

@@ -2106,9 +2082,6 @@ mono_method_get_header_internal (MonoMethod *method, MonoError *error)
21062082
if (!loc) {
21072083
rva = mono_metadata_decode_row_col (&img->tables [MONO_TABLE_METHOD], idx - 1, MONO_METHOD_RVA);
21082084

2109-
if (!mono_verifier_verify_method_header (img, rva, error))
2110-
return NULL;
2111-
21122085
loc = mono_image_rva_map (img, rva);
21132086
}
21142087

0 commit comments

Comments
 (0)