virtio: fix segfault on Tx desc flags setup
authorJianfeng Tan <jianfeng.tan@intel.com>
Mon, 25 Apr 2016 02:37:45 +0000 (02:37 +0000)
committerYuanhan Liu <yuanhan.liu@linux.intel.com>
Tue, 10 May 2016 17:53:28 +0000 (10:53 -0700)
commit2c0eb46f51b3d1364379243b5c9accb3ba49725d
tree33771dce61bc933f887ca17fc45f02dd2e97f42c
parente908312704278148b0b3155a0093c8b96bf59e26
virtio: fix segfault on Tx desc flags setup

After the do-while loop, idx could be VQ_RING_DESC_CHAIN_END (32768)
when it's the last vring desc buf we can get. Therefore, following
expresssion could lead to a segfault error, as it tries to access
beyond the desc memory boundary.

    start_dp[idx].flags &= ~VRING_DESC_F_NEXT;

This bug could be reproduced easily with "set fwd txonly" in the
guest PMD, where the dequeue on host is slower than the guest Tx,
that running out of free desc buf is pretty easy.

The fix is straightforward and easy, just remove it, as we have
already set desc flags properly inside the do-while loop.

Fixes: dd856dfcb9e ("virtio: use any layout on Tx")

[Yuanhan Liu: commit log reword]
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Huawei Xie <huawei.xie@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
drivers/net/virtio/virtio_rxtx.c