From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (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 418673CDBD8 for ; Mon, 25 May 2026 07:23:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779693829; cv=none; b=rGNSE7cCPQyTJGJSV70Jkyqfi/b/GRD2vUD4U2YbSeNEYs2MmhFMFKOzOw75fL7frSfxtJ9ElVBbSSCnFStqiTd3jz5cAWfqUGeIp3lRASDSxDdE/ulwu2xbCRNcvhBhLwrk/Gau38BEdEahJW4L/V8sfM38d4rhCk9m2/sTRjE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779693829; c=relaxed/simple; bh=/I6DuQjJrsoUlY9F1+GIOyDSOhReuOcNfTPAOcdh/LE=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=fbWA+qWAQ7oht1iLaJyxzbO27wr/Wk6oTEUtwzz1+b0HvMlxet6TzIfeP0vJe18H0ies4YDaL1WlgPE/e7sdJEu441wxPSuic+Ifu8MFExV0wsc3c1rSIwYuRZxuK9PuSdb1ByAfwpqfFh2H1CtxCav3gSgeapnqk/MXl+w/fOU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=MC6MKfQK; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="MC6MKfQK" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-43fe62837baso5381908f8f.3 for ; Mon, 25 May 2026 00:23:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1779693826; x=1780298626; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=/oKgspdXMIsoQuyBhv4V3z/r/gtDk0V0FyCighFRfYc=; b=MC6MKfQKDjbWCWwDN6KK3pITqnyXZ4a/5ggmf2YOpuCObXz890BwdwOrXMy7VZ8kn0 xvZixyQHyoiVGRCkTLMWgKXVM2U6tyUMf8O+wTAoiaGy+Q0s/VOEDtoHiO6BGWQB6+0q 6MNokqpWGa+Bixjl5ZxHtpdj0bCfiqSfl6eeLWnHM/KwMfEqWh0zCkqUD0wJ/JgULZl3 W3S8P4PW0pWYiMvC3LIclxBYSgZExXqltlultgjLElKVbvyhDID+1fTaKlBDA9fTJqU1 CBqN8nfn3e0F8IKRiBnvrl1YhZPUYWrbnDSR6CeWgkD4SC3CBW+oF3AAe7887BiBNDxR /VtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779693826; x=1780298626; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/oKgspdXMIsoQuyBhv4V3z/r/gtDk0V0FyCighFRfYc=; b=RhfweNXG/kuQ8JGPfZneb4PCl949wcxxKl6cbBcJ4dJ8QJ1zzZeOw1RLfHycn5yv19 Gr7kffUb21jazaLLNIOILRsr4GGLD26Nh08dAyIzDSxdWe6etljNBrP6cnss1i7jC1Q8 kuE0IwuKDJRzvkCQg1IO8bcQwvrdmUUMTL0ZklXe/AbsLQfGqJxugi72EHXW8GPk/X3A N8GkmLZiaDZ5WvgRGGUmSIX40/btOVavxk2rgh25cWDEs3HSRb01R1y5341zZ+nUHUxK FTwjTq4XtWvouWvqR8+3FQhaabG5XVD7v33kPHAEAGDjQxi5ziefZ46T9yAqdrr2fVE5 F7UQ== X-Forwarded-Encrypted: i=1; AFNElJ8oV7a6MNA2KW6eaXbJP2u3lrmA/alfLUagZlL+cmYPcU7BTX/RXY4cY236eRiMKqM7Io6YfuERNcRG1Xo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy5kFAnU67gs7dQ83RhyLok7iv0fadJzy8+DCD4LvZZYbybm5yB 2XlVQ6h8aLwY7e+Mt3NCv4+5AISw9cPoLiAHZakbmrIFh8CaRsINLR+YqlMJb5eNP2w= X-Gm-Gg: Acq92OFclvafoEDo3daDmqjCZyNOPbaeSInuCXZQVBMinvRZE/AVVExQq17Dvar3g67 XHi73v0EWuVgmq18NmWBt4HD42bN/miuZF+kbcyNT992dphwAd0pQ0G78RU5noz+SO6nkZlByoh H9VaTEn0GhwHT3Hmd0e5LPq0xKKXAZg7w8f5v+cIKSslqdhIShndnnvkOtl1lSyLFU5GdeiOY4L /VS4Y2+dYQ3dZeaDod4aKnfWhIGU2qFCX+I8hO58aOZ5Fq2aVFnY34Ip/mHbsLGRMB/CPjTz8Ks V25ibcfMtKAe0H6dM00opuee2qLbxr4jnGrMGH6vR/+0o07qBLY0jSb2QZZzR27R6oAtXKD/0Mq Cupt38F5fU2hrzSN/L3AkGaPGSlwho/aNXIwp1KGGArMQQyGy+tnSIFEwFWLSymI71sGH+TF6lE b4RP0UtDu00JAu0GF69tNvZAnDAzK038IXLiN/ryUiWV8qpOC3IeKEyUlhkABsLa8T5jNPWdVKa FCCAEL4W1102SNNySvzcNKAHxsDOKw5iOtmZdGz9Cs4jDOV6ED815yXO60m0ZIZ2EFVZWp+0SsY 9a4g X-Received: by 2002:a05:6000:2384:b0:45e:8526:7dc8 with SMTP id ffacd0b85a97d-45eb39e1ea2mr22077567f8f.25.1779693826624; Mon, 25 May 2026 00:23:46 -0700 (PDT) Received: from ?IPV6:2a00:1028:838d:271e:8e3b:4aff:fe4c:a100? (dynamic-2a00-1028-838d-271e-8e3b-4aff-fe4c-a100.ipv6.o2.cz. [2a00:1028:838d:271e:8e3b:4aff:fe4c:a100]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45eb6d7167dsm25062109f8f.35.2026.05.25.00.23.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 25 May 2026 00:23:46 -0700 (PDT) Message-ID: Date: Mon, 25 May 2026 09:23:44 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] params: bound array element output to the caller's page buffer To: Pengpeng Hou Cc: Daniel Gomez , Sami Tolvanen , Kees Cook , Aaron Tomlin , Dmitry Antipov , Thorsten Blum , linux-kernel@vger.kernel.org, stable@vger.kernel.org References: <20260417075042.26632-1-pengpeng@iscas.ac.cn> <20260507082103.94473-1-pengpeng@iscas.ac.cn> <5bfa28de-9d37-45c2-8c0f-e93b36119910@suse.com> <20260521022854.38938-1-pengpeng@iscas.ac.cn> Content-Language: en-US From: Petr Pavlu In-Reply-To: <20260521022854.38938-1-pengpeng@iscas.ac.cn> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 5/21/26 4:28 AM, Pengpeng Hou wrote: > Hi Petr, > > You're right, that changelog bullet was misleading. > > v1 already broke out of the loop once off reached PAGE_SIZE - 1, so it > would not enter another iteration with no remaining byte in the caller's > page buffer. > > The v2 change was narrower: after the element getter returns, it clamps > the number of bytes to copy and only rewrites the previous '\n' separator > when that clamped length is non-zero. That avoids turning the previous > separator into ',' when the next element contributes no visible bytes > after clamping, or if a getter returns 0. The updated code in v2 looks as follows: for (i = off = 0; i < (arr->num ? *arr->num : arr->max); i++) { p.arg = arr->elem + arr->elemsize * i; check_kparam_locked(p.mod); ret = arr->ops->get(elem_buf, &p); if (ret < 0) goto out; ret = min(ret, (int)(PAGE_SIZE - 1 - off)); if (!ret) break; /* Replace the previous element's trailing newline with a comma. */ if (i) buffer[off - 1] = ','; memcpy(buffer + off, elem_buf, ret); off += ret; if (off == PAGE_SIZE - 1) break; } The clamping is done by: ret = min(ret, (int)(PAGE_SIZE - 1 - off)); My understanding is that the expression '(int)(PAGE_SIZE - 1 - off)' cannot return 0 because otherwise the loop would have already broken out in the previous iteration due to the final check 'if (off == PAGE_SIZE - 1)'. The input ret value to the min() calculation comes from the arr->ops->get() call. The kernel_param_ops::get() API requires the resulting string to be terminated by '\n', so on success the call should never return 0. Even if it does and we want to make param_array_get() tighter, I believe it should be treated as an error rather than silently returning success from this function. -- Thanks, Petr