<div dir="ltr">Thanks Gert and I'm really sorry for my mistake.</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Aug 9, 2018 at 1:21 AM Gert Wollny <<a href="mailto:gert.wollny@collabora.com" target="_blank">gert.wollny@collabora.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello, <br>
<br>
Po-Hsien Wang asked me privately to comment on the previous version  of<br>
the patch that still checked pkt_length <= 0 (which I pointed out that<br>
it is unsigned), but I didn't realize that (a) the pkg_length refers to<br>
dwords, and (b) AFAICS only the final chunk will be null-terminated<br>
when long shaders are send in chunks. As it stands now all shaders will<br>
be rejected by this test, and hence the patch should be reverted.<br>
<br>
I'll have to look at this a little bit more, but for now I think that <br>
the better solution would be to simply force a null-termination of the<br>
string before passing it into tgsi_text_translate.<br>
<br>
Best, <br>
Gert<br>
<br>
Am Mittwoch, den 08.08.2018, 11:08 -0700 schrieb Po-Hsien Wang:<br>
> Add check for nonterminated string passed into the create_shader<br>
> code.<br>
> <br>
> v3. Move some check to vrend_decode_create_shader<br>
> TEST=compile and running with specific testcases.<br>
> ---<br>
>  src/vrend_decode.c   | 2 ++<br>
>  src/vrend_renderer.c | 2 ++<br>
>  2 files changed, 4 insertions(+)<br>
> <br>
> diff --git a/src/vrend_decode.c b/src/vrend_decode.c<br>
> index 06dad24..c75d732 100644<br>
> --- a/src/vrend_decode.c<br>
> +++ b/src/vrend_decode.c<br>
> @@ -115,6 +115,8 @@ static int vrend_decode_create_shader(struct<br>
> vrend_decode_ctx *ctx,<br>
>       memset(&so_info, 0, sizeof(so_info));<br>
>  <br>
>     shd_text = get_buf_ptr(ctx, shader_offset);<br>
> +   if (length < shader_offset) <br>
> +      return EINVAL;<br>
>     ret = vrend_create_shader(ctx->grctx, handle, &so_info,<br>
> req_local_mem, (const char *)shd_text, offlen, num_tokens, type,<br>
> length - shader_offset + 1);<br>
>  <br>
>     return ret;<br>
> diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c<br>
> index 7c70b50..c969466 100644<br>
> --- a/src/vrend_renderer.c<br>
> +++ b/src/vrend_renderer.c<br>
> @@ -2931,6 +2931,8 @@ int vrend_create_shader(struct vrend_context<br>
> *ctx,<br>
>  <br>
>     if (type > PIPE_SHADER_COMPUTE)<br>
>        return EINVAL;<br>
> +   if (pkt_length == 0pkt_length == 0 || shd_text[pkt_length - 1] !=<br>
> '\0')<br>
> +      return EINVAL;<br>
>  <br>
>     if (!has_feature(feat_geometry_shader) &&<br>
>         type == PIPE_SHADER_GEOMETRY)<br>
</blockquote></div>