From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: Aravind Gopalakrishnan <aravind.gopalakrishnan@amd.com>
Cc: keir@xen.org, jbeulich@suse.com, xen-devel@lists.xen.org
Subject: Re: [PATCH] x86, amd_ucode: Support multiple container files appended together
Date: Fri, 20 Jun 2014 22:33:22 -0400 [thread overview]
Message-ID: <53A4EEF2.2050009@oracle.com> (raw)
In-Reply-To: <53A46CE8.9010106@amd.com>
>>> + while ( (error = install_equiv_cpu_table(mc_amd, buf, &tot_size,
>>> + &offset)) == 0 )
>>
>> install_equiv_cpu_table() checks whether container size is larger
>> than the buffer size.
> Not really.
> It is basically checking if we have data at all to parse (like the
> comment says:/* No more data */)
>
>> If we have multiple containers merged I think tot_size is the size of
>> the merged file, not of an individual container.
>
> That's right.
>
>> And this makes the first check in install_equiv_cpu_table() not
>> especially meaningful.
>>
>
> Theoretically-
> If it so happens that we don't have any patch files and just the
> container header,
> then mpbuf->len would be zero and
> if ( mpbuf->len + CONT_HDR_SIZE >= *tot_size )
> will fail in this case- (which gives some meaning to the check being
> there)
> 1. If containers are concatenated, but there is no matching patch on
> the first one
> 2. So, we fast-fwd to next container file but this one has mpbuf->len=0
So if you have two merged containers, the first one being 1K and the
second one empty, then while processing the second container you will
instead of returning -EINVAL continue because 'if (0+12 >= 1K) ' will
evaluate to false. And it seems to me that you then may well go beyond
the end of the buffer.
>
> Which leads me to another scenario though-
> 1. If we do have multiple containers and if right patch is not on the
> first one, but on some subsequent container
> 2. If the first container has mpbuf->len=0
> Then we'd just error out right there. Hmm.. I'll have to re-work the
> logic then.
Isn't it the other way around? We won't error out, we will continue.
Which is wrong.
>
> Come to think, if the first container is corrupted for some reason and
> returns error (or there's an -ENOMEM), then we are going to return
> pre-maturely
> Instead, we should probably (try to) forward to next container and
> look for patches there as well.
>
> Shall fix this logic in a v2..
>
BTW, it may be worth documenting container format in English. As it
stands now, one has to look at the code to figure out the layout.
-boris
next prev parent reply other threads:[~2014-06-21 2:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-19 15:14 [PATCH] x86, amd_ucode: Support multiple container files appended together Aravind Gopalakrishnan
2014-06-20 8:11 ` Jan Beulich
2014-06-20 16:06 ` Aravind Gopalakrishnan
2014-06-23 6:33 ` Jan Beulich
2014-06-23 20:24 ` Aravind Gopalakrishnan
2014-06-20 15:57 ` Boris Ostrovsky
2014-06-20 17:18 ` Aravind Gopalakrishnan
2014-06-21 2:33 ` Boris Ostrovsky [this message]
2014-06-23 15:47 ` Aravind Gopalakrishnan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53A4EEF2.2050009@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=aravind.gopalakrishnan@amd.com \
--cc=jbeulich@suse.com \
--cc=keir@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.