Issue #7786 has been updated by shugo (Shugo Maeda).

File abstract_namespace_fix.diff added

usa (Usaku NAKAMURA) wrote:
> Q1: Is this related to [Backport #7775] ?

It's related, but independent.
#7775 is needed to receive the address of a socket correctly.
#7776 is needed to specify the address of a socket correctly.

> Q2: Can you show the revision of the related change(s) in trunk?

r35474, r35479, r38939, r38943, r38963, r38991, and r38994.

> Q3: Where the "attached patch"? :)

Sorry, I've attached it.
----------------------------------------
Backport #7786: fix for abstract namespace
https://bugs.ruby-lang.org/issues/7786#change-35860

Author: shugo (Shugo Maeda)
Status: Assigned
Priority: Normal
Assignee: usa (Usaku NAKAMURA)
Category: 
Target version: 


=begin
Please apply the attached patch to Ruby 1.9.3.

In Ruby 1.9.3, the addrlen argument for bind(2) and connect(2) is set to sizeof(struct sockaddr_un).
However, on Linux, if sun_path starts with NUL, which means that the socket's address is in abstract namespace, the first (addrlen  - sizeof(sa_family_t)) bytes of sun_path is used as the name of the socket, so the socket name is filled with extra NULs unintentionally.  Please see unix(7) for details.

The patch introduces a new function rsock_unix_sockaddr_len() to calculate the correct address length on Linux.

Besides that, the patch includes the following changes.

* fix Socket.unix_server_socket not to access the file system if the specified name is in abstract namespace.
* fix rsock_init_unixsock to use rb_inspect() to avoid ArgumentError in rb_sys_fail_str() when path includes NUL.
* support the longest path in sockaddr_un.
  * This change is necessary for backward compatibility.  Without it, the old name filled with extra NULs cannot be specified like UNIXSocket.open(name + "\0" * (108 - name.bytesize)).
=end



-- 
http://bugs.ruby-lang.org/