From nobody Tue Jun 16 11:17:55 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EB112E6CC7 for ; Sat, 18 Apr 2026 16:34:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530052; cv=none; b=pCB9cz4Jr+TeEtAzKuYfoUHXFrpfNU9CIf3UnY5Degw/+UPQJ7PBAtQcMEcQk0tboIRn3OF0GSV7QvFMQmD/vTmEpjrzdyrBioEL1plBUpcBaK33PexIYCno5wUwv32/8sgIr+UjB61tQt8A2AJjJu4QsRrRQATuux9F5Bm99RY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530052; c=relaxed/simple; bh=7TDshcGTJfTi3oiVkYMwPAxA5lugUsQO2yhPy9Xffho=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fBfctnHkGzEztjPbKr1uYRU4Z3NaUd/bLrLaFSdjsjz8HEQIa9IDTLDYFalWAu8emb9G68T3+/dEbKIu3TFPSvq8gOzUfOe535ogP4cwY8GppSg51zjJ2yyaBQWn5LyqqNkutb8rLCTOV414ndL2eYPCNeOGG+PanlgbBo8Lic0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=V4hWFU9m; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V4hWFU9m" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-488af9fdaa7so10723945e9.1 for ; Sat, 18 Apr 2026 09:34:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776530049; x=1777134849; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TEJxdjNDjgQ6mPqk8mreYxDf7pruksf/jntCs9G0iUM=; b=V4hWFU9mBtH6W158mOz4tYVEOuhyy1T4/ulSkis1DipiazagP6I4DH/7x8SBeUoAOa wh8h3M6YU9AvJoSULv8Rv4bNKn/p7nUcqMFk4uHfzLXGMJMcbmSeKo9gvStR3jaXrFtz 8ns9rxCw3VR9o7RKybDUAmQjxVZGit0MZc28NBCshrIaW526oD0Ry/9gwlRfBEtYLclR 0f+EWJ2TZfUuYK2uniIMwNkPQkwlJ5nPnnY27UbDT3x07Q5AdNl1Gz03zlalwBeZWNXg xSJa6Rq0uThYB65CV87Arzkw6mEXl2QyFVc4STJJudABq3UGN07YDrv2EnaCplb2M554 256g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776530049; x=1777134849; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=TEJxdjNDjgQ6mPqk8mreYxDf7pruksf/jntCs9G0iUM=; b=rIq2Ph/XVGRk6I5UPHUSLukjRT5n/meYx+QXrsCopUGDncz4SdUo/lzZdcuLIkkyZz mlse1Tu9xssR/P6NP4xFfVt4VBWuTaxWZKtq384phWuC4SBndt7oAohXfG1SgJ57bc6k qHv/aJaGd1/jtZapuh7XmivfgE2dr/1U1tqookxjcmb6K29aA48CU37dcEngosmuKYYg 8vZHk+ULSgSCan+8wjJ+NLWNiVlF9z+uLaP4auihQhXheACHh8qOGEEa9JN4KLZAL4/p m+dR/sdPruTOhuRqo4O/BPINaoCvCy7ZesYW6E9qS4PbqDhZuF8jdmhou6p2UCja4xv5 oPFg== X-Forwarded-Encrypted: i=1; AFNElJ97WcAhgovplZ0egihnY5+qJyt23gQSKwPB6GE0Si5Dk16yzU8rNJguP9++RcYt4i9ZvGe/MYWowWr5nQY=@vger.kernel.org X-Gm-Message-State: AOJu0YxDDUE2OBXNjRkczZc79NAFv6nbeuBTvlqhYTOLMZNi/WsDhU5k D78mGptna+00Eb2WzMxkZcOeHc+fuvRfagmMZ3oVsW8fDvSjol//F6OT X-Gm-Gg: AeBDiet0uffatESAgrV343wXFSeOU7J+3dibgpyqf2+b6ws4sF7wYT+QKcmr1GbdT0x D/r67z8ptJhn6tvyeV/gkz703e30+yumCeoRXRjz6nO7CQ+ebKLs+H44AqPGZu+xfFSXxGM6GP7 xlwvqYe5ujvemZ0y+x2MWMXjhZUz3x0llXcvFJ4CxhAhfWS4AaY/WZgMKg0f0ukrC4cr2IIFUy9 oA7RE2PesqmvRjmXpMZOPodrsQeMhqVgnGshNhhDuDK2NGZiN72RnwDmMShIROrbYl3kq9rDZuW LM/8YI8o47zFwDfnUkFIc30kPgoDlnEBjQmgty8GWyCONcBT+bAmDt7VYEP6cKe5sS4x9yT7wNq 58tN8YK5WDxSUUvLfDIgONAVhyx+iug6zaqEfz/62qMfZydM8REmhwAjlpzTmA6YwLhAyB+Wua8 wD0R1sbT2dfKJKNvvQUsVdSxi7Nxtg0dcxUbCERgQ5BTK9djD2+w== X-Received: by 2002:a05:600c:c084:b0:485:39d1:b4dd with SMTP id 5b1f17b1804b1-488fb74a495mr74754135e9.10.1776530049189; Sat, 18 Apr 2026 09:34:09 -0700 (PDT) Received: from localhost ([2a01:4b00:d036:ae00:e054:93f2:97bf:84c6]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-488fb78cddcsm60829895e9.4.2026.04.18.09.34.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2026 09:34:08 -0700 (PDT) From: luca.boccassi@gmail.com To: kexec@lists.infradead.org Cc: linux-mm@kvack.org, graf@amazon.com, rppt@kernel.org, pasha.tatashin@soleen.com, pratyush@kernel.org, brauner@kernel.org, linux-kernel@vger.kernel.org, Luca Boccassi Subject: [PATCH v8 1/6] liveupdate: reject LIVEUPDATE_IOCTL_CREATE_SESSION with invalid name length Date: Sat, 18 Apr 2026 17:28:18 +0100 Message-ID: <20260418163358.2304490-2-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260418163358.2304490-1-luca.boccassi@gmail.com> References: <20260418163358.2304490-1-luca.boccassi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Luca Boccassi A session name must not be an empty string, and must not exceed the maximum size define in the uapi header, including null termination. Fixes: 0153094d03df ("liveupdate: luo_session: add sessions support") Signed-off-by: Luca Boccassi Reviewed-by: Pasha Tatashin --- kernel/liveupdate/luo_session.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/liveupdate/luo_session.c b/kernel/liveupdate/luo_sessio= n.c index 25ae704d7787..5e316a4c5d71 100644 --- a/kernel/liveupdate/luo_session.c +++ b/kernel/liveupdate/luo_session.c @@ -382,9 +382,13 @@ static int luo_session_getfile(struct luo_session *ses= sion, struct file **filep) =20 int luo_session_create(const char *name, struct file **filep) { + size_t len =3D strnlen(name, LIVEUPDATE_SESSION_NAME_LENGTH); struct luo_session *session; int err; =20 + if (len =3D=3D 0 || len > LIVEUPDATE_SESSION_NAME_LENGTH - 1) + return -EINVAL; + session =3D luo_session_alloc(name); if (IS_ERR(session)) return PTR_ERR(session); --=20 2.47.3 From nobody Tue Jun 16 11:17:55 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D0B130EF64 for ; Sat, 18 Apr 2026 16:34:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530053; cv=none; b=fxWKSvMwVMyv3zQyq3oUYd9UbIZ4Vx6UkVVmKZeXdzhciKP5iTy1Zb4VxpvHdF/B6MIH2VPyxgwxcvHixj6JBCBc5ZrHvBiwkLYo5kbZRhW60v7Ewwa4lZYiKXM0sp6LCGNynmdcfl9MA/ZCylt6rWebrxoPCFs8ereSCxm69vU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530053; c=relaxed/simple; bh=XG6TwE7GFnOdhbLxuyTWUk4kokhvwC1BEoy+0m+XIw8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WZN/9r1SysMmvSMrevgwKQozZZG2KdPumVKqNvmYaX3gmtom3AQ6d3mGLS7XT4Im+7ctaTlexCFiqvac68WIj/zZqjlCOiG8Pj25o5row6V+BYcsuG5zg4AsfET3LgLrjs0AkFycQ+T1rVmJih6nvRq3mhXry+7/k259UUAjQrE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NNq3nvW4; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NNq3nvW4" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-43cff5dafc3so1258405f8f.1 for ; Sat, 18 Apr 2026 09:34:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776530050; x=1777134850; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Zt+aOMHTeqB+B7ZTmsYzA3/qbdPzt+krJWN0gXu7/9s=; b=NNq3nvW4R7N0bSDS+aF2KC8RaT+2xthtH3XDRcCuJIIpuhGCyg6no1GuijQGXUynpH 5AKK6LejGQh+e6AVq2PDxnPvr5CAyxojG7oaOTFS/Cq9pBeVav5pCluF0uZgxNY7QXt1 zrgqvy6ADZzW0mHzSeJIDdtPZ3vLV3JCr7DUBgRYo7PGWiPPSgrgQJtimNrzJQSJ5wet k+T8EW6H5xgveHutcSF7PeyAUoBXlSJ1Uc28tOR0VXuQzOsAUaUSM3PrC3CStBM5BWCJ vVRytluN55CPPYoow/5ePcFGJsySwMbcJRiKRmOoWuloF56CZrkYyDH1QfX1ByjHChXh 2OVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776530050; x=1777134850; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Zt+aOMHTeqB+B7ZTmsYzA3/qbdPzt+krJWN0gXu7/9s=; b=otGhpzz9CTud1T6hcZdLOu9H+Pq/L8EeXVvhlA9KK49SG115EtZdtu6moLKxCtC53e Z5tC00/FrfZQPSVPZxU6tJE1VRMMJxG7WOc65X2E+wMddnKLlcaaQTE3c9iUdK5AfRhL 14CKdz5guQXsnP+MpRvpSkT47y18vYr+9sKnL3CTsHJDijW6/NoZHMLB1POHplr4+qnR 1uwsHQ+WunWOe/k9qZ34piAaQCC3K5B7T7Ee7q3Nz/0Sz6occDo0UXMoSLnCwz7h0AyA GKy3MycfCFeGC9siF4Z3uvtfcQ2VJwcm8lQEanHg/k+51WNW1mbymSh8hAKwcSFlvnlf zyow== X-Forwarded-Encrypted: i=1; AFNElJ+J4kWgeM5msbxx+rjkTqojedSdRZus4Id9RUBfhdDN+ZF6G//1NskZVaLW2YOUYieej2+9FrVhnW3ZpfE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3XVuZG2vs/iomuKM0nQ4H6Id3GJbD8wpUCxn2AdYUrLfLiGb2 S4Bj1s3BKRBmUGnxvDfhwybK0RpjxSZPpQFpSi/oZT2y1FOUhafLpEen X-Gm-Gg: AeBDies8MJr+wTRuCSgSiqcXhLdtTAbsuRhLqNmG1qW4DxhzXPxTTCOfx40HYfPUdBv XrTxHSjq/UwCNo6YD1rI0Jt3JnkASAOmHQ0sOyLYC7lejTAQKD4xDZtFz+wvB+lX5mxESx1DBto o0tlmSpI6lehqFqNBdlsv+y80+mKcJPCOrGqKuaniNs+igE9WPhANiZm3Ggh9XOlqCcHvC+fLHr eHNkOvQ2RZ7qamABKmWPGLHXBzo3KG6O7ZG0SdteuS/2Wi1OWkfa2dWMkeVG54wxR5X69Tnpihm 6ZzAbKXV5HFh+HVaBzgZNx4xY3SHP34ZFWjJmdzSaXQG0DgbDUcOVGxzgEVXSe4YkT9OFKaT9v4 E2FsfAySdE+EE0oThp65SR7u5qza92y9RiFsuNMifUUswqsDC0oLwNtVtjCswEZNstGeu5VwAyW DLXIQ2HSR/AyI/XI9sKZu/nRKIvacEGVv34bXoVRs= X-Received: by 2002:a05:6000:2089:b0:439:ccd7:cdb6 with SMTP id ffacd0b85a97d-43fe3dd4f9emr11664614f8f.14.1776530050384; Sat, 18 Apr 2026 09:34:10 -0700 (PDT) Received: from localhost ([2a01:4b00:d036:ae00:e054:93f2:97bf:84c6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-43fe4cc0d51sm13903755f8f.10.2026.04.18.09.34.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2026 09:34:09 -0700 (PDT) From: luca.boccassi@gmail.com To: kexec@lists.infradead.org Cc: linux-mm@kvack.org, graf@amazon.com, rppt@kernel.org, pasha.tatashin@soleen.com, pratyush@kernel.org, brauner@kernel.org, linux-kernel@vger.kernel.org, Luca Boccassi Subject: [PATCH v8 2/6] selftests/liveupdate: add test cases for LIVEUPDATE_IOCTL_CREATE_SESSION calls with invalid length Date: Sat, 18 Apr 2026 17:28:19 +0100 Message-ID: <20260418163358.2304490-3-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260418163358.2304490-1-luca.boccassi@gmail.com> References: <20260418163358.2304490-1-luca.boccassi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Luca Boccassi Verify that LIVEUPDATE_IOCTL_CREATE_SESSION ioctl which provide a name that is an empty string or too long are not allowed. Signed-off-by: Luca Boccassi Reviewed-by: Pasha Tatashin --- .../testing/selftests/liveupdate/liveupdate.c | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tools/testing/selftests/liveupdate/liveupdate.c b/tools/testin= g/selftests/liveupdate/liveupdate.c index c2878e3d5ef9..f0a8e600c154 100644 --- a/tools/testing/selftests/liveupdate/liveupdate.c +++ b/tools/testing/selftests/liveupdate/liveupdate.c @@ -345,4 +345,46 @@ TEST_F(liveupdate_device, preserve_unsupported_fd) ASSERT_EQ(close(session_fd), 0); } =20 +/* + * Test Case: Create Session with No Null Termination + * + * Verifies that filling the entire 64-byte name field with non-null chara= cters + * (no '\0' terminator) is rejected by the kernel with EINVAL. + */ +TEST_F(liveupdate_device, create_session_no_null_termination) +{ + struct liveupdate_ioctl_create_session args =3D {}; + + self->fd1 =3D open(LIVEUPDATE_DEV, O_RDWR); + if (self->fd1 < 0 && errno =3D=3D ENOENT) + SKIP(return, "%s does not exist", LIVEUPDATE_DEV); + ASSERT_GE(self->fd1, 0); + + /* Fill entire name field with 'X', no null terminator */ + args.size =3D sizeof(args); + memset(args.name, 'X', sizeof(args.name)); + + EXPECT_LT(ioctl(self->fd1, LIVEUPDATE_IOCTL_CREATE_SESSION, &args), 0); + EXPECT_EQ(errno, EINVAL); +} + +/* + * Test Case: Create Session with Empty Name + * + * Verifies that creating a session with an empty string name fails + * with EINVAL. + */ +TEST_F(liveupdate_device, create_session_empty_name) +{ + int session_fd; + + self->fd1 =3D open(LIVEUPDATE_DEV, O_RDWR); + if (self->fd1 < 0 && errno =3D=3D ENOENT) + SKIP(return, "%s does not exist", LIVEUPDATE_DEV); + ASSERT_GE(self->fd1, 0); + + session_fd =3D create_session(self->fd1, ""); + EXPECT_EQ(session_fd, -EINVAL); +} + TEST_HARNESS_MAIN --=20 2.47.3 From nobody Tue Jun 16 11:17:55 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 402183128B8 for ; Sat, 18 Apr 2026 16:34:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530054; cv=none; b=IhiXIaRPglSUr0uEuPQWO460Dfk1euAAZ3z9GWRqSMACU7raW4409IkWxtkm7lDeJherKwfSUQ6lXsFypr3po5ONmxXJKqrU0YJKo3Qj3TdW21Cc+FBWLvSKorh1ERTj9SnqrZPoJmeXgEKkw8XQCvJQgVSlfCllRMtGayR1IEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530054; c=relaxed/simple; bh=Ogv+x06KJPd0NID/hh8yikit+Kuaw64e1q9ee91Rvjg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SkoL8yb0L2+244BBz8lLWy1+ooAXxJRzdjm9+Kfz9ilovhL8zFtL2WfvOYXJeZrJxMZ09LDxWSpt0PzkjGSdrNQdc78NZG0aG0dZpNkAvoSDG/mszB8EAuMy4yBeBirRtVla+8Hv4vugF5HJcISP0c7b9W28LzvclHA54i2DhHI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=brzvme8y; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="brzvme8y" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4887f49ec5aso21303555e9.1 for ; Sat, 18 Apr 2026 09:34:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776530052; x=1777134852; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iDd2UIv043iC7kIf40D4/RY2UYV+v4l+fWgRNClaM/s=; b=brzvme8ygsvbn3I09pFqtq1p00+o5AH+RLpIJLnlRRWjcG6fDvozZtCo2HQrfccFmv LJiMTAdBULzTNu3CoihrhtuOryVtBjZwuBDyb9T17q8E2nhBX+vEIiFnKu0JQSy72sCW 4oBhlzWJ9jh5CuPryEVrIHDHNv65tqKz7GkI62WbeyVhwq4FEPuVZ2R5P/OCb4Z3yW+0 7FSStubjHMyc6mIK9tFpcytsZaigMdf4lLWl4aVsRIG6zPyAihQicDYlpft4MbWuH6cq FmsS15A3VoQ64KcHbCKNpEssDxrN0/0C6XC689CHJS4voNe5CIGxCAOQb99ACeF/8u9a CL/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776530052; x=1777134852; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=iDd2UIv043iC7kIf40D4/RY2UYV+v4l+fWgRNClaM/s=; b=GYFRf0HLzf6uYLLMD6G0mjt4uTbf76jmLcSiO21mEdX/HbA//+K2Ep4pf+kSyHJXam E1Vi+/N2orZfcrHFLBq056dRvzICka5Gv04GkaDGLsxnu5VCbbp1a4Q5HPDoVUlz1OgO 1MkK5DkPd8ZK1Y4l+YjPk7CDbDpcKdkALQd8oq4uCZInsrXMfzB1fJdvEQEfkC99awtu ddu1xYpzh8esU8uSgDq3Utv7qkAPUwgIUMyZyNp01Psu17Hb1qjhsYNtzOpiC600W/zy TqsQNDXfZWCLFv31K1ktHTBE6XJOIvjf9qL/+CMVfq6LdA8uaPe34NrE9F7ief9Cxa+W nhmQ== X-Forwarded-Encrypted: i=1; AFNElJ/aSnRoRh/cqrlQx4HkZPw08XivRTGk+E/Se9DH5IJM9FNgDahiGb27jSg9mrEWLrkIX43/arIzOcY9lco=@vger.kernel.org X-Gm-Message-State: AOJu0YzGQn/SGhm+1HKvlUFrqj0cRTYvEtzUASZA9GH1XESvZLTpnF0i u3wlOqnm7utgSveSlKx/DEdqJmeid+rHQ4lxJBpJ4AJ2OwTa8zpJsxsP X-Gm-Gg: AeBDietfqWu/HE6kyQ9nvhZb+HE0DrIgpnZqKGigRioW1dGG9DchMcF9L6tECYNbj+9 HuWb42CyEJaLTPAFLwV9ARpzs8A111ZD/1OLr3SHqs9ur1qdIO3F1O+dBMD2Z+qIfzUgXdQpyXe 0l3jEkv4rRj/7L94x51QapoWNEGYRoq00XETJB98IwZbYxXB/sri7U4NQLOhb62K/sqn7Qg4WA0 8A2kaTYfokRcAnECh2wLUQuv+kgBstenXuF41ezq05IShRhHk/FrBHRsjNSwttjg3ML363qQMaq qaQ7YruyLpPzcNMXFXsm9hKyOyByi5YUTaV8ZAf/GI+fIqVrnAmr5SiODSU7iQPPwGdXdtBhZmG FHovrhewoP5C5tDoX9790s8TNRn3OxV4IZ5B723kcGYu7rYEU7sb319OC7ilskLNYe7UC95gFkD 6Og7VaLAKVbbbIfGmrkoSJLyiPFTjDliChKbOBuhUMRvx6hIUaHw== X-Received: by 2002:a05:600c:8183:b0:488:b187:3c with SMTP id 5b1f17b1804b1-488fb765ab5mr111343235e9.14.1776530051601; Sat, 18 Apr 2026 09:34:11 -0700 (PDT) Received: from localhost ([2a01:4b00:d036:ae00:e054:93f2:97bf:84c6]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-488fc1c96b4sm229038205e9.13.2026.04.18.09.34.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2026 09:34:11 -0700 (PDT) From: luca.boccassi@gmail.com To: kexec@lists.infradead.org Cc: linux-mm@kvack.org, graf@amazon.com, rppt@kernel.org, pasha.tatashin@soleen.com, pratyush@kernel.org, brauner@kernel.org, linux-kernel@vger.kernel.org, Luca Boccassi Subject: [PATCH v8 3/6] liveupdate: add LUO_SESSION_MAGIC magic inode type Date: Sat, 18 Apr 2026 17:28:20 +0100 Message-ID: <20260418163358.2304490-4-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260418163358.2304490-1-luca.boccassi@gmail.com> References: <20260418163358.2304490-1-luca.boccassi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Luca Boccassi In userspace when managing LUO sessions we want to be able to identify a FD as a LUO session, in order to be able to do the special handling that they require in order to function as intended on kexec. Currently this requires scraping procfs and doing string matching on the prefix of the dname, which is not an ideal interface. Add a singleton inode type with a magic value, so that we can programmatically identify a fd as a LUO session via fstatfs(). Signed-off-by: Luca Boccassi Reviewed-by: Pasha Tatashin --- include/uapi/linux/magic.h | 1 + kernel/liveupdate/luo_core.c | 10 +++- kernel/liveupdate/luo_internal.h | 2 + kernel/liveupdate/luo_session.c | 89 ++++++++++++++++++++++++++++++-- 4 files changed, 96 insertions(+), 6 deletions(-) diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h index 4f2da935a76c..4f51005522ff 100644 --- a/include/uapi/linux/magic.h +++ b/include/uapi/linux/magic.h @@ -105,5 +105,6 @@ #define PID_FS_MAGIC 0x50494446 /* "PIDF" */ #define GUEST_MEMFD_MAGIC 0x474d454d /* "GMEM" */ #define NULL_FS_MAGIC 0x4E554C4C /* "NULL" */ +#define LUO_SESSION_MAGIC 0x4c554f53 /* "LUOS" */ =20 #endif /* __LINUX_MAGIC_H__ */ diff --git a/kernel/liveupdate/luo_core.c b/kernel/liveupdate/luo_core.c index dda7bb57d421..f1a63ebe4fa4 100644 --- a/kernel/liveupdate/luo_core.c +++ b/kernel/liveupdate/luo_core.c @@ -197,9 +197,17 @@ static int __init luo_late_startup(void) if (!liveupdate_enabled()) return 0; =20 + err =3D luo_session_fs_init(); + if (err) { + luo_global.enabled =3D false; + return err; + } + err =3D luo_fdt_setup(); - if (err) + if (err) { + luo_session_fs_cleanup(); luo_global.enabled =3D false; + } =20 return err; } diff --git a/kernel/liveupdate/luo_internal.h b/kernel/liveupdate/luo_inter= nal.h index 8083d8739b09..d4ac7b4c5882 100644 --- a/kernel/liveupdate/luo_internal.h +++ b/kernel/liveupdate/luo_internal.h @@ -79,6 +79,8 @@ struct luo_session { =20 int luo_session_create(const char *name, struct file **filep); int luo_session_retrieve(const char *name, struct file **filep); +int __init luo_session_fs_init(void); +void __init luo_session_fs_cleanup(void); int __init luo_session_setup_outgoing(void *fdt); int __init luo_session_setup_incoming(void *fdt); int luo_session_serialize(void); diff --git a/kernel/liveupdate/luo_session.c b/kernel/liveupdate/luo_sessio= n.c index 5e316a4c5d71..21cbe99fc819 100644 --- a/kernel/liveupdate/luo_session.c +++ b/kernel/liveupdate/luo_session.c @@ -50,7 +50,6 @@ =20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt =20 -#include #include #include #include @@ -62,7 +61,10 @@ #include #include #include +#include +#include #include +#include #include #include #include @@ -363,18 +365,73 @@ static const struct file_operations luo_session_fops = =3D { .unlocked_ioctl =3D luo_session_ioctl, }; =20 +static struct vfsmount *luo_session_mnt __ro_after_init; +static struct inode *luo_session_inode __ro_after_init; + +/* + * Reject all attribute changes on the singleton session inode. + * Without this the VFS falls back to simple_setattr(), allowing + * fchmod()/fchown() to modify the shared inode. + */ +static int luo_session_setattr(struct mnt_idmap *idmap, struct dentry *den= try, + struct iattr *attr) +{ + return -EOPNOTSUPP; +} + +static const struct inode_operations luo_session_inode_operations =3D { + .setattr =3D luo_session_setattr, +}; + +static char *luo_session_dname(struct dentry *dentry, char *buffer, int bu= flen) +{ + return dynamic_dname(buffer, buflen, "luo_session:%s", + dentry->d_name.name); +} + +static const struct dentry_operations luo_session_dentry_operations =3D { + .d_dname =3D luo_session_dname, +}; + +static int luo_session_init_fs_context(struct fs_context *fc) +{ + struct pseudo_fs_context *ctx; + + ctx =3D init_pseudo(fc, LUO_SESSION_MAGIC); + if (!ctx) + return -ENOMEM; + + fc->s_iflags |=3D SB_I_NOEXEC; + fc->s_iflags |=3D SB_I_NODEV; + ctx->dops =3D &luo_session_dentry_operations; + return 0; +} + +static struct file_system_type luo_session_fs_type =3D { + .name =3D "luo_session", + .init_fs_context =3D luo_session_init_fs_context, + .kill_sb =3D kill_anon_super, +}; + /* Create a "struct file" for session */ static int luo_session_getfile(struct luo_session *session, struct file **= filep) { - char name_buf[128]; + char name_buf[LIVEUPDATE_SESSION_NAME_LENGTH + 1]; struct file *file; =20 lockdep_assert_held(&session->mutex); - snprintf(name_buf, sizeof(name_buf), "[luo_session] %s", session->name); - file =3D anon_inode_getfile(name_buf, &luo_session_fops, session, O_RDWR); - if (IS_ERR(file)) + + ihold(luo_session_inode); + + snprintf(name_buf, sizeof(name_buf), "%s", session->name); + file =3D alloc_file_pseudo(luo_session_inode, luo_session_mnt, name_buf, + O_RDWR, &luo_session_fops); + if (IS_ERR(file)) { + iput(luo_session_inode); return PTR_ERR(file); + } =20 + file->private_data =3D session; *filep =3D file; =20 return 0; @@ -653,3 +710,25 @@ void luo_session_resume(void) up_write(&luo_session_global.outgoing.rwsem); up_write(&luo_session_global.incoming.rwsem); } + +int __init luo_session_fs_init(void) +{ + luo_session_mnt =3D kern_mount(&luo_session_fs_type); + if (IS_ERR(luo_session_mnt)) + return PTR_ERR(luo_session_mnt); + + luo_session_inode =3D alloc_anon_inode(luo_session_mnt->mnt_sb); + if (IS_ERR(luo_session_inode)) { + kern_unmount(luo_session_mnt); + return PTR_ERR(luo_session_inode); + } + luo_session_inode->i_op =3D &luo_session_inode_operations; + + return 0; +} + +void __init luo_session_fs_cleanup(void) +{ + iput(luo_session_inode); + kern_unmount(luo_session_mnt); +} --=20 2.47.3 From nobody Tue Jun 16 11:17:55 2026 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 70B1C2609E3 for ; Sat, 18 Apr 2026 16:34:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530056; cv=none; b=S9JOWAAqVoFRPz5pTSj4z/DwTuOcNXggyvKT5K5r7nDPFq8Ij9FpcWeVF9kIiKKC1dSvrhDFLhhwLm9RGTbcorlKxXN03AOxM5PFHO8yn4pO3wv4V4/Iyu0BaCQWHxr+0lz1zVvZb69SxqJHoRR0OdENVnNxFrWggETcg59/F4s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530056; c=relaxed/simple; bh=9FPE02ERZryko8uGsS8iQk6xBAb6rnmNKWj00ovQPD4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M/WDiLyzxqG73ChIjx1PX0uiDCx8Vg7po7Hk1cay74mSiRnvdIMEZI5QUwXDrTLgJKMiT4tvBy+62TneV3n+GscL6/f7XyPV2Sne1O2bSiMBI88C863oMPk05GyIehRfUvu5PX16EgKFYyM+/iHyX76MVMX5gTsdkl/SDY5N/ak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KREHc6tG; arc=none smtp.client-ip=209.85.221.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KREHc6tG" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-43cff5dafc3so1258426f8f.1 for ; Sat, 18 Apr 2026 09:34:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776530053; x=1777134853; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vjAX0smE41BTNjnnRZCLx7DL1jbmxY9+auerdTALqsI=; b=KREHc6tGH54heqBBLfD4gWbyUVAfYAr+DfdAx7Y82jMr6hP8j9HXsxgQdbAiAsIwt9 wZ3a81657RpLRGrEPZ0cD6n14dQt5nbd/Y6UZ8iBfhIJ2+ckRMDhxvAr0uaEhj03XC6k WDI2I2aTK39Mt/64EAmg4oM6vG+xECfKfYB8O/qLp3W4F180/AWN8r+0Of/oR+HRcn4H Yct/MyP/qOlBLipUNmvFE87TLSGM9M9t50YihoQlkX+2OIK+Jlt2mD8587hKrtaoS9C9 hszfS/oYih1lwU8cPgrRccO8D6a8UMZh+UylREdXvJvcoRKAHzxjKUZSlBDSHVRW6fvi ay/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776530053; x=1777134853; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=vjAX0smE41BTNjnnRZCLx7DL1jbmxY9+auerdTALqsI=; b=hysFOk/Pge3Q32osYNCF1BhKfqkYhKIG6w188pdLaiQuzuP7bO7lqFzUAczi4JGatq 781tMJ+Q8/jtteVPIdrm7+cP6QgMAaToZJRng5V+2FLfWwLB4LaB6dmRZHwITSMoTkFT WapLQTfZJQS5A1ScZukHhp1maT0KF3yQ7JFCQGIc1gT2iqeZmM4YgPshYmtIQx373tGW drqD7Azx8jrGH2lhQRK7OBLMDwDsh1YY8dbXaECUpRq0bxCJrIFqKF13p9fQ2c8WJ30O xNrRn01k3MgPcGdxfgSDPj7XpCvLjYmKYSQM0JqGftz+kROsfNh68QhiAmvs9+fi9pGB lp6A== X-Forwarded-Encrypted: i=1; AFNElJ8rLrPdXc1UZtoPyph61eHTN8c0CMG1WUXhjYTOtCW1wZeokFgt+cjgQvTohLPo3sNkY0Nn3E6L57bRWaw=@vger.kernel.org X-Gm-Message-State: AOJu0YwdhVYtZO/VXnikJjXzMIHTO2oyXSkfbQ1gCoHMRRYdMAgXrzvD QEQx+BZMj/YjYdbkAT9aPOh2gD3v1rowf6OS+XficTF59DpITIZv+7f8 X-Gm-Gg: AeBDietIrCuXuzZSQUKCYl00hmOxtpgEOg3O0R+JymcJcLlVTaM8LTuXhrekddlF14v m/vNmsYRx9emg1eFv1Cuv6p9g2qWFMqu6U9JNuiu1LgwxueLF+tJljIa9YZbyFT6R0qC98iLc5/ 155O6bPC6U+JpK5WWHuQ4t3cjscrNkC/qtY7GU1eOkFu+/MCYGHswmdcC/sZqdcaOUr6MksEU4t ZF5kn/M5/siNYxNhtNK0JBU1nFbL2jNId7E+igfuLqrr89A+yBCZr+6NmRs3Jhm16g+eQo056R2 nRs9hNmxdoPORafCZ4OJzzyc37H39sNOV61S1l/ymPXpQCPWk6N9qpOHf2wBjAflBwyRqF9xF2O TakUktbybeEOaF0mRlcN7XqAnOoQBcLY3I+j2O6IeMLHvUTxcxUMKVPs5TE6rVS/AnUdaXYZLvO GVOW3rMSDocD25UnHnY8qYd3HQSIx6pyEn+BUMGVWUNFSUVsTIlQ== X-Received: by 2002:a05:6000:4283:b0:43d:7ea1:fb53 with SMTP id ffacd0b85a97d-43fe3e15f7emr11405373f8f.33.1776530052685; Sat, 18 Apr 2026 09:34:12 -0700 (PDT) Received: from localhost ([2a01:4b00:d036:ae00:e054:93f2:97bf:84c6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-43fe4e46898sm14205702f8f.27.2026.04.18.09.34.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2026 09:34:12 -0700 (PDT) From: luca.boccassi@gmail.com To: kexec@lists.infradead.org Cc: linux-mm@kvack.org, graf@amazon.com, rppt@kernel.org, pasha.tatashin@soleen.com, pratyush@kernel.org, brauner@kernel.org, linux-kernel@vger.kernel.org, Luca Boccassi Subject: [PATCH v8 4/6] selftests/liveupdate: add test case for LUO_SESSION_MAGIC Date: Sat, 18 Apr 2026 17:28:21 +0100 Message-ID: <20260418163358.2304490-5-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260418163358.2304490-1-luca.boccassi@gmail.com> References: <20260418163358.2304490-1-luca.boccassi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Luca Boccassi Verify that fstat works as expected after the switch from anon_inode to the new magic number. Signed-off-by: Luca Boccassi Reviewed-by: Pasha Tatashin --- .../testing/selftests/liveupdate/liveupdate.c | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/testing/selftests/liveupdate/liveupdate.c b/tools/testin= g/selftests/liveupdate/liveupdate.c index f0a8e600c154..5e99af0cc6e9 100644 --- a/tools/testing/selftests/liveupdate/liveupdate.c +++ b/tools/testing/selftests/liveupdate/liveupdate.c @@ -22,9 +22,12 @@ #include #include #include +#include +#include #include =20 #include +#include =20 #include "../kselftest.h" #include "../kselftest_harness.h" @@ -387,4 +390,41 @@ TEST_F(liveupdate_device, create_session_empty_name) EXPECT_EQ(session_fd, -EINVAL); } =20 +/* + * Test Case: Session fstat + * + * Verifies that fstatfs() on a session file descriptor reports the + * LUO_SESSION_MAGIC filesystem type, and that fstat() returns consistent + * inode numbers across different sessions (shared singleton inode). + */ +TEST_F(liveupdate_device, session_fstat) +{ + int session_fd1, session_fd2; + struct stat st1, st2; + struct statfs sfs; + + self->fd1 =3D open(LIVEUPDATE_DEV, O_RDWR); + if (self->fd1 < 0 && errno =3D=3D ENOENT) + SKIP(return, "%s does not exist", LIVEUPDATE_DEV); + ASSERT_GE(self->fd1, 0); + + session_fd1 =3D create_session(self->fd1, "fstat-session-1"); + ASSERT_GE(session_fd1, 0); + + session_fd2 =3D create_session(self->fd1, "fstat-session-2"); + ASSERT_GE(session_fd2, 0); + + /* Verify the filesystem type is LUO_SESSION_MAGIC */ + ASSERT_EQ(fstatfs(session_fd1, &sfs), 0); + EXPECT_EQ(sfs.f_type, LUO_SESSION_MAGIC); + + /* Verify both sessions share the same inode number */ + ASSERT_EQ(fstat(session_fd1, &st1), 0); + ASSERT_EQ(fstat(session_fd2, &st2), 0); + EXPECT_EQ(st1.st_ino, st2.st_ino); + + ASSERT_EQ(close(session_fd1), 0); + ASSERT_EQ(close(session_fd2), 0); +} + TEST_HARNESS_MAIN --=20 2.47.3 From nobody Tue Jun 16 11:17:55 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AFA492B9B7 for ; Sat, 18 Apr 2026 16:34:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530068; cv=none; b=lt9Kb6UYV5TyRUCaC/LKGRt3XJPLHR+pZUsdvTtJqapxfp5qEkm2yiBU33SOKJ3zJFqauZrwc76d+SQJ+g7sW4RU91WEm2YHIp4FvsFkB7wk/LgwKaHXfG9p74w9iDXEWf9AzwrGx2Ct+5Q/B6XNERddNIWZEEuIRvbrJsG/4ms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530068; c=relaxed/simple; bh=5bVksmly4bvYBuW+sb5UJL69cPkn4D7+cB+R9D6hdJc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ifcVXg/zkZUQxb2JLl3JS7ly0JcqLh1ObqdvmamCPC36yCsEMqryreP9cvyyBp2FDqFkcfxPYWmcmylr4RAJSSSBXhzZ5szvVa9HmQL/5NVAp3ecpESiwaBpirYEnLuVHuhCe+HZOfOYWfb76TXhtevm5pAmd2G8VsddG8sKxDc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ox7mUOLe; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ox7mUOLe" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-488b0046078so15913585e9.1 for ; Sat, 18 Apr 2026 09:34:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776530064; x=1777134864; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AT+C0FqKOy41gQ9Txc8mmA2gRVUT/8maFYBa2yrLvwY=; b=ox7mUOLem5UMFSfedMYHFp8aobQt3E8eiWkfWz8Na+EUeoZLT/j7wwLZ0rPy+ovu56 61CVWNEJtp3SG91tkeYFi4MbVelpOL/sJ6AO5vhYc4TNMNlde37dcWNvZo79vMR324qP IQHDngg7zjd2TeQ9qZ4mklLVCzZjbU1n9p3nuiwxPP46Xdbwn+7x185KZHtong47RgRP Dom3wIW1tJXkvD6QPeknRRcky00FpCJSE9XPmJ/3PNkdNtgKFcsLrpHMCVwxx7Q4hEOu 0cvOa+KC54+srzNrkjzfwFm9KDUaiU0RJpWUrgUo1QZEeiEKOi9ol5/xVFZOcKtxg0vB zAaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776530064; x=1777134864; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=AT+C0FqKOy41gQ9Txc8mmA2gRVUT/8maFYBa2yrLvwY=; b=C6MS347VD3V17up78Rbyjb+o7ACMjAso6fj9D8iF/jpMtpiGyl1kX/PSzWcyG7KV3Z XdpQXxfmc8jM1RRvoh+MPV1cbFJLnyv/hN7n7HdiJs5H95BcIDTRoAEGtyWd1Evk2gP2 YQz0JPP2UBvViwaF+oHlIoahE6H3fxYOS8t0dPk8e1ZfrBAToK1aeoqfIgpuQ/WTUTii lvb5a2vmD+uaoQP573Ajgx/Ux1s9tJr3AcL9lBsV8ftIppO2Vrft3IU3btcQss3lCC8B +4j41KB/M+Ky0gZDUtcRAFGSTmg1D/eEQj07YZ/XF6ZDqoBM3+WfC12aBWcoYJ7xiuUw Rmmw== X-Forwarded-Encrypted: i=1; AFNElJ/f1t1fwrqRQfmY8JzABU6ZRS9NT959LuYaTqNShURi4Si8Y4dSxMI91+s3IULI0A96Ckwy31aG9CEMZVg=@vger.kernel.org X-Gm-Message-State: AOJu0YyF97xHN+OtV1c0q1jnbg8nilkHyJ7FYEykDs3FhgmVEejvmYh+ Yz56pJVVt7e1tABR0o2DFvX3UZVdY4s/ekjr3Zi5GryoO7hgCiOlj9VR X-Gm-Gg: AeBDietk6Bw6dWUbgfhg//jtWjo7wUHO1uCLqVQUEk3oV9d4U5tlFCggoUoabg6QOtu i3cz8vVYYwphv3dPHIAG9Csoup6cUyZRXpYmDtoYZXam/FM5Az5Ef6u5Y9s35WJZnATID0h8Zi5 JfZfTHOfiGmUrpZvbsvNUrHn6I4UrxsfgdlZYTcIbOxGu6zF+TlN2Xylugls7jwv7cVXUL/3BUB dZxY3GbU4GjzomJfH4XgK5dzYFDCjYm4cJW6wrsWL4ySbu7tNXHvZTOWWNahuPMCl8XnEJ4+PtE aC5Q9JUgNz5g6bGmPY8p6lxCYYhgFnG5+4ih9JqvwInduWoQ2Bkmv8W+UNzBzbKv63RsTJ5jS56 gXxcBkdHI/Aw/EJM1z8mQrfo3HN4teiHaaM3i0EqXhKVMDh7BM2sCJYHQtdgPXUiT00mxAQk5l8 7NqThc09F6Jg6NFKDC5ewv18tjFrrSuuu0yzqjYLc= X-Received: by 2002:a05:600c:5294:b0:486:fa35:aef2 with SMTP id 5b1f17b1804b1-488fb73d53bmr97024485e9.4.1776530063979; Sat, 18 Apr 2026 09:34:23 -0700 (PDT) Received: from localhost ([2a01:4b00:d036:ae00:e054:93f2:97bf:84c6]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-488fb7a0b54sm44316065e9.20.2026.04.18.09.34.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2026 09:34:23 -0700 (PDT) From: luca.boccassi@gmail.com To: kexec@lists.infradead.org Cc: linux-mm@kvack.org, graf@amazon.com, rppt@kernel.org, pasha.tatashin@soleen.com, pratyush@kernel.org, brauner@kernel.org, linux-kernel@vger.kernel.org, Luca Boccassi Subject: [PATCH v8 5/6] liveupdate: add LIVEUPDATE_SESSION_GET_NAME ioctl Date: Sat, 18 Apr 2026 17:28:22 +0100 Message-ID: <20260418163358.2304490-6-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260418163358.2304490-1-luca.boccassi@gmail.com> References: <20260418163358.2304490-1-luca.boccassi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Luca Boccassi Userspace when requesting a session via the ioctl specifies a name and gets a FD, but then there is no ioctl to go back the other way and get the name given a LUO session FD. This is problematic especially when there is a userspace orchestrator that wants to check what FDs it is handling for clients without having to do manual string scraping of procfs, or without procfs at all. Add a ioctl to simply get the name from an FD. Signed-off-by: Luca Boccassi Reviewed-by: Pasha Tatashin --- include/uapi/linux/liveupdate.h | 21 +++++++++++++++++++++ kernel/liveupdate/luo_session.c | 13 +++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/uapi/linux/liveupdate.h b/include/uapi/linux/liveupdat= e.h index 30bc66ee9436..3a9ff53b02e0 100644 --- a/include/uapi/linux/liveupdate.h +++ b/include/uapi/linux/liveupdate.h @@ -59,6 +59,7 @@ enum { LIVEUPDATE_CMD_SESSION_PRESERVE_FD =3D LIVEUPDATE_CMD_SESSION_BASE, LIVEUPDATE_CMD_SESSION_RETRIEVE_FD =3D 0x41, LIVEUPDATE_CMD_SESSION_FINISH =3D 0x42, + LIVEUPDATE_CMD_SESSION_GET_NAME =3D 0x43, }; =20 /** @@ -213,4 +214,24 @@ struct liveupdate_session_finish { #define LIVEUPDATE_SESSION_FINISH \ _IO(LIVEUPDATE_IOCTL_TYPE, LIVEUPDATE_CMD_SESSION_FINISH) =20 +/** + * struct liveupdate_session_get_name - ioctl(LIVEUPDATE_SESSION_GET_NAME) + * @size: Input; sizeof(struct liveupdate_session_get_name) + * @reserved: Input; Must be zero. Reserved for future use. + * @name: Output; A null-terminated string with the full session name. + * + * Retrieves the full name of the session associated with this file descri= ptor. + * This is useful because the kernel may truncate the name shown in /proc. + * + * Return: 0 on success, negative error code on failure. + */ +struct liveupdate_session_get_name { + __u32 size; + __u32 reserved; + __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; +}; + +#define LIVEUPDATE_SESSION_GET_NAME \ + _IO(LIVEUPDATE_IOCTL_TYPE, LIVEUPDATE_CMD_SESSION_GET_NAME) + #endif /* _UAPI_LIVEUPDATE_H */ diff --git a/kernel/liveupdate/luo_session.c b/kernel/liveupdate/luo_sessio= n.c index 21cbe99fc819..ca5e44274dcb 100644 --- a/kernel/liveupdate/luo_session.c +++ b/kernel/liveupdate/luo_session.c @@ -291,10 +291,21 @@ static int luo_session_finish(struct luo_session *ses= sion, return luo_ucmd_respond(ucmd, sizeof(*argp)); } =20 +static int luo_session_get_name(struct luo_session *session, + struct luo_ucmd *ucmd) +{ + struct liveupdate_session_get_name *argp =3D ucmd->cmd; + + strscpy((char *)argp->name, session->name, sizeof(argp->name)); + + return luo_ucmd_respond(ucmd, sizeof(*argp)); +} + union ucmd_buffer { struct liveupdate_session_finish finish; struct liveupdate_session_preserve_fd preserve; struct liveupdate_session_retrieve_fd retrieve; + struct liveupdate_session_get_name get_name; }; =20 struct luo_ioctl_op { @@ -321,6 +332,8 @@ static const struct luo_ioctl_op luo_session_ioctl_ops[= ] =3D { struct liveupdate_session_preserve_fd, token), IOCTL_OP(LIVEUPDATE_SESSION_RETRIEVE_FD, luo_session_retrieve_fd, struct liveupdate_session_retrieve_fd, token), + IOCTL_OP(LIVEUPDATE_SESSION_GET_NAME, luo_session_get_name, + struct liveupdate_session_get_name, name), }; =20 static long luo_session_ioctl(struct file *filep, unsigned int cmd, --=20 2.47.3 From nobody Tue Jun 16 11:17:55 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28A10313523 for ; Sat, 18 Apr 2026 16:34:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530069; cv=none; b=eEurPis+S2xM64joKlT7solzVTKWsYqoQmz4MhRB+7qQt2KzNrsdF/u7s26Ah9iRKHxLxHrdv1SsUWpi93CY/HenLNYL+II6GQ8zf0tbL6BahOCSFJtYgXfQ3JO5rYMqjBBlhEKe5knlZm1ETszezRBPagTiHJ8ZEbR/ktSeIgw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776530069; c=relaxed/simple; bh=RGvRpXFf4soaxO7fUpHuq0CUZm8/gZT9nUyQEdeAygE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hiu5uszLOKVECRYRQvoj9Rjp3PQdMNtNKVUfOo9XXLlm5f7fgcawo0Yskv67H0wYrBzi0XXZYEw8W9paewDVgaQwD1vuiKJyWWNUvXTz2V5qWUvBUbdJk0B6rNri8JTPALeOref47o7vGHDUPDkG+51Qd9iTMgzydgEzG1pJN4Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JjqAnBMv; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JjqAnBMv" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4887f49ec5aso21304855e9.1 for ; Sat, 18 Apr 2026 09:34:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776530065; x=1777134865; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uguiSA9xVG8SCE4+kERAOLrC3CLUPwMeYK7rWWVQ3nI=; b=JjqAnBMvz5RLpvdSGUPsO0g/irr9qBntDVIOOG3PkptXPTCaPlURHeYE2zjjghKz32 BDaqp0AD7EG//5EQ3inUw7t8PagC6F4YxpgvDHPevVSjKg6kh3HMz5tf1SIzajgQEwkL U3yEyQGMXA7GuAp6vRFv5IIfFhZ5erfmXJeD8Z/tv7Q5Jykiw5jlqkeW5KAXEz5upS5P 748PDW6vBtXoIB+bp3Js2fYb4d4DAQ/X15ExKxRdHW5JekVZMuqMYAvbPcEOqbz4BDpS PnX6q2kusQTn/Rx5rsr37rzxSbmvvtnYBfiVQa2QDbjhK+CPKQWIXH3ypbbc6COfRhrC tdIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776530065; x=1777134865; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=uguiSA9xVG8SCE4+kERAOLrC3CLUPwMeYK7rWWVQ3nI=; b=Vw/j9CtGwx1dXVg0wWfwv3sgspsfUfA+1qmq2TfWkfJ+kAZr3jQGUq9KbMD76lwAwL GA6BSy4hj7upljuQeFMtOPjzxNVFuMEm0/NVKEWOw4Ki3pG9S/YvRGsPpRRBsmlsiH6Z 8we+2sifU5IbFaeXpPPuJxdro6U65T20XHVbFoDRPucgiwLzr0Gjl516DhjySsgpruRi juR2vt/eB/ADpwH/DglzLHZkko2yH8XXza70Bh7eYdhm+JTrp2njgviS34uA3PzJmpK6 0a+ns2Zy6P9yH+owB11MoYcfGLJSF+97F4mgqKEFdqrIzXWxqbgl0Q2WdXHauNactEiV cZig== X-Forwarded-Encrypted: i=1; AFNElJ+kJSE3qXFIHJ5Rb+AANnFi49WXwms5aB+C7ivNRxSqmzYFFe5olrR9/RUeRcClolpECpVQF9ON7qELb7I=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9+yb8cJ09qtKtTrNuPaTm0pItroqLfiN8t9QfUj47bDGnwwbp g8s7NXXPbOx0Gw2J+iBFAQdNfBHhDQgOYCW+QipZyiGqhhJNO1CXiL42 X-Gm-Gg: AeBDiev9hfxwycdV4UOApPpHJux1UatJbXDtZEUYjJISTlT9Za7PPEG0LGo2aLnloFn 9IGoHnk0byCU3GeqXs3NtbvwesvdnulfQib7zztTmSoIPCfcK/DjAzG27dMDqsjTghuRIx9Y81Q PnjKVLMa48xHpenVu2KO1GnCA+gToIJOCTKb4uTvMzpJqT9L/Rf5kprIbcVTULPbaEKg48Q2sOg TS4SSzVdEK12U8IHWyLusEzvpzzrlmKafr0sZk2r+XTd/HRXJNjm+rcgBWT6Is8nGN4W68AkupH Y713oMpV1wlzwhcmXqxmHSvP1DrQ7m1gc45JNXQgHqyKl+1CFsSS3sxF7H62YbIlxrkhJO8cAwf ha7S1243pNQsN5cxw83o9Aq0dU6aHfj1wzXsHSdYJ851hSDtzfV7bEKNTkC7gdUiMlQrO9mkaBB 25wBCKwIFavzHX6tspIv9LKF1iXz7VVJL1qd50djU= X-Received: by 2002:a05:600c:31a9:b0:489:95:3dd2 with SMTP id 5b1f17b1804b1-48900953e9bmr30685445e9.8.1776530065164; Sat, 18 Apr 2026 09:34:25 -0700 (PDT) Received: from localhost ([2a01:4b00:d036:ae00:e054:93f2:97bf:84c6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-43fe4e4d5b1sm15836381f8f.30.2026.04.18.09.34.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2026 09:34:24 -0700 (PDT) From: luca.boccassi@gmail.com To: kexec@lists.infradead.org Cc: linux-mm@kvack.org, graf@amazon.com, rppt@kernel.org, pasha.tatashin@soleen.com, pratyush@kernel.org, brauner@kernel.org, linux-kernel@vger.kernel.org, Luca Boccassi Subject: [PATCH v8 6/6] selftests/liveupdate: add test cases for LIVEUPDATE_SESSION_GET_NAME Date: Sat, 18 Apr 2026 17:28:23 +0100 Message-ID: <20260418163358.2304490-7-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260418163358.2304490-1-luca.boccassi@gmail.com> References: <20260418163358.2304490-1-luca.boccassi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Luca Boccassi Verify that the new LIVEUPDATE_SESSION_GET_NAME ioctl works as expected via new test cases in the existing liveupdate selftest. Signed-off-by: Luca Boccassi Reviewed-by: Pasha Tatashin --- .../testing/selftests/liveupdate/liveupdate.c | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/tools/testing/selftests/liveupdate/liveupdate.c b/tools/testin= g/selftests/liveupdate/liveupdate.c index 5e99af0cc6e9..c21354dc9b93 100644 --- a/tools/testing/selftests/liveupdate/liveupdate.c +++ b/tools/testing/selftests/liveupdate/liveupdate.c @@ -105,6 +105,22 @@ static int create_session(int lu_fd, const char *name) return args.fd; } =20 +/* Helper function to get a session name via ioctl. */ +static int get_session_name(int session_fd, char *name, size_t name_len) +{ + struct liveupdate_session_get_name args =3D {}; + + args.size =3D sizeof(args); + + if (ioctl(session_fd, LIVEUPDATE_SESSION_GET_NAME, &args)) + return -errno; + + strncpy(name, (char *)args.name, name_len - 1); + name[name_len - 1] =3D '\0'; + + return 0; +} + /* * Test Case: Create Duplicate Session * @@ -427,4 +443,59 @@ TEST_F(liveupdate_device, session_fstat) ASSERT_EQ(close(session_fd2), 0); } =20 +/* + * Test Case: Get Session Name + * + * Verifies that the full session name can be retrieved from a session file + * descriptor via ioctl. + */ +TEST_F(liveupdate_device, get_session_name) +{ + char name_buf[LIVEUPDATE_SESSION_NAME_LENGTH] =3D {}; + const char *session_name =3D "get-name-test-session"; + int session_fd; + + self->fd1 =3D open(LIVEUPDATE_DEV, O_RDWR); + if (self->fd1 < 0 && errno =3D=3D ENOENT) + SKIP(return, "%s does not exist", LIVEUPDATE_DEV); + ASSERT_GE(self->fd1, 0); + + session_fd =3D create_session(self->fd1, session_name); + ASSERT_GE(session_fd, 0); + + ASSERT_EQ(get_session_name(session_fd, name_buf, sizeof(name_buf)), 0); + ASSERT_STREQ(name_buf, session_name); + + ASSERT_EQ(close(session_fd), 0); +} + +/* + * Test Case: Get Session Name at Maximum Length + * + * Verifies that a session name using the full LIVEUPDATE_SESSION_NAME_LEN= GTH + * (minus the null terminator) can be correctly retrieved. + */ +TEST_F(liveupdate_device, get_session_name_max_length) +{ + char name_buf[LIVEUPDATE_SESSION_NAME_LENGTH] =3D {}; + char long_name[LIVEUPDATE_SESSION_NAME_LENGTH]; + int session_fd; + + memset(long_name, 'A', sizeof(long_name) - 1); + long_name[sizeof(long_name) - 1] =3D '\0'; + + self->fd1 =3D open(LIVEUPDATE_DEV, O_RDWR); + if (self->fd1 < 0 && errno =3D=3D ENOENT) + SKIP(return, "%s does not exist", LIVEUPDATE_DEV); + ASSERT_GE(self->fd1, 0); + + session_fd =3D create_session(self->fd1, long_name); + ASSERT_GE(session_fd, 0); + + ASSERT_EQ(get_session_name(session_fd, name_buf, sizeof(name_buf)), 0); + ASSERT_STREQ(name_buf, long_name); + + ASSERT_EQ(close(session_fd), 0); +} + TEST_HARNESS_MAIN --=20 2.47.3