From: Tapani Pälli Date: Tue, 23 May 2023 05:28:40 +0000 (+0300) Subject: mesa: validate shader binary format in _mesa_spirv_shader_binary X-Git-Tag: upstream/23.3.3~8215 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a9e8a4d730810c8de6129db1ae85db3c0761a81;p=platform%2Fupstream%2Fmesa.git mesa: validate shader binary format in _mesa_spirv_shader_binary Rework: * Jordan: Added ARB_gl_spirv text to comment. Signed-off-by: Tapani Pälli Reviewed-by: Jordan Justen Part-of: --- diff --git a/src/mesa/main/glspirv.c b/src/mesa/main/glspirv.c index 949962a..73e4abc 100644 --- a/src/mesa/main/glspirv.c +++ b/src/mesa/main/glspirv.c @@ -74,6 +74,25 @@ _mesa_spirv_shader_binary(struct gl_context *ctx, struct gl_spirv_module *module; struct gl_shader_spirv_data *spirv_data; + /* From OpenGL 4.6 Core spec, "7.2 Shader Binaries" : + * + * "An INVALID_VALUE error is generated if the data pointed to by binary + * does not match the specified binaryformat." + * + * However, the ARB_gl_spirv spec, under issue #16 says: + * + * "ShaderBinary is expected to form an association between the SPIR-V + * module and likely would not parse the module as would be required to + * detect unsupported capabilities or other validation failures." + * + * Which specifies little to no validation requirements. Nevertheless, the + * two small checks below seem reasonable. + */ + if (!binary || (length % 4) != 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glShaderBinary"); + return; + } + module = malloc(sizeof(*module) + length); if (!module) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glShaderBinary");