delve golang debugger can't read vvar on arm64

Bug #1938474 reported by Dan Bungert
10
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Delve
Fix Released
Unknown
delve (Ubuntu)
Fix Released
Undecided
Unassigned
linux (Ubuntu)
Invalid
Undecided
Unassigned

Bug Description

Also documented upstream:
https://github.com/go-delve/delve/issues/2630

In version 1.6.1 of the delve golang debugger, a 'dump' feature was added.
https://github.com/go-delve/delve/pull/2173

Since that time, arm64 autopkgtest of delve has been failing like so:

https://autopkgtest.ubuntu.com/results/autopkgtest-impish/impish/arm64/d/delve/20210707_003312_d3699@/log.gz
=== RUN TestDump
    proc_test.go:5117: testing normal dump
    proc_test.go:5029: bad DumpState &proc.DumpState{Mutex:sync.Mutex{state:0, sema:0x0}, Dumping:false, AllDone:true, Canceled:false, DoneChan:(chan struct {})(nil), ThreadsDone:5, ThreadsTotal:5, MemDone:0x657b000, MemTotal:0x657d000, Err:error(nil)}
--- FAIL: TestDump (0.98s)

The test fails becaue MemDone != MemTotal.
The decision on what to dump or not is based on smaps.
The failing item is vvar.
err when attempting to read is
error(syscall.Errno) golang.org/x/sys/unix.EIO (5)

Notably however, this test passes in debian CI. (kernel 4.19)
Also, running on older series such as bionic/focal does pass.

vvar section from vm with kernel 5.4 (test pass):
ffff924a4000-ffff924a5000 r--p 00000000 00:00 0 [vvar]
Size: 4 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr de

vvar from failing case
ffffac144000-ffffac146000 r--p 00000000 00:00 0 [vvar]
Size: 8 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr pf de

Two noticible differences
1) 4kB vs 8kB size
2) Failing case adds the "pf" flag ("pure PFN range")

Open questions:
1) Would we expect that a debugger could read vvar on arm64?
2) Any thoughts on why this seems to work on older kernels?
3) Do we believe this to be a kernel bug,
   or should the delve debugger not expect to read vvar?
4) Is it sensible for a debugger to attempt to read things with the "pf"
   flag? Note that the "dd" ("do not include area into core dump")
   flag is not set.

ProblemType: Bug
DistroRelease: Ubuntu 21.10
Package: linux-image-5.11.0-20-generic 5.11.0-20.21+21.10.1
ProcVersionSignature: Ubuntu 5.11.0-20.21+21.10.1-generic 5.11.21
Uname: Linux 5.11.0-20-generic aarch64
AlsaDevices:
 total 0
 crw-rw---- 1 root audio 116, 1 Jul 29 21:21 seq
 crw-rw---- 1 root audio 116, 33 Jul 29 21:21 timer
AplayDevices: Error: [Errno 2] No such file or directory: 'aplay'
ApportVersion: 2.20.11-0ubuntu67
Architecture: arm64
ArecordDevices: Error: [Errno 2] No such file or directory: 'arecord'
AudioDevicesInUse: Error: command ['fuser', '-v', '/dev/snd/seq', '/dev/snd/timer'] failed with exit code 1:
CasperMD5CheckResult: pass
Date: Thu Jul 29 21:34:34 2021
InstallationDate: Installed on 2021-07-29 (0 days ago)
InstallationMedia: Ubuntu-Server 21.10 "Impish Indri" - Alpha arm64 (20210729)
IwConfig: Error: [Errno 2] No such file or directory: 'iwconfig'
Lsusb:
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Lsusb-t:
 /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 5000M
 /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M
MachineType: QEMU QEMU Virtual Machine
PciMultimedia:

ProcEnviron:
 TERM=screen-256color
 PATH=(custom, no user)
 XDG_RUNTIME_DIR=<set>
 LANG=C.UTF-8
 SHELL=/bin/bash
ProcFB:

ProcKernelCmdLine: BOOT_IMAGE=/vmlinuz-5.11.0-20-generic root=/dev/mapper/username--vg-username--lv ro
RelatedPackageVersions:
 linux-restricted-modules-5.11.0-20-generic N/A
 linux-backports-modules-5.11.0-20-generic N/A
 linux-firmware 1.199
RfKill: Error: [Errno 2] No such file or directory: 'rfkill'
SourcePackage: linux
UpgradeStatus: No upgrade log present (probably fresh install)
dmi.bios.date: 02/06/2015
dmi.bios.release: 0.0
dmi.bios.vendor: EFI Development Kit II / OVMF
dmi.bios.version: 0.0.0
dmi.chassis.type: 1
dmi.chassis.vendor: QEMU
dmi.chassis.version: virt-5.2
dmi.modalias: dmi:bvnEFIDevelopmentKitII/OVMF:bvr0.0.0:bd02/06/2015:br0.0:svnQEMU:pnQEMUVirtualMachine:pvrvirt-5.2:cvnQEMU:ct1:cvrvirt-5.2:
dmi.product.name: QEMU Virtual Machine
dmi.product.version: virt-5.2
dmi.sys.vendor: QEMU

Related branches

Revision history for this message
Dan Bungert (dbungert) wrote :
description: updated
Dan Bungert (dbungert)
tags: added: update-excuse
description: updated
Bryce Harrington (bryce)
affects: linux → delve
Revision history for this message
Ubuntu Kernel Bot (ubuntu-kernel-bot) wrote : Status changed to Confirmed

This change was made by a bot.

Changed in linux (Ubuntu):
status: New → Confirmed
Revision history for this message
Dan Bungert (dbungert) wrote :

Should the 'dd' flag be set in this case?

Changed in delve:
status: Unknown → Fix Released
Revision history for this message
Shengjing Zhu (zhsj) wrote :

Fixed in v1.8.0

Changed in delve (Ubuntu):
status: New → Fix Released
Revision history for this message
Oibaf (oibaf) wrote :

Fixed in delve.

Changed in linux (Ubuntu):
status: Confirmed → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.