public inbox for passt-user@passt.top
 help / color / mirror / Atom feed
From: Matt Hamilton <matt@thmail.io>
To: David Gibson <david@gibson.dropbear.id.au>,
	Stefano Brivio <sbrivio@redhat.com>
Cc: passt-user@passt.top
Subject: Re: Pasta 20240726 and newer crash with ASSERTION FAILED in flow_hash
Date: Wed, 14 Aug 2024 10:22:52 -0700	[thread overview]
Message-ID: <d669c067-7e7b-4a29-bde7-4416c121c86a@thmail.io> (raw)
In-Reply-To: <ZryAeIVWH_SaQmq9@zatzit.fritz.box>


On 8/14/24 3:01 AM, David Gibson wrote:
> On Wed, Aug 14, 2024 at 08:40:22AM +0200, Stefano Brivio wrote:
>> Hi Matt,
>>
>> On Tue, 13 Aug 2024 22:58:42 -0700
>> Matt Hamilton <matt@thmail.io> wrote:
>>
>>> I am using Podman in Fedora 40, which uses pasta by default for rootless
>>> container networking.
>>>
>>> Fedora 40's base version of passt is `passt-0^20240326.g4988e2b-1.fc40`,
>>> but recently two newer versions were released,
>>> `passt-0^20240726.g57a21d2-1.fc40` and `0^20240806.gee36266-1.fc40`.
>>>
>>> After upgrading, one pod kept going offline after a few minutes. The
>>> containers remained running, but could not make outbound connections.
>>> Journalctl revealed that the pasta process for the pod had crashed with:
>>>
>>>      Aug 08 23:07:55 dev pasta[95859]: ASSERTION FAILED in flow_hash
>>>      (flow.c:566): pif != PIF_NONE && !inany_is_unspecified(&side->eaddr)
>>>      && side->eport != 0 && side->fport != 0
>>>      Aug 08 23:07:55 dev audit[95859]: SECCOMP auid=1000 uid=1000
>>>      gid=1000 ses=1
>>>      subj=unconfined_u:unconfined_r:container_runtime_t:s0-s0:c0.c1023
>>>      pid=95859 comm="pasta.avx2" exe="/usr/bin/pasta.avx2" sig=31
>>>      arch=c000003e syscall=186 compat=0 ip=0x7f8f8c23b64f code=0x80000000
>>>      Aug 08 23:07:55 dev audit[95859]: ANOM_ABEND auid=1000 uid=1000
>>>      gid=1000 ses=1
>>>      subj=unconfined_u:unconfined_r:container_runtime_t:s0-s0:c0.c1023
>>>      pid=95859 comm="pasta.avx2" exe="/usr/bin/pasta.avx2" sig=31 res=1
>>>
>>> After much debugging, I isolated the trigger to a particular container
>>> making a peer-to-peer TCP connection to a remote address with port 0.
>> Thanks for the analysis and for the report!
>>
>>> Reverting passt to version 20240326 works as expected, and the container
>>> stays online. It's been a long time since I wrote any C, but the code
>>> seems clear and checks that the endpoint and forwarding ports do not
>>> equal 0. I assume that a port 0 connection is not realistic or useful,
>>> and that actual attempt to connect over this port indicate a bug in the
>>> client code. Is this correct?
>> Right, that's somehow unexpected because TCP port zero is reserved
>> and not assigned, so it should never be used. However, I'm not sure how
>> we can even reach flow_hash() with it.
>>
>> David, this seems to come from 163a339214dd ("tcp, flow: Replace TCP
>> specific hash function with general flow hash"), any clue?
> Stefano reproduced, and I've found the issue.  The assert was intended
> to check that we never created flows with 0 port - and we don't.
> Unfortunately it was also invoked when searching for an existing flow
> matching a new packet.
>
> Patch coming shortly.  Note that this will fix the crash, but it still
> won't permit the connection to port 0 to go through.  I don't know if
> that will allow your application to run, or whether it relies on that
> port 0 connection.
>
> Actually allowing the connection to go through would be much harder.
> It's easy to remove the explicit checks, obviously, but making sure we
> never pass that 0 to an API where it doesn't mean what we want it to
> would require some time.
>
Thank you gents! I will pull the git repo and test a local build with 
the patch applied.

I agree with your approach, pasta shouldn't be responsible for rewiring 
a badly formatted connection request. The zero port destination address 
is nonsensical so I'll keep running down the issue with the client devs 
- I think they should be discarding the address instead of letting it 
propagate to ultimately fail at the networking layer.


      reply	other threads:[~2024-08-14 17:22 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1f7aefdc-11e8-4993-b647-7429da67b26c@thmail.io>
2024-08-14  6:39 ` Pasta 20240726 and newer crash with ASSERTION FAILED in flow_hash David Gibson
2024-08-14  6:56   ` Matt Hamilton
2024-08-14  7:01     ` Stefano Brivio
2024-08-14  9:57     ` Stefano Brivio
2024-08-14  6:40 ` Stefano Brivio
2024-08-14 10:01   ` David Gibson
2024-08-14 17:22     ` Matt Hamilton [this message]

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=d669c067-7e7b-4a29-bde7-4416c121c86a@thmail.io \
    --to=matt@thmail.io \
    --cc=david@gibson.dropbear.id.au \
    --cc=passt-user@passt.top \
    --cc=sbrivio@redhat.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 IMAP folder(s).