All of lore.kernel.org
 help / color / mirror / Atom feed
* bug: virtio PMD sends malformed packets for 32-bit processes on 64-bit kernel
@ 2017-06-22 14:58 Frederico Cadete
  2017-06-23 15:36 ` Tan, Jianfeng
  0 siblings, 1 reply; 6+ messages in thread
From: Frederico Cadete @ 2017-06-22 14:58 UTC (permalink / raw)
  To: yuanhan.liu, maxime.coquelin; +Cc: John Sucaet, jianfeng.tan, dev

Hello,

I believe commit 260aae9a [1] has introduced a regression for the case
of 32-bit process running on a 64-bit kernel.

The commit is effectively casting mbuf->buf_physaddr to uintptr_t
before dereferencing it. It truncates the physical address to the width
of the process's uint, and in the the aforementioned combination this
loses important bits.

I can confirm this under GDB. When virtqueue_enqueue_xmit is filling in
start_dp, I get this result:

(gdb) p /x cookie->buf_physaddr
$5 = 0x12f94a000
(gdb) p /x start_dp[idx].addr
$6 = 0x2f94a080

On my system, I capture the packet that goes out to the host and I see
it has the correct size but the content is all-zeroes.

I would like to propose a patch that would work for all supported
combinations of user/kernel bitwidth  *and* virtio-pci/virtio-user. But
I don't really see how that could work, given virtio-user tries to
store a physical address in rte_mbuf's "void *buf_addr", and this is
not always big enough for a physical address.
Any suggestions on if and how this could be fixed?

Meanwhile, the bug affects dpdk 17.05, 17.02.1 and master. Users not
requiring virtio-user support can avoid it by setting
CONFIG_VIRTIO_USER=n during compilation.

Best regards,
Frederico Cadete

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-06-28  2:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-22 14:58 bug: virtio PMD sends malformed packets for 32-bit processes on 64-bit kernel Frederico Cadete
2017-06-23 15:36 ` Tan, Jianfeng
2017-06-26  8:14   ` Frederico Cadete
2017-06-26 10:15     ` Tan, Jianfeng
2017-06-27 13:32       ` Frederico Cadete
2017-06-28  2:55         ` Tan, Jianfeng

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.