Michael S. Tsirkin
2014-Oct-23 21:28 UTC
[PATCH RFC 3/4] virtio_net: stricter short buffer length checks
Our buffer length check is not strict enough for mergeable
buffers: buffer can still be shorter that header + address
by 2 bytes.
Fix that up.
Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
---
drivers/net/virtio_net.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index a795a23..9c6d50f 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -437,7 +437,7 @@ static void receive_buf(struct virtnet_info *vi, struct
receive_queue *rq,
struct sk_buff *skb;
struct virtio_net_hdr_mrg_rxbuf *hdr;
- if (unlikely(len < sizeof(struct virtio_net_hdr) + ETH_HLEN)) {
+ if (unlikely(len < vi->hdr_len + ETH_HLEN)) {
pr_debug("%s: short packet %i\n", dev->name, len);
dev->stats.rx_length_errors++;
if (vi->mergeable_rx_bufs) {
--
MST
Michael S. Tsirkin
2014-Oct-23 21:28 UTC
[PATCH RFC 4/4] virtio_net: bigger header when VERSION_1 is set
With VERSION_1 virtio_net uses same header size whether mergeable buffers are enabled or not. Signed-off-by: Michael S. Tsirkin <mst at redhat.com> --- drivers/net/virtio_net.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 9c6d50f..a2fe340 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1764,7 +1764,8 @@ static int virtnet_probe(struct virtio_device *vdev) if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF)) vi->mergeable_rx_bufs = true; - if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF)) + if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF) || + virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) vi->hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf); else vi->hdr_len = sizeof(struct virtio_net_hdr); -- MST
Rusty Russell
2014-Oct-28 00:28 UTC
[PATCH RFC 4/4] virtio_net: bigger header when VERSION_1 is set
"Michael S. Tsirkin" <mst at redhat.com> writes:> With VERSION_1 virtio_net uses same header size > whether mergeable buffers are enabled or not. > > Signed-off-by: Michael S. Tsirkin <mst at redhat.com>These two are great too, thanks: Acked-by: Rusty Russell <rusty at rustcorp.com.au> Cheers, Rusty.> --- > drivers/net/virtio_net.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 9c6d50f..a2fe340 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -1764,7 +1764,8 @@ static int virtnet_probe(struct virtio_device *vdev) > if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF)) > vi->mergeable_rx_bufs = true; > > - if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF)) > + if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF) || > + virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) > vi->hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf); > else > vi->hdr_len = sizeof(struct virtio_net_hdr); > -- > MST
Maybe Matching Threads
- [PATCH RFC 4/4] virtio_net: bigger header when VERSION_1 is set
- [PATCH v6 26/46] virtio_net: bigger header when VERSION_1 is set
- [PATCH v6 26/46] virtio_net: bigger header when VERSION_1 is set
- [PATCH v4 23/42] virtio_net: bigger header when VERSION_1 is set
- [PATCH v4 23/42] virtio_net: bigger header when VERSION_1 is set