go syscall: 在WSL1中测试失败

x6h2sr28  于 10个月前  发布在  Go
关注(0)|答案(2)|浏览(95)

你使用的Go版本是什么( go version )?

  1. $ go version
  2. tip

这个问题在最新版本中是否重现?

是的。

你正在使用什么操作系统和处理器架构( go env )?

go env 输出

  1. $ go env

你做了什么?

在 wsl1 Ubuntu 22.04.3 LTS上运行go test syscall命令。

你期望看到什么?

测试通过。

你实际上看到了什么?

  1. --- FAIL: TestSCMCredentials (0.00s)
  2. creds_test.go:110: ReadMsgUnix flags = 0x0, want 0x40000000 (MSG_CMSG_CLOEXEC)
  3. --- FAIL: TestPidFD (0.00s)
  4. exec_linux_test.go:576: can't start a process: fork/exec /tmp/go-build2291011540/b001/syscall.test: invalid argument
  5. --- FAIL: TestSetuidEtc (0.01s)
  6. syscall_linux_test.go:583: [6] "Setgroups([]int{0,1,2,3})" comparison: "/proc/24624/status" got:"Groups:" want:"Groups:\t0 1 2 3" (bad) [pid=24624 file:'Name: syscall.test
  7. State: S (sleeping)
  8. Tgid: 24624
  9. Pid: 24624
  10. PPid: 24541
  11. TracerPid: 0
  12. Uid: 0 0 0 0
  13. Gid: 0 0 0 0
  14. FDSize: 18
  15. Groups:
  16. VmPeak: 0 kB
  17. VmSize: 1838804 kB
  18. VmLck: 0 kB
  19. VmHWM: 0 kB
  20. VmRSS: 5432 kB
  21. VmData: 0 kB
  22. VmStk: 0 kB
  23. VmExe: 1292 kB
  24. VmLib: 0 kB
  25. VmPTE: 0 kB
  26. Threads: 9
  27. SigQ: 0/0
  28. SigPnd: 0000000000000000
  29. ShdPnd: 0000000000000000
  30. SigBlk: 0000000000000000
  31. SigIgn: 0000000000000000
  32. SigCgt: 0000000000000000
  33. CapInh: 0000000000000000
  34. CapPrm: 0000001fffffffff
  35. CapEff: 0000001fffffffff
  36. CapBnd: 0000001fffffffff
  37. Cpus_allowed: f
  38. Cpus_allowed_list: 0-3
  39. Mems_allowed: 1
  40. Mems_allowed_list: 0
  41. voluntary_ctxt_switches: 150
  42. nonvoluntary_ctxt_switches: 545
  43. ' Pid: 24624]
  44. syscall_linux_test.go:583: [8] "Setgroups([]int{0})" comparison: "/proc/24624/status" got:"Groups:" want:"Groups:\t0" (bad) [pid=24624 file:'Name: syscall.test
  45. State: S (sleeping)
  46. Tgid: 24624
  47. Pid: 24624
  48. PPid: 24541
  49. TracerPid: 0
  50. Uid: 0 0 0 0
  51. Gid: 0 0 0 0
  52. FDSize: 18
  53. Groups:
  54. VmPeak: 0 kB
  55. VmSize: 1838804 kB
  56. VmLck: 0 kB
  57. VmHWM: 0 kB
  58. VmRSS: 5528 kB
  59. VmData: 0 kB
  60. VmStk: 0 kB
  61. VmExe: 1292 kB
  62. VmLib: 0 kB
  63. VmPTE: 0 kB
  64. Threads: 9
  65. SigQ: 0/0
  66. SigPnd: 0000000000000000
  67. ShdPnd: 0000000000000000
  68. SigBlk: 0000000000000000
  69. SigIgn: 0000000000000000
  70. SigCgt: 0000000000000000
  71. CapInh: 0000000000000000
  72. CapPrm: 0000001fffffffff
  73. CapEff: 0000001fffffffff
  74. CapBnd: 0000001fffffffff
  75. Cpus_allowed: f
  76. Cpus_allowed_list: 0-3
  77. Mems_allowed: 1
  78. Mems_allowed_list: 0
  79. voluntary_ctxt_switches: 150
  80. nonvoluntary_ctxt_switches: 545
  81. ' Pid: 24624]
  82. --- FAIL: TestFcntlFlock (0.03s)
  83. syscall_unix_test.go:107: child process: "--- FAIL: TestFcntlFlock (0.00s)\n syscall_unix_test.go:124: FcntlFlock got {1 0 [0 0 0 0] 0 4294967296 0 [0 0 0 0]}, want {1 0 [0 0 0 0] 31415 271828 24624 [0 0 0 0]}\nFAIL\n", exit status 1
  84. FAIL
  85. FAIL syscall 5.177s
ccgok5k5

ccgok5k51#

WSL1使用系统调用模拟,因此我怀疑在这些情况下,WSL1只是简单地没有忠实地模拟系统调用(例如,看起来他们的/proc/PID/status文件并没有实现"Groups"字段)。
我们有一个WSL构建器,但我认为它是WSL2,所以我们看不到WSL1的故障。
cc @golang/windows

zwghvu4y

zwghvu4y2#

我们在分级讨论中讨论了这个问题,但我们并不确定正确的前进路径是什么,因为我们没有为WSL1和WSL2定义明确的政策。我提交了#63503来尝试解决这个问题。

相关问题