From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D34CC4743C for ; Mon, 14 Jun 2021 11:21:23 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6F42760FF1 for ; Mon, 14 Jun 2021 11:21:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6F42760FF1 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:35382 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lskef-0001EE-L3 for qemu-devel@archiver.kernel.org; Mon, 14 Jun 2021 07:21:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lskdK-0007Ue-Jg; Mon, 14 Jun 2021 07:19:58 -0400 Received: from smtp-out1.suse.de ([195.135.220.28]:46744) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lskdI-0003E6-Ij; Mon, 14 Jun 2021 07:19:58 -0400 Received: from imap.suse.de (imap-alt.suse-dmz.suse.de [192.168.254.47]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id D136421984; Mon, 14 Jun 2021 11:19:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1623669592; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z11yPelIfrZI7kSY9AftP9/NICYUQr/Mka6EaD8p9wc=; b=K8cYJTH1RZVutoKvc0n4Te/Pdk1dSatwRuqco7SAMJSwie1YlTit+2KuhQSz10uKx8RQWS VV1hMmWqvI1hNn3OVJtTlBm0jcxjcF0DT3fDNB9t6Y4NeM4qdA5G7ZBprIRzgOAAUId36H guX5Onupn1miuc3KzEScn1IVqlWEKHQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1623669592; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z11yPelIfrZI7kSY9AftP9/NICYUQr/Mka6EaD8p9wc=; b=ZwzU6mJkRaFG+XIedc4K9btnfhu5wtgHnq3JMraDk99s6DCn5b8ng0iPQ9eTQTmSeFPluf 0I6x5q9B7NtNbHBA== Received: from imap3-int (imap-alt.suse-dmz.suse.de [192.168.254.47]) by imap.suse.de (Postfix) with ESMTP id 3AD83118DD; Mon, 14 Jun 2021 11:19:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1623669592; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z11yPelIfrZI7kSY9AftP9/NICYUQr/Mka6EaD8p9wc=; b=K8cYJTH1RZVutoKvc0n4Te/Pdk1dSatwRuqco7SAMJSwie1YlTit+2KuhQSz10uKx8RQWS VV1hMmWqvI1hNn3OVJtTlBm0jcxjcF0DT3fDNB9t6Y4NeM4qdA5G7ZBprIRzgOAAUId36H guX5Onupn1miuc3KzEScn1IVqlWEKHQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1623669592; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z11yPelIfrZI7kSY9AftP9/NICYUQr/Mka6EaD8p9wc=; b=ZwzU6mJkRaFG+XIedc4K9btnfhu5wtgHnq3JMraDk99s6DCn5b8ng0iPQ9eTQTmSeFPluf 0I6x5q9B7NtNbHBA== Received: from director2.suse.de ([192.168.254.72]) by imap3-int with ESMTPSA id puRLDFg7x2BeDQAALh3uQQ (envelope-from ); Mon, 14 Jun 2021 11:19:52 +0000 Subject: Re: [PATCH v2 17/18] modules: check arch and block load on mismatch To: =?UTF-8?Q?Daniel_P=2e_Berrang=c3=a9?= , Gerd Hoffmann References: <20210610055755.538119-1-kraxel@redhat.com> <20210610055755.538119-18-kraxel@redhat.com> From: Claudio Fontana Message-ID: <5c0c4831-b7ab-4260-9436-ffc94b2a9b22@suse.de> Date: Mon, 14 Jun 2021 13:19:51 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=195.135.220.28; envelope-from=cfontana@suse.de; helo=smtp-out1.suse.de X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.144, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Kevin Wolf , Thomas Huth , qemu-block@nongnu.org, "Michael S. Tsirkin" , Michael Roth , Cornelia Huck , Peter Lieven , qemu-devel@nongnu.org, Max Reitz , Halil Pasic , Christian Borntraeger , qemu-s390x@nongnu.org, Paolo Bonzini , Ronnie Sahlberg , Samuel Thibault , =?UTF-8?Q?Marc-Andr=c3=a9_Lureau?= , David Hildenbrand , Richard Henderson , Eric Blake , Markus Armbruster Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" On 6/10/21 2:35 PM, Daniel P. Berrangé wrote: > On Thu, Jun 10, 2021 at 07:57:54AM +0200, Gerd Hoffmann wrote: >> Add module_allow_arch() to set the target architecture. >> In case a module is limited to some arch verify arches >> match and ignore the module if not. >> >> Signed-off-by: Gerd Hoffmann >> --- >> include/qemu/module.h | 1 + >> softmmu/vl.c | 3 +++ >> util/module.c | 15 +++++++++++++++ >> 3 files changed, 19 insertions(+) >> >> diff --git a/include/qemu/module.h b/include/qemu/module.h >> index d3cab3c25a2f..7825f6d8c847 100644 >> --- a/include/qemu/module.h >> +++ b/include/qemu/module.h >> @@ -72,6 +72,7 @@ void module_call_init(module_init_type type); >> bool module_load_one(const char *prefix, const char *lib_name, bool mayfail); >> void module_load_qom_one(const char *type); >> void module_load_qom_all(void); >> +void module_allow_arch(const char *arch); >> >> /* >> * macros to store module metadata in a .modinfo section. >> diff --git a/softmmu/vl.c b/softmmu/vl.c >> index ba26a042b284..96316774fcc9 100644 >> --- a/softmmu/vl.c >> +++ b/softmmu/vl.c >> @@ -126,6 +126,8 @@ >> #include "sysemu/iothread.h" >> #include "qemu/guest-random.h" >> >> +#include "config-host.h" >> + >> #define MAX_VIRTIO_CONSOLES 1 >> >> typedef struct BlockdevOptionsQueueEntry { >> @@ -2723,6 +2725,7 @@ void qemu_init(int argc, char **argv, char **envp) >> error_init(argv[0]); >> qemu_init_exec_dir(argv[0]); >> >> + module_allow_arch(TARGET_NAME); >> qemu_init_subsystems(); >> >> /* first pass of option parsing */ >> diff --git a/util/module.c b/util/module.c >> index 6e4199169c41..564b8e3da760 100644 >> --- a/util/module.c >> +++ b/util/module.c >> @@ -122,6 +122,12 @@ void module_call_init(module_init_type type) >> static Modules *modinfo; >> static char *module_dirs[5]; >> static int module_ndirs; >> +static const char *module_arch; >> + >> +void module_allow_arch(const char *arch) >> +{ >> + module_arch = arch; >> +} >> >> static void module_load_path_init(void) >> { >> @@ -295,6 +301,14 @@ bool module_load_one(const char *prefix, const char *lib_name, bool mayfail) >> module_load_modinfo(); >> >> for (modlist = modinfo->list; modlist != NULL; modlist = modlist->next) { >> + if (modlist->value->has_arch) { >> + if (strcmp(modlist->value->name, module_name) == 0) { >> + if (!module_arch || >> + strcmp(modlist->value->arch, module_arch) != 0) { >> + return false; >> + } >> + } >> + } > > I have a little hard time following the code paths, but IIUC, with this > change, instead of "module.so" we would have multiple copies of something > like "module-$arch.so" ? Then we load them all, read their modinfo section > and discard the ones with non-matching arch ? > > If that is a correct understanding, then I wonder about the scalability of > it. We have 30 system emulator targets right now, so if we get even a few > arch specific modues, that's going to be alot of modules we're loading, > checking and discarding. > > Wouldn't it be simpler if we just made use of the directory layout > /usr/lib64/qemu/$mod.so for common modules and /usr/lib64/qemu/$arch/$mod.so > for arch specific modules. That would let us load only the modules we know > are applicable for the system target arch and not need this post-load > filtering from metadata. > > Regards, > Daniel > agreed. Claudio