Garbage collection of remote references

Dániel Szoboszlay dszoboszlay@REDACTED
Fri Oct 15 14:05:32 CEST 2021


Hi Ludovic,

As far as I know references themselves are stored as regular data on the
heap, and can be garbage collected. However, references (and pids) also
contain
<https://erlang.org/doc/apps/erts/erl_ext_dist.html#new_reference_ext> the
node on which they were created (an atom). So I believe the documentation
wants to warn you that decoding a reference may also create an atom in your
atom table (plus also an entry in the node name to "first number in a pid"
mapping table, which probably has an official name). which will not be
garbage collected. The reference itself will be.

Hope it helps,
Daniel

On Fri, 15 Oct 2021 at 12:24, Ludovic Demblans <ludovic@REDACTED> wrote:

> Hello,
>
> I can read the following in the binary_to_term documentation:
>
>      When decoding binaries from untrusted sources, the untrusted source
> may submit
>      data in a way to create resources, such as atoms and remote
> references, that
>      cannot be garbage collected and lead to Denial of Service attack. In
> such
>      cases, consider using binary_to_term/2 with the safe option.
>
>
> I use binary serialized remote references to dispatch messages received
> from an
> external source (Kafka) to the right process in the right node.  Those
> references are process aliases with the reply option.
>
> Reading the docs, should I understand that each reference will stay
> forever
> in memory after being used to send a message?
>
> I am also looking for more docs on that topic, I couldn't find much.
>
> Thank you.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20211015/0c9eab91/attachment.htm>


More information about the erlang-questions mailing list