Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp2320880pxb; Fri, 8 Oct 2021 05:39:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyzGzj69eY003zhqAUDOvloPbfX5IumraaiGjhwz8k9ZwOHde9R+G3NRe4PuhhUae1fTWU8 X-Received: by 2002:a17:906:2c57:: with SMTP id f23mr4050555ejh.474.1633696742047; Fri, 08 Oct 2021 05:39:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633696742; cv=none; d=google.com; s=arc-20160816; b=m/y17yd/X64fzA3wQONhS+lgwX78xDKvXVHQNGVvoQFMVtI27Cu7MXeJ/kPt5zXsAE p+Z0BZ5VZa0fMZksWuJnTvG7zKT1qxv1n7rmqDKUl0iDUGPa0Y3qI396fHAAPUq0IrZj dPXZrYhhWInsKYEYe/7TSf7ENa9d107qB2LFRd9AgYyLW0+9ysy1cVvfIcaLZJEo7pC2 CWtKvWqWW+PKnnLsP3T8cyh38RdgiinKLmIYNHOZpmXo1KRfm2BH+roJ0+Rl9X6IKoqM 25F/XQtLhZu++lC0oSvM8YYgkklMyUF56SjuzQsDI4g9yqEz+vMuwtjUeM65PZgwFQ4X PoUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=zDWl+Gvb2G7P5eX8606PTSAJ0wHLXDHgjjBiCJqb8ok=; b=tRzrSODd8sbv8zXwJWvPFSsW/Z/B4IvFG+GJU+bVPyFFBpiV6QOEO03ok9kbUOdBv4 8yPrPdlRScJUM3v6nzv3RL9zHJTcpUsYADOFVUmwbONOkfNGwnO98r38qsy7GgGLqWuK NXf+rPu7TelD4yRMZCPMyUPV8OyFqU4N5drh8BPaT+D6gbTJR5EvgXL9NXzHtJq16Yrs nvAPFMJQkBL+i8mv4/Y+zY/U41hluzFATmq1FKUp8lMTOwggJSQXooOnafEFQNf14G27 Ahk90umWpYTpiK/BRYLTA1oP2RgdbWAI4R/au1QuI3zLJUmoGv5xQSUpI+nG9ULchmBh JkUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b="cc/HwbEt"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j2si3160340ejk.278.2021.10.08.05.38.37; Fri, 08 Oct 2021 05:39:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b="cc/HwbEt"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241191AbhJHMgr (ORCPT + 99 others); Fri, 8 Oct 2021 08:36:47 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:55460 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230197AbhJHMgo (ORCPT ); Fri, 8 Oct 2021 08:36:44 -0400 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 198BBSUZ010882; Fri, 8 Oct 2021 08:34:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding; s=pp1; bh=zDWl+Gvb2G7P5eX8606PTSAJ0wHLXDHgjjBiCJqb8ok=; b=cc/HwbEt0flnCbDL/nXG5Fko0xmDqyuHIUEJt07YzvNzkagDuiFCduiws3OBTPBiFggf 8N4xFCW1iO9o1P1hs2o7Z2shGdCmp28QEu7auW9UJKICy6zKIR0XhcPImnS26tiS1HKf ul4wcoRglHrtdl+gDJLj49MTHhRjIY2j6BjvkrrSq+I8vp/8/IlweTObIt24FBQrsTRY OlLnRzWBhkziT9hOUuFUnv0oYvPJteOnUf8IHKVPx7uoD0d7it+9xxXGFngJWKikGhtw 46RhnNPEBOrHNSwCUen6YD2GSPffnrEfuRp6G9R2K+J6Cvb7LGxFfh+13YqQVuyOw7sR 2A== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3bjmw3sufq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 08 Oct 2021 08:34:42 -0400 Received: from m0098396.ppops.net (m0098396.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 198C99ME024914; Fri, 8 Oct 2021 08:34:41 -0400 Received: from ppma04fra.de.ibm.com (6a.4a.5195.ip4.static.sl-reverse.com [149.81.74.106]) by mx0a-001b2d01.pphosted.com with ESMTP id 3bjmw3suek-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 08 Oct 2021 08:34:41 -0400 Received: from pps.filterd (ppma04fra.de.ibm.com [127.0.0.1]) by ppma04fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 198CWYbJ001067; Fri, 8 Oct 2021 12:34:39 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma04fra.de.ibm.com with ESMTP id 3bef2axdus-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 08 Oct 2021 12:34:39 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 198CYZra32375104 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 8 Oct 2021 12:34:35 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5C052A4051; Fri, 8 Oct 2021 12:34:35 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C5069A4057; Fri, 8 Oct 2021 12:34:34 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 8 Oct 2021 12:34:34 +0000 (GMT) From: Halil Pasic To: "Michael S. Tsirkin" , Jason Wang , Xie Yongji , virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org Cc: Halil Pasic , stable@vger.kernel.org, markver@us.ibm.com, Cornelia Huck , Christian Borntraeger , linux-s390@vger.kernel.org, stefanha@redhat.com, Raphael Norwitz , qemu-devel@nongnu.org Subject: [PATCH v2 1/1] virtio: write back F_VERSION_1 before validate Date: Fri, 8 Oct 2021 14:34:22 +0200 Message-Id: <20211008123422.1415577-1-pasic@linux.ibm.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: fS-bXBOkSH9r5eaQokYyjUjWFdYwkQxk X-Proofpoint-ORIG-GUID: FBv8P9RSm_0qv0GyOEuQkJiwApF1RJUN X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.391,FMLib:17.0.607.475 definitions=2021-10-08_03,2021-10-07_02,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 suspectscore=0 spamscore=0 mlxscore=0 priorityscore=1501 bulkscore=0 impostorscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2109230001 definitions=main-2110080074 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The virtio specification virtio-v1.1-cs01 states: "Transitional devices MUST detect Legacy drivers by detecting that VIRTIO_F_VERSION_1 has not been acknowledged by the driver." This is exactly what QEMU as of 6.1 has done relying solely on VIRTIO_F_VERSION_1 for detecting that. However, the specification also says: "... the driver MAY read (but MUST NOT write) the device-specific configuration fields to check that it can support the device ..." before setting FEATURES_OK. In that case, any transitional device relying solely on VIRTIO_F_VERSION_1 for detecting legacy drivers will return data in legacy format. In particular, this implies that it is in big endian format for big endian guests. This naturally confuses the driver which expects little endian in the modern mode. It is probably a good idea to amend the spec to clarify that VIRTIO_F_VERSION_1 can only be relied on after the feature negotiation is complete. However, we already have a regression so let's try to address it. The regressions affect the VIRTIO_NET_F_MTU feature of virtio-net and the VIRTIO_BLK_F_BLK_SIZE feature of virtio-blk for BE guests when virtio 1.0 is used on both sides. The latter renders virtio-blk unusable with DASD backing, because things simply don't work with the default. Cc: #v4.11 Signed-off-by: Halil Pasic Fixes: 82e89ea077b9 ("virtio-blk: Add validation for block size in config space") Fixes: fe36cbe0671e ("virtio_net: clear MTU when out of range") Reported-by: markver@us.ibm.com --- drivers/virtio/virtio.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 0a5b54034d4b..236081afe9a2 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c @@ -239,6 +239,17 @@ static int virtio_dev_probe(struct device *_d) driver_features_legacy = driver_features; } + /* + * Some devices detect legacy solely via F_VERSION_1. Write + * F_VERSION_1 to force LE config space accesses before FEATURES_OK for + * these when needed. + */ + if (drv->validate && !virtio_legacy_is_little_endian() + && device_features & BIT_ULL(VIRTIO_F_VERSION_1)) { + dev->features = BIT_ULL(VIRTIO_F_VERSION_1); + dev->config->finalize_features(dev); + } + if (device_features & (1ULL << VIRTIO_F_VERSION_1)) dev->features = driver_features & device_features; else base-commit: 60a9483534ed0d99090a2ee1d4bb0b8179195f51 -- 2.25.1