mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
unix: return ECONNREFUSE if a socket file exists but a socket isn't bound to it
PiperOrigin-RevId: 328843560
This commit is contained in:
@@ -1512,7 +1512,9 @@ func (fs *filesystem) BoundEndpointAt(ctx context.Context, rp *vfs.ResolvingPath
|
||||
path: opts.Addr,
|
||||
}, nil
|
||||
}
|
||||
return d.endpoint, nil
|
||||
if d.endpoint != nil {
|
||||
return d.endpoint, nil
|
||||
}
|
||||
}
|
||||
return nil, syserror.ECONNREFUSED
|
||||
}
|
||||
|
||||
@@ -783,6 +783,9 @@ func (fs *filesystem) BoundEndpointAt(ctx context.Context, rp *vfs.ResolvingPath
|
||||
}
|
||||
switch impl := d.inode.impl.(type) {
|
||||
case *socketFile:
|
||||
if impl.ep == nil {
|
||||
return nil, syserror.ECONNREFUSED
|
||||
}
|
||||
return impl.ep, nil
|
||||
default:
|
||||
return nil, syserror.ECONNREFUSED
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/un.h>
|
||||
@@ -103,6 +104,24 @@ TEST(MknodTest, UnimplementedTypesReturnError) {
|
||||
ASSERT_THAT(mknod(path.c_str(), S_IFBLK, 0), SyscallFailsWithErrno(EPERM));
|
||||
}
|
||||
|
||||
TEST(MknodTest, Socket) {
|
||||
ASSERT_THAT(chdir(GetAbsoluteTestTmpdir().c_str()), SyscallSucceeds());
|
||||
|
||||
SKIP_IF(IsRunningOnGvisor() && IsRunningWithVFS1());
|
||||
|
||||
ASSERT_THAT(mknod("./file0", S_IFSOCK | S_IRUSR | S_IWUSR, 0),
|
||||
SyscallSucceeds());
|
||||
|
||||
int sk;
|
||||
ASSERT_THAT(sk = socket(AF_UNIX, SOCK_SEQPACKET, 0), SyscallSucceeds());
|
||||
FileDescriptor fd(sk);
|
||||
|
||||
struct sockaddr_un addr = {.sun_family = AF_UNIX};
|
||||
absl::SNPrintF(addr.sun_path, sizeof(addr.sun_path), "./file0");
|
||||
ASSERT_THAT(connect(sk, (struct sockaddr *)&addr, sizeof(addr)),
|
||||
SyscallFailsWithErrno(ECONNREFUSED));
|
||||
}
|
||||
|
||||
TEST(MknodTest, Fifo) {
|
||||
const std::string fifo = NewTempAbsPath();
|
||||
ASSERT_THAT(mknod(fifo.c_str(), S_IFIFO | S_IRUSR | S_IWUSR, 0),
|
||||
|
||||
Reference in New Issue
Block a user