From patchwork Mon Jul 8 21:19:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Montes, Julio" X-Patchwork-Id: 11035811 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C9B79912 for ; Mon, 8 Jul 2019 21:30:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AAB8126E51 for ; Mon, 8 Jul 2019 21:30:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9A0E627F90; Mon, 8 Jul 2019 21:30:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4393326E51 for ; Mon, 8 Jul 2019 21:30:07 +0000 (UTC) Received: from localhost ([::1]:44810 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkb46-0006lE-3R for patchwork-qemu-devel@patchwork.kernel.org; Mon, 08 Jul 2019 17:20:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33936) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkb3B-0006FL-Vd for qemu-devel@nongnu.org; Mon, 08 Jul 2019 17:19:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkb3B-0005yo-2M for qemu-devel@nongnu.org; Mon, 08 Jul 2019 17:19:53 -0400 Received: from mga04.intel.com ([192.55.52.120]:18941) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hkb3A-0005tP-Pe for qemu-devel@nongnu.org; Mon, 08 Jul 2019 17:19:53 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jul 2019 14:19:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,468,1557212400"; d="scan'208";a="167228709" Received: from unknown (HELO fedora.zpn.intel.com.) ([10.219.4.39]) by fmsmga007.fm.intel.com with ESMTP; 08 Jul 2019 14:19:42 -0700 From: Julio Montes To: qemu-devel@nongnu.org Date: Mon, 8 Jul 2019 21:19:36 +0000 Message-Id: <20190708211936.8037-1-julio.montes@intel.com> X-Mailer: git-send-email 2.17.2 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.120 Subject: [Qemu-devel] [RFC] memory-backend-file/nvdimm: support read-only files as memory-backends X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Julio Montes , pbonzini@redhat.com, philmd@redhat.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Currently is not possible to use a file that is part of a read-only filesystem as memory backend for nvdimm devices, even if this is not modified in the guest. In order to improve the security of Virtual Machines that share and do not modify the memory-backend-file, QEMU should support read-only memory-backeds. Use case: * Kata Containers use a memory-backed-file as read-only rootfs, and this file is used to start all the virtual machines in the node. It would be really bad if somehow a malicious container modified it. Signed-off-by: Julio Montes --- exec.c | 6 ++++++ 1 file changed, 6 insertions(+) -- 2.17.2 diff --git a/exec.c b/exec.c index 50ea9c5aaa..1eb170b55a 100644 --- a/exec.c +++ b/exec.c @@ -1852,6 +1852,12 @@ static int file_ram_open(const char *path, break; } g_free(filename); + } else if (errno == EROFS) { + fd = open(path, O_RDONLY); + if (fd >= 0) { + /* @path names an existing read-only file, use it */ + break; + } } if (errno != EEXIST && errno != EINTR) { error_setg_errno(errp, errno,