From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Samuel Thibault <samuel.thibault@gnu.org>,
slirp@lists.freedesktop.org, Petr Matousek <pmatouse@redhat.com>,
Vishnu Dev TJ <vishnudevtj@gmail.com>,
qemu-stable@nongnu.org, qemu-devel@nongnu.org,
Prasad J Pandit <ppandit@redhat.com>
Subject: Re: [Qemu-devel] [Slirp] [PATCH 1/2] Do not reassemble fragments pointing outside of the original payload
Date: Fri, 23 Aug 2019 17:15:32 +0200 [thread overview]
Message-ID: <14216968-a066-6abf-1952-3cff3aa3eee3@redhat.com> (raw)
In-Reply-To: <20190822183313.pptfwjsnrpdi6tfp@function>
On 8/22/19 8:33 PM, Samuel Thibault wrote:
> Philippe Mathieu-Daudé, le jeu. 22 août 2019 16:41:33 +0200, a ecrit:
>> Later the newly calculated pointer q is converted into ip structure
>> and values are modified, Due to the wrong calculation of the delta,
>> ip will be pointing to incorrect location and ip_src and ip_dst can
>> be used to write controlled data onto the calculated location. This
>> may also crash qemu if the calculated ip is located in unmaped area.
>
> That does not seem to be related to this:
Indeed, I wonder if this is the same issue reported in the CVE.
>> Do not queue fragments pointing out of the original payload to avoid
>> to calculate the variable delta.
>
> I don't understand the relation with having to calculate delta.
>
>> diff --git a/src/ip_input.c b/src/ip_input.c
>> index 7364ce0..ee52085 100644
>> --- a/src/ip_input.c
>> +++ b/src/ip_input.c
>> @@ -304,6 +304,19 @@ static struct ip *ip_reass(Slirp *slirp, struct ip *ip, struct ipq *fp)
>> ip_deq(q->ipf_prev);
>> }
>>
>> + /*
>> + * If we received the first fragment, we know the original
>> + * payload size.
>
> ? We only know the total payload size when receiving the last fragment
> (payload = offset*8 + size).
>
>> Verify fragments are within our payload.
>
> By construction of the protocol, fragments can only be within the
> payload, since it's the last fragment which provides the payload size.
I might have misunderstood the RFC, I'll read it again.
>> + for (q = fp->frag_link.next; q != (struct ipasfrag*)&fp->frag_link;
>> + q = q->ipf_next) {
>> + if (!q->ipf_off && q->ipf_len) {
>> + if (ip->ip_off + ip->ip_len >= q->ipf_len) {
>> + goto dropfrag;
>> + }
>> + }
>> + }
>
> Fragments are kept in order, there is no need to go around the list to
> find the fragment with offset zero, if it is there it is the first one.
OK.
> Did you make your test with commit 126c04acbabd ("Fix heap overflow in
> ip_reass on big packet input") applied?
Yes, unfortunately it doesn't fix the issue.
Thanks,
Phil.
next prev parent reply other threads:[~2019-08-23 15:17 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-22 14:41 [Qemu-devel] [PATCH 0/2] slirp: Fix heap buffer overflow during packet reassembly (CVE-2019-14378) Philippe Mathieu-Daudé
2019-08-22 14:41 ` [Qemu-devel] [PATCH 1/2] Do not reassemble fragments pointing outside of the original payload Philippe Mathieu-Daudé
2019-08-22 18:33 ` [Qemu-devel] [Slirp] " Samuel Thibault
2019-08-23 15:15 ` Philippe Mathieu-Daudé [this message]
2019-08-25 22:54 ` Samuel Thibault
2019-08-29 11:13 ` P J P
2019-08-29 15:43 ` Philippe Mathieu-Daudé
2019-08-29 15:53 ` Philippe Mathieu-Daudé
2019-08-29 16:00 ` Philippe Mathieu-Daudé
2019-08-22 14:41 ` [Qemu-devel] [RFC PATCH 2/2] Delay crash when mbufs are corrupted Philippe Mathieu-Daudé
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=14216968-a066-6abf-1952-3cff3aa3eee3@redhat.com \
--to=philmd@redhat.com \
--cc=pmatouse@redhat.com \
--cc=ppandit@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@nongnu.org \
--cc=samuel.thibault@gnu.org \
--cc=slirp@lists.freedesktop.org \
--cc=vishnudevtj@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).