<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#467886" vlink="#96607D" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>Hi all,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m attempting to use gdb to debug over a serial connection using two VM’s. I’m getting a “Permission denied” when I try to connect over the serial com port. Gdb has the following output when I try to connect: <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Reading symbols from vmlinux...<o:p></o:p></p><p class=MsoNormal>+target remote /dev/ttyS1<o:p></o:p></p><p class=MsoNormal>Remote debugging using /dev/ttyS1<o:p></o:p></p><p class=MsoNormal>[remote] start_remote_1: enter<o:p></o:p></p><p class=MsoNormal>  [remote] Sending packet: $qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+;memory-tagging+#ec<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: d<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: i<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: a<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: g<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: :<o:p></o:p></p><p class=MsoNormal>  [remote] Junk:<o:p></o:p></p><p class=MsoNormal>  [remote] Received Nak<o:p></o:p></p><p class=MsoNormal>  [remote] Sending packet: $qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+;memory-tagging+#ec<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: 2<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: 2<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: :<o:p></o:p></p><p class=MsoNormal>  [remote] Junk:<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: P<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: e<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: r<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: m<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: i<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: s<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: s<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: i<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: o<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: n<o:p></o:p></p><p class=MsoNormal>  [remote] Junk:<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: d<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: e<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: n<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: i<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: e<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: d<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: ^M<o:p></o:p></p><p class=MsoNormal>  [remote] Junk:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>  [remote] Junk: [<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: 2<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: ]<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: k<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: d<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: b<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: ><o:p></o:p></p><p class=MsoNormal>  [remote] Junk:<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: :<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: m<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: u<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: l<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: t<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: i<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: p<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: r<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: o<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: c<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: e<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: s<o:p></o:p></p><p class=MsoNormal>  [remote] Junk: s<o:p></o:p></p><p class=MsoNormal>  [remote] Received Ack<o:p></o:p></p><p class=MsoNormal>  [remote] read_frame: Bad checksum, sentsum=0xec, csum=0x8, buf=qSupporteddiag: -22: Permission denied\r\n[2]kdb> :multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+;memory-tagging+<o:p></o:p></p><p class=MsoNormal>  [remote] getpkt: Timed out.<o:p></o:p></p><p class=MsoNormal>  [remote] getpkt: Timed out.<o:p></o:p></p><p class=MsoNormal>Ignoring packet error, continuing...<o:p></o:p></p><p class=MsoNormal>  [remote] packet_ok: Packet qSupported (supported-packets) is supported<o:p></o:p></p><p class=MsoNormal>  [remote] Sending packet: $vCont?#49<o:p></o:p></p><p class=MsoNormal>  [remote] Received Nak<o:p></o:p></p><p class=MsoNormal>  [remote] Sending packet: $vCont?#49<o:p></o:p></p><p class=MsoNormal>  [remote] Received Ack<o:p></o:p></p><p class=MsoNormal>  [remote] Packet received: vCont?<o:p></o:p></p><p class=MsoNormal>  [remote] packet_ok: Packet vCont (verbose-resume) is NOT supported<o:p></o:p></p><p class=MsoNormal>  [remote] packet_ok: Packet vCont (verbose-resume) is NOT supported<o:p></o:p></p><p class=MsoNormal>  [remote] Sending packet: $vMustReplyEmpty#3a<o:p></o:p></p><p class=MsoNormal>  [remote] putpkt_binary: Packet instead of Ack, ignoring it<o:p></o:p></p><p class=MsoNormal>  [remote] Received Ack<o:p></o:p></p><p class=MsoNormal>  [remote] Packet received: vMustReplyEmpty<o:p></o:p></p><p class=MsoNormal>[remote] start_remote_1: exit<o:p></o:p></p><p class=MsoNormal>Remote replied unexpectedly to 'vMustReplyEmpty': vMustReplyEmpty<o:p></o:p></p><p class=MsoNormal>+quit<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It seems the target is denying permission. I’ve been searching around but have not found anything similar. I tried opening the permissions on the /dev/ttyS1 on both VM’s to rwxrwxrwx and that doesn’t help. There are no SELinux warnings on the debugger VM. I don’t know if SELinux is causing a problem on the target VM.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>More details about the configuration:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m running two Rocky 9.3 VM’s on Windows Hyper-V that I have connected over a named pipe using the Powershell Set-VMComport commands:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Set-VMComport -VMName "Rocky-Debugger" -Number 2 -Path <a href="file://./pipe/rocky-pipe-2">\\.\pipe\rocky-pipe-2</a><o:p></o:p></p><p class=MsoNormal>Set-VMComport -VMName "Rocky " -Number 2 -Path <a href="file://./pipe/rocky-pipe-2">\\.\pipe\rocky-pipe-2</a><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I downloaded the 6.8.5 kernel from the kernel.org website and compiled it on the “Rocky” vm using the following configuration:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>#<o:p></o:p></p><p class=MsoNormal># Generic Kernel Debugging Instruments<o:p></o:p></p><p class=MsoNormal>#<o:p></o:p></p><p class=MsoNormal>CONFIG_MAGIC_SYSRQ=y<o:p></o:p></p><p class=MsoNormal>CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1<o:p></o:p></p><p class=MsoNormal>CONFIG_MAGIC_SYSRQ_SERIAL=y<o:p></o:p></p><p class=MsoNormal>CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""<o:p></o:p></p><p class=MsoNormal>CONFIG_DEBUG_FS=y<o:p></o:p></p><p class=MsoNormal>CONFIG_DEBUG_FS_ALLOW_ALL=y<o:p></o:p></p><p class=MsoNormal># CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set<o:p></o:p></p><p class=MsoNormal># CONFIG_DEBUG_FS_ALLOW_NONE is not set<o:p></o:p></p><p class=MsoNormal>CONFIG_HAVE_ARCH_KGDB=y<o:p></o:p></p><p class=MsoNormal>CONFIG_KGDB=y<o:p></o:p></p><p class=MsoNormal>CONFIG_KGDB_HONOUR_BLOCKLIST=y<o:p></o:p></p><p class=MsoNormal>CONFIG_KGDB_SERIAL_CONSOLE=y<o:p></o:p></p><p class=MsoNormal>CONFIG_KGDB_TESTS=y<o:p></o:p></p><p class=MsoNormal># CONFIG_KGDB_TESTS_ON_BOOT is not set<o:p></o:p></p><p class=MsoNormal>CONFIG_KGDB_LOW_LEVEL_TRAP=y<o:p></o:p></p><p class=MsoNormal>CONFIG_KGDB_KDB=y<o:p></o:p></p><p class=MsoNormal>CONFIG_KDB_DEFAULT_ENABLE=0x0<o:p></o:p></p><p class=MsoNormal>CONFIG_KDB_KEYBOARD=y<o:p></o:p></p><p class=MsoNormal>CONFIG_KDB_CONTINUE_CATASTROPHIC=0<o:p></o:p></p><p class=MsoNormal>CONFIG_ARCH_HAS_EARLY_DEBUG=y<o:p></o:p></p><p class=MsoNormal>CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y<o:p></o:p></p><p class=MsoNormal># CONFIG_UBSAN is not set<o:p></o:p></p><p class=MsoNormal>CONFIG_HAVE_ARCH_KCSAN=y<o:p></o:p></p><p class=MsoNormal>CONFIG_HAVE_KCSAN_COMPILER=y<o:p></o:p></p><p class=MsoNormal># CONFIG_KCSAN is not set<o:p></o:p></p><p class=MsoNormal># end of Generic Kernel Debugging Instruments<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I added the kernel args “console=tty0 console=ttyS0,115200 kgdboc=ttyS1,115200”. I start the VM with the new kernel and run the command “echo g > /proc/sysrq-trigger”.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On the “Rocky-debugger” vm, I added my user to “dialout”. The permissions on /dev/ttyS1 is rw for the group.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I set the following in .gdbinit, “set serial baud 115200”.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Run “gdb vmlinux”, then “target remote /dev/ttyS1”. That’s when I get the “Permission denied”. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I can connect to the console over serial using “sudo screen ttyS0” and that works just fine. So I don’t believe it’s a Windows Hyper-V permissions issue.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m out of ideas. Any help is appreciated!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal>Bryan Carroll<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>