|
@@ -1406,17 +1406,17 @@ static uint16_t virtio_net_handle_rss(VirtIONet *n,
|
|
n->rss_data.hash_types = virtio_ldl_p(vdev, &cfg.hash_types);
|
|
n->rss_data.hash_types = virtio_ldl_p(vdev, &cfg.hash_types);
|
|
n->rss_data.indirections_len =
|
|
n->rss_data.indirections_len =
|
|
virtio_lduw_p(vdev, &cfg.indirection_table_mask);
|
|
virtio_lduw_p(vdev, &cfg.indirection_table_mask);
|
|
- n->rss_data.indirections_len++;
|
|
|
|
if (!do_rss) {
|
|
if (!do_rss) {
|
|
- n->rss_data.indirections_len = 1;
|
|
|
|
|
|
+ n->rss_data.indirections_len = 0;
|
|
}
|
|
}
|
|
- if (!is_power_of_2(n->rss_data.indirections_len)) {
|
|
|
|
- err_msg = "Invalid size of indirection table";
|
|
|
|
|
|
+ if (n->rss_data.indirections_len >= VIRTIO_NET_RSS_MAX_TABLE_LEN) {
|
|
|
|
+ err_msg = "Too large indirection table";
|
|
err_value = n->rss_data.indirections_len;
|
|
err_value = n->rss_data.indirections_len;
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
- if (n->rss_data.indirections_len > VIRTIO_NET_RSS_MAX_TABLE_LEN) {
|
|
|
|
- err_msg = "Too large indirection table";
|
|
|
|
|
|
+ n->rss_data.indirections_len++;
|
|
|
|
+ if (!is_power_of_2(n->rss_data.indirections_len)) {
|
|
|
|
+ err_msg = "Invalid size of indirection table";
|
|
err_value = n->rss_data.indirections_len;
|
|
err_value = n->rss_data.indirections_len;
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|