From 683f0561b3c34c9df2634365b1405fd4545015d1 Mon Sep 17 00:00:00 2001 From: iyzyi Date: Wed, 17 Apr 2024 23:38:54 +0800 Subject: [PATCH] unix: fix IoctlGetPtmget get empty ptsname on NetBSD. On NetBSD, because the size of the Ptmget structure does not match the value of TIOCPTSNAME, IoctlGetPtmget uses an incorrect structure internally, resulting in empty ptsname. See https://github.com/NetBSD/src/blob/trunk/sys/sys/ttycom.h Fixes #66871 --- unix/syscall_netbsd_test.go | 7 ++++++- unix/ztypes_netbsd_386.go | 4 ++-- unix/ztypes_netbsd_amd64.go | 4 ++-- unix/ztypes_netbsd_arm64.go | 4 ++-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/unix/syscall_netbsd_test.go b/unix/syscall_netbsd_test.go index d26fe314cb..cd22c94d1c 100644 --- a/unix/syscall_netbsd_test.go +++ b/unix/syscall_netbsd_test.go @@ -38,7 +38,12 @@ func TestIoctlPtmget(t *testing.T) { t.Fatalf("IoctlGetPtmget: %v\n", err) } - t.Logf("sfd = %v, ptsname = %v", ptm.Sfd, unix.ByteSliceToString(ptm.Sn[:])) + ptsname := unix.ByteSliceToString(ptm.Sn[:]) + if ptsname == "" { + t.Fatalf("IoctlGetPtmget: ptsname is empty string\n") + } + + t.Logf("sfd = %v, ptsname = %v", ptm.Sfd, ptsname) } func TestStatvfs(t *testing.T) { diff --git a/unix/ztypes_netbsd_386.go b/unix/ztypes_netbsd_386.go index f22e7947d9..fd767f29b1 100644 --- a/unix/ztypes_netbsd_386.go +++ b/unix/ztypes_netbsd_386.go @@ -438,8 +438,8 @@ type Winsize struct { type Ptmget struct { Cfd int32 Sfd int32 - Cn [1024]byte - Sn [1024]byte + Cn [16]byte + Sn [16]byte } const ( diff --git a/unix/ztypes_netbsd_amd64.go b/unix/ztypes_netbsd_amd64.go index 066a7d83d2..fd230f906e 100644 --- a/unix/ztypes_netbsd_amd64.go +++ b/unix/ztypes_netbsd_amd64.go @@ -446,8 +446,8 @@ type Winsize struct { type Ptmget struct { Cfd int32 Sfd int32 - Cn [1024]byte - Sn [1024]byte + Cn [16]byte + Sn [16]byte } const ( diff --git a/unix/ztypes_netbsd_arm64.go b/unix/ztypes_netbsd_arm64.go index 16085d3bbc..cc955b2618 100644 --- a/unix/ztypes_netbsd_arm64.go +++ b/unix/ztypes_netbsd_arm64.go @@ -446,8 +446,8 @@ type Winsize struct { type Ptmget struct { Cfd int32 Sfd int32 - Cn [1024]byte - Sn [1024]byte + Cn [16]byte + Sn [16]byte } const (