From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 076BE31280B for ; Fri, 29 Aug 2025 10:56:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756465005; cv=none; b=oEEPYISp+KzgZXERh5NJ3j4ZsHqg6XD3+mUNlTQX2HM2+t919Uveh6isAmmGsmsnh7lV/biTJuq9BVE1UQQQs3QbIbEKYLyNszbgYZyRUHl2ZQnMYqEEh1zuIThEQEl1oYoAEenoD0Tvsp/nnsRTwUk71tbCgS1uQexITZBpzOc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756465005; c=relaxed/simple; bh=inbltJcud415RfOLdtDWb4ZRPiVNmpE13gKJhy8SUBQ=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=iC+hOD/dveH47diYWxnhws35gVzaWHNnQEYHAPEe4IQECDTr6hhD0q7toLGdaerV7PTQAWFdxrXscqrPMPbTp6JS1KMDvF3ljCw8gdn/TQKJ2dx1lyhtoofGT7SM3mC1gBnNgcnkZifnrFvYjrC0PFpN8PR/WyYzVL1jhC7xhUs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=D2srUIEY; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="D2srUIEY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1756465003; h=from:from:reply-to:subject:subject: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=EaP7Ha620z7PGq0bZ/BqrUJv9Q8RkZ+3RzVayMVbaTE=; b=D2srUIEYXfStuj8ptWfVdvcq14JNe+GEoC1DcTbArICDEN5gn13414iY5KEwCXuHf4jJar OTJZfhNBEjIV+i09YmeEHKLKWNNVxxZa1eRNt+tbeRQxkgOq/qCT9aMVM2XqrXsH2WsxH0 XkmI/IUuV5LF1Fiu2K9Dpzh09PpHv5Q= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-677-bK_kDyCfMVGbGqg0aAJGEA-1; Fri, 29 Aug 2025 06:56:41 -0400 X-MC-Unique: bK_kDyCfMVGbGqg0aAJGEA-1 X-Mimecast-MFC-AGG-ID: bK_kDyCfMVGbGqg0aAJGEA_1756465000 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-45b74ec7cd0so12550785e9.2 for ; Fri, 29 Aug 2025 03:56:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756465000; x=1757069800; h=content-transfer-encoding:in-reply-to:content-language:from :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=EaP7Ha620z7PGq0bZ/BqrUJv9Q8RkZ+3RzVayMVbaTE=; b=EMb8Lg0l8PLkoi9JSd7lcg2+kq/dcMTXvQQ295A4JUTFFPP60/FgcrBRK2OF3LQVZJ NuoAdxpo71y8NW+2K00yrZO8KPXprTFtQY9f7tpn/2OhU8KFVJ30Tz3dH025Q/ejoCHt 3yeNIWRCb5bU7qEYhxFNYsvO2vMnlIeo58HndoPSaMqccjK7AKjMCUZKT4uJ0YVDTMop sXzO6f+FSEIsMLrYhqHND1vviSMagBE1C6/HlbBzW/d9e8JHgHdNY+y4d8gaR6ilx5qf MCOy/Mh4y0K1/9HazgTdo5t3JbrbXVj+RrGrTLDFWBW1dq6yvJfWBPiRtiLuPo5AzUZ8 gJqg== X-Forwarded-Encrypted: i=1; AJvYcCUijdaUUOPvCB5cMlOtaNzyiBGzyMZ1seHxkdPPF5FomlzXB0521FP3ikQN7q5VMR6xQdnN68OtpY7kgCQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzJ+TC2+RvRM9k8TKZhUYqPGfip5Ynhs58AsRwjPcm0RcKGTlEJ szJvefUbOfBMgVxZVKq8BXCQ0oGniHXfrlnUe1YLZL+CKvMUFZf++KqYKl712nY2J87TTYry1SC SRsbq6N9F+XUiQXy0XQ1CF1GdwFpjycX8/7ttuSOzwaiSsFYM5KXe9+oRMUjWJdQG X-Gm-Gg: ASbGncsmoY3S1Fauigd+wzdjHywJcmS2fvRldBzQZaJ7zb1FOpnCVAfEzVljkpjFr0Q 5OteFLL7NFloLmQZe9X0GVOsuE4mBrpeHth/YbXIB2MnhgpfGJOb508+f30fUVdxUKnwgZtLKBC TDUvfMACaQCa5yyDo8qczsHZ+Iw3xJjgxO4S2+/Ypasrf9uLyyGVx3gwBC3SFKpgD0K5tl0CkMR kZN4SqQhgwCKLBNquME88UekhZaJWwMBAXJnuFFLlHFcKps24qUxtMDac4fECj53J4dY6pZkiEp P98oeJeBFLf3SMEftaCh7uus5Defm9U8geNhUJDy8Gxb/F8Oz7NK32pC56iRJetiNGPLqcMGdA= = X-Received: by 2002:a05:600c:1c96:b0:45b:7608:3ca5 with SMTP id 5b1f17b1804b1-45b761d6183mr63569425e9.6.1756465000391; Fri, 29 Aug 2025 03:56:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFuVwvGfPI/MYjQRGZTZ+NOvbRfl9s4GjAwqHmXYox48PYZsps29gxhwdHfvLN5DCLN/+ixVg== X-Received: by 2002:a05:600c:1c96:b0:45b:7608:3ca5 with SMTP id 5b1f17b1804b1-45b761d6183mr63569115e9.6.1756464999966; Fri, 29 Aug 2025 03:56:39 -0700 (PDT) Received: from [192.168.0.102] (185-219-167-205-static.vivo.cz. [185.219.167.205]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7e887fdcsm33676505e9.13.2025.08.29.03.56.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 29 Aug 2025 03:56:39 -0700 (PDT) Message-ID: <9a1973bf-88d7-4270-b979-d3ea0280a80b@redhat.com> Date: Fri, 29 Aug 2025 12:56:36 +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 bpf-next v4 1/2] bpf/helpers: bpf_strnstr: Exact match length To: Rong Tao , andrii.nakryiko@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: Rong Tao , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Mykola Lysenko , Shuah Khan , "open list:BPF [GENERAL] (Safe Dynamic Programs and Tools)" , open list , "open list:KERNEL SELFTEST FRAMEWORK" References: From: Viktor Malik Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 8/29/25 04:12, Rong Tao wrote: > From: Rong Tao > > strnstr should not treat the ending '\0' of s2 as a matching character > if the parameter 'len' equal to s2 string length, for example: A good catch, thanks! But this doesn't fix just the `len == strlen(s2)` case but a more general case when s2 is a suffix of the first len characters of s1, right? The commit message should reflect that. > > 1. bpf_strnstr("openat", "open", 4) = -ENOENT > 2. bpf_strnstr("openat", "open", 5) = 0 > > This patch makes (1) return 0, indicating a successful match. > > Fixes: e91370550f1f ("bpf: Add kfuncs for read-only string operations") > Signed-off-by: Rong Tao > --- > kernel/bpf/helpers.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c > index 401b4932cc49..bf04881f96ec 100644 > --- a/kernel/bpf/helpers.c > +++ b/kernel/bpf/helpers.c > @@ -3672,10 +3672,18 @@ __bpf_kfunc int bpf_strnstr(const char *s1__ign, const char *s2__ign, size_t len > > guard(pagefault)(); > for (i = 0; i < XATTR_SIZE_MAX; i++) { > - for (j = 0; i + j < len && j < XATTR_SIZE_MAX; j++) { > + for (j = 0; i + j <= len && j < XATTR_SIZE_MAX; j++) { > __get_kernel_nofault(&c2, s2__ign + j, char, err_out); > if (c2 == '\0') > return i; > + /** > + * corner case i+j==len to ensure that we matched > + * entire s2. for example, param len=3: > + * s1: A B C D E F -> i==1 > + * s2: B C D -> j==2 > + */ This is not really a good example as it's not clear whether D is a null byte or not. How about something like: /** * We allow reading an extra byte from s2 (note the * `i + j <= len` above) to cover the case when s2 is * a suffix of the first len chars of s1. */ > + if (i + j == len) > + break; Viktor > __get_kernel_nofault(&c1, s1__ign + j, char, err_out); > if (c1 == '\0') > return -ENOENT;