From nobody Sun Dec 14 05:47:24 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1764612129; cv=none; d=zohomail.com; s=zohoarc; b=DZvL/cxwdjn0zTA3LSoO6lT3uxbjIgPIzy1JkiFZ3kZz+o1Kr2/R7yxuwdniMpeg7SiORyp+3SxGAab0kLB1N6e3cr3w6SAEcGQEKuShhaMEam5WzhBLJXH86/Qk7+g0AQ834IRYA02K8YmBL7LEJUS4MsDP348yz10cWkYsxp4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764612129; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+rrPKU+C+PoV3fBCCNpUSodQaRGibhXiLY/RrjSQ7tg=; b=Cr1b1Pwpi8puhPrW1Lh+JI4lehoSPsq7zHTm78VGqL6a0YMOPawkDJx9Ci6nCVQL8YkgwW3k43RRQAS5Yr4zn0+fNIvH7Z2fdLD1Q+I5rTPsqTNpKk3sTgreFp1wLktQG7r2uaJq0W8ClNZIx4nQqEMJAnlifKukHRvf0R8ixb8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176461212930865.96903557568783; Mon, 1 Dec 2025 10:02:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vQ8DO-0004Sp-AB; Mon, 01 Dec 2025 13:01:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vQ8D2-0004Sd-3o for qemu-devel@nongnu.org; Mon, 01 Dec 2025 13:01:12 -0500 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vQ8Cx-00084v-8D for qemu-devel@nongnu.org; Mon, 01 Dec 2025 13:01:11 -0500 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-5959d9a8eceso3926547e87.3 for ; Mon, 01 Dec 2025 10:01:01 -0800 (PST) Received: from [192.168.88.252] ([82.215.83.93]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-596bf8a7cffsm3850429e87.18.2025.12.01.10.00.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 01 Dec 2025 10:00:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764612060; x=1765216860; darn=nongnu.org; h=content-transfer-encoding:subject:from:cc:to:content-language :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=+rrPKU+C+PoV3fBCCNpUSodQaRGibhXiLY/RrjSQ7tg=; b=IMa3E2wBvVNfX4Fztcyk362VkO0U5Ane/fMS3TALYP7Dc8SP0Yl9IxWudS4N1ntLpu Js5r/Cjwhi6X2cRl5/GOXwKplau80b7FbSPmQgjYonWQGn5J50hJaH5OH8vhu2nZ8vdo v633iaRmwifXNo79JLQPCG6V5D28TZT8tA0Rv8gU/pdMs5KUp6jUzNWF7te9EcK806y7 CM3UIpprpGj4Udkgm1iNWx72BsThdYGUQzzJAmrpJM9ZlrbMOIC79/kSMCkSD0qaJxoG iAV12gD+M4QMicKwYqkrP4OPftXm2oU2MlJ0qv/pP0CV0lF9QzScXfpUPL+qyxYtfXI5 qijw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764612060; x=1765216860; h=content-transfer-encoding:subject:from:cc:to:content-language :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=+rrPKU+C+PoV3fBCCNpUSodQaRGibhXiLY/RrjSQ7tg=; b=pSu0GfYbGrYx0sdVYmP1TTK1ivPgllKTBHYJybe2urPGFXFvxPECpsNj9n0IxLmU3+ TJYr1OeHkNWR8q/T5fCij4XFnBvEHi/axktzA8u+FEdgQSiERcoS7QgpnD4ox/lwuPSC 0pNkmwFP2YNQAWL6kmgTiccZBl6Mpd5RJEVVFu3WJuLwDCnDrUOOAAFV1RcaUn5hdXeU 9Zb8L5//Bihr2D6arzthTUZZZRtZhtp4ywDRnQtJD1GSqXAF0Mj1wviKU0iA/ge91wC/ qRmS7F7iJuTqI4R0OE5ya5DqFEeZkQO6Gyhhklb/5imyMwQzkDci/6SXd0wlH0fC/mc5 TIvQ== X-Gm-Message-State: AOJu0YzD0X35N1m7A9dVLo/YzgOJtlwyHk0i92AP0XYduSfTRvofur/z W9M6XRUe+Is1+Gn7d8FAq+Oioo+K4Yaiy9mp47XeW+ARxyZIzYj8WJqFMWltBw== X-Gm-Gg: ASbGncs6fwYQmRbQh9/1PvuXOrQkrLpzN19JWLHx8Ap+sSz/HNxc1iJKeISHoKicAlC FdtzXACe3aiMLzEjhfX1UYjOGFQXaKstIf6ThzLdnSv5HKOzu1MH8noyRR16cUo4ie1AGWt1WSL zQEEhjgBd25eHACI5vr4lBdcB3oQ35OhWUezpbARJEhznwGQ51kzdKusKudEVDAgkeV0KBUt3Ub gk4QWLm1SV/lQTeq+PckdK7z1x/rgX/0vO2yCa2D+waqM9huEhdj6rrP1vyVjnHKJu1fexYIKO8 vdMfX5dqSPmILsU/mhBxD1+xE4Rku03gbSqr/y3m7yjGKAFdnxJwZFZInBlUepqujKlVpnlQaTY Gz/6ddSYMRFEAZCqhaKLtkuFMCym7jeLfM7iTBzKY3Wu7cgjZO7Bux23kbDlaLAH3Q7bDEKTdPd oCSeehrIlGzWNGGqHRGX7pQQ== X-Google-Smtp-Source: AGHT+IF9D/PhLbsIrZsfFjeYtbUAGm61YH/8cIJoq5JXTO8Q78quhWj7ppGP01fKVPLpmWbGDVxNWQ== X-Received: by 2002:a05:6512:4005:b0:594:7380:98c0 with SMTP id 2adb3069b0e04-596a3ea9d32mr13479345e87.17.1764612059443; Mon, 01 Dec 2025 10:00:59 -0800 (PST) Message-ID: Date: Mon, 1 Dec 2025 23:00:53 +0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: qemu-devel@nongnu.org Cc: Christian Schoenebeck , Greg Kurz From: Andrey Erokhin Subject: [RFC PATCH] virtfs: 9p: local: add default uid and gid options Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::135; envelope-from=language.lawyer@gmail.com; helo=mail-lf1-x135.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1764612131489019200 Content-Type: text/plain; charset="utf-8" I was trying to boot from a directory tree owned by an ordinary user, and some daemons weren't happy about non-root ownership of some files Example use: -virtfs local,path=3Drootfs,mount_tag=3Droot,security_model=3Dmapped,uid=3D= 0,gid=3D0 Works with any security_model Signed-off-by: Andrey Erokhin --- fsdev/file-op-9p.h | 5 +++++ fsdev/qemu-fsdev-opts.c | 12 ++++++++++++ fsdev/qemu-fsdev.c | 2 ++ hw/9pfs/9p-local.c | 15 +++++++++++++++ hw/9pfs/9p.c | 2 ++ system/vl.c | 9 +++++++++ 6 files changed, 45 insertions(+) diff --git a/fsdev/file-op-9p.h b/fsdev/file-op-9p.h index b9dae8c84c..46fb88001e 100644 --- a/fsdev/file-op-9p.h +++ b/fsdev/file-op-9p.h @@ -15,6 +15,7 @@ #define FILE_OP_9P_H =20 #include +#include #include #include "qemu-fsdev-throttle.h" #include "p9array.h" @@ -94,6 +95,8 @@ typedef struct FsDriverEntry { FsThrottle fst; mode_t fmode; mode_t dmode; + uid_t dflt_uid; + gid_t dflt_gid; } FsDriverEntry; =20 struct FsContext { @@ -107,6 +110,8 @@ struct FsContext { void *private; mode_t fmode; mode_t dmode; + uid_t dflt_uid; + gid_t dflt_gid; }; =20 struct V9fsPath { diff --git a/fsdev/qemu-fsdev-opts.c b/fsdev/qemu-fsdev-opts.c index 07a18c6e48..c99abb3de6 100644 --- a/fsdev/qemu-fsdev-opts.c +++ b/fsdev/qemu-fsdev-opts.c @@ -46,6 +46,12 @@ static QemuOptsList qemu_fsdev_opts =3D { }, { .name =3D "dmode", .type =3D QEMU_OPT_NUMBER, + }, { + .name =3D "uid", + .type =3D QEMU_OPT_NUMBER, + }, { + .name =3D "gid", + .type =3D QEMU_OPT_NUMBER, }, =20 THROTTLE_OPTS, @@ -92,6 +98,12 @@ static QemuOptsList qemu_virtfs_opts =3D { }, { .name =3D "dmode", .type =3D QEMU_OPT_NUMBER, + }, { + .name =3D "uid", + .type =3D QEMU_OPT_NUMBER, + }, { + .name =3D "gid", + .type =3D QEMU_OPT_NUMBER, }, =20 { /*End of list */ } diff --git a/fsdev/qemu-fsdev.c b/fsdev/qemu-fsdev.c index 57877dad0a..faa84dc033 100644 --- a/fsdev/qemu-fsdev.c +++ b/fsdev/qemu-fsdev.c @@ -58,6 +58,8 @@ static FsDriverTable FsDrivers[] =3D { "writeout", "fmode", "dmode", + "uid", + "gid", "multidevs", "throttling.bps-total", "throttling.bps-read", diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c index 5ce97b76a6..cecf4aa50c 100644 --- a/hw/9pfs/9p-local.c +++ b/hw/9pfs/9p-local.c @@ -198,6 +198,12 @@ static int local_lstat(FsContext *fs_ctx, V9fsPath *fs= _path, struct stat *stbuf) if (err) { goto err_out; } + if (fs_ctx->dflt_uid !=3D -1) { + stbuf->st_uid =3D fs_ctx->dflt_uid; + } + if (fs_ctx->dflt_gid !=3D -1) { + stbuf->st_gid =3D fs_ctx->dflt_gid; + } if (fs_ctx->export_flags & V9FS_SM_MAPPED) { /* Actual credentials are part of extended attrs */ uid_t tmp_uid; @@ -788,6 +794,12 @@ static int local_fstat(FsContext *fs_ctx, int fid_type, if (err) { return err; } + if (fs_ctx->dflt_uid !=3D -1) { + stbuf->st_uid =3D fs_ctx->dflt_uid; + } + if (fs_ctx->dflt_gid !=3D -1) { + stbuf->st_gid =3D fs_ctx->dflt_gid; + } if (fs_ctx->export_flags & V9FS_SM_MAPPED) { /* Actual credentials are part of extended attrs */ uid_t tmp_uid; @@ -1570,6 +1582,9 @@ static int local_parse_opts(QemuOpts *opts, FsDriverE= ntry *fse, Error **errp) return -1; } =20 + fse->dflt_uid =3D qemu_opt_get_number(opts, "uid", -1); + fse->dflt_gid =3D qemu_opt_get_number(opts, "gid", -1); + if (fse->export_flags & V9FS_SM_MAPPED || fse->export_flags & V9FS_SM_MAPPED_FILE) { fse->fmode =3D diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index acfa7db4e1..492379d361 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -4317,6 +4317,8 @@ int v9fs_device_realize_common(V9fsState *s, const V9= fsTransport *t, =20 s->ctx.fmode =3D fse->fmode; s->ctx.dmode =3D fse->dmode; + s->ctx.dflt_uid =3D fse->dflt_uid; + s->ctx.dflt_gid =3D fse->dflt_gid; =20 s->fids =3D g_hash_table_new(NULL, NULL); qemu_co_rwlock_init(&s->rename_lock); diff --git a/system/vl.c b/system/vl.c index 3b7057e6c6..d363b046a6 100644 --- a/system/vl.c +++ b/system/vl.c @@ -3253,6 +3253,7 @@ void qemu_init(int argc, char **argv) QemuOpts *fsdev; QemuOpts *device; const char *writeout, *sock_fd, *socket, *path, *security_= model, + *uid, *gid, *multidevs; =20 olist =3D qemu_find_opts("virtfs"); @@ -3301,6 +3302,14 @@ void qemu_init(int argc, char **argv) qemu_opt_set(fsdev, "security_model", security_model, &error_abort); } + uid =3D qemu_opt_get(opts, "uid"); + if (uid) { + qemu_opt_set(fsdev, "uid", uid, &error_abort); + } + gid =3D qemu_opt_get(opts, "gid"); + if (gid) { + qemu_opt_set(fsdev, "gid", gid, &error_abort); + } socket =3D qemu_opt_get(opts, "socket"); if (socket) { qemu_opt_set(fsdev, "socket", socket, &error_abort); --=20 2.34.1