All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roberto Sassu <roberto.sassu@huawei.com>
To: <ast@kernel.org>, <daniel@iogearbox.net>, <andrii@kernel.org>,
	<kpsingh@kernel.org>, <john.fastabend@gmail.com>,
	<songliubraving@fb.com>, <kafai@fb.com>, <yhs@fb.com>,
	<dhowells@redhat.com>
Cc: <keyrings@vger.kernel.org>, <bpf@vger.kernel.org>,
	<netdev@vger.kernel.org>, <linux-kselftest@vger.kernel.org>,
	<linux-security-module@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>,
	Roberto Sassu <roberto.sassu@huawei.com>
Subject: [PATCH v6 3/5] scripts: Handle unsigned type prefix in bpf_doc.py
Date: Tue, 28 Jun 2022 14:27:48 +0200	[thread overview]
Message-ID: <20220628122750.1895107-4-roberto.sassu@huawei.com> (raw)
In-Reply-To: <20220628122750.1895107-1-roberto.sassu@huawei.com>

While unsigned long is an accepted parameter type, the regular expression
validating helper prototypes does not correctly take into account types
composed by multiple words.

The regular expression:

((const )?(struct )?(\w+|\.\.\.)( \**\w+)?)

accepts only const and struct as prefix before the type. The following part
of the regular expression expects a word with [a-zA-Z0-9_] characters
(without space), so it would get just unsigned. Parsing words with \w+ in
greedy mode makes the regular expression work even if the type is composed
by two words, but not always. It wouldn't have been the case in possessive
mode \w++ (don't give back characters to match the regular expression).

Simply adding unsigned as possible prefix is not correct, as the struct
unsigned combination is not legal. Make instead struct and unsigned as
alternatives, so that the following new combinations are legal:

unsigned type
struct type
const unsigned type

and not:

struct unsigned type

The regular expression is a preliminary check. The type, other than being
legal, must be also present in the known_types array.

Don't mention the change in the regular expression description, as it is
assumed that type implies also multiple words types.

At this point, don't switch from greedy to possessive mode (\w+ -> \w++) to
avoid partial parsing of the type of helper parameters, as this
functionality has only been added recently in Python 3.11.

Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
---
 scripts/bpf_doc.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/bpf_doc.py b/scripts/bpf_doc.py
index a0ec321469bd..25e79d811487 100755
--- a/scripts/bpf_doc.py
+++ b/scripts/bpf_doc.py
@@ -124,7 +124,7 @@ class HeaderParser(object):
         #   - Same as above, with "const" and/or "struct" in front of type
         #   - "..." (undefined number of arguments, for bpf_trace_printk())
         # There is at least one term ("void"), and at most five arguments.
-        p = re.compile(' \* ?((.+) \**\w+\((((const )?(struct )?(\w+|\.\.\.)( \**\w+)?)(, )?){1,5}\))$')
+        p = re.compile(' \* ?((.+) \**\w+\((((const )?((struct )|(unsigned )?)(\w+|\.\.\.)( \**\w+)?)(, )?){1,5}\))$')
         capture = p.match(self.line)
         if not capture:
             raise NoHelperFound
-- 
2.25.1


  parent reply	other threads:[~2022-06-28 12:28 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-28 12:27 [PATCH v6 0/5] bpf: Add bpf_verify_pkcs7_signature() helper Roberto Sassu
2022-06-28 12:27 ` [PATCH v6 1/5] bpf: Export bpf_dynptr_get_size() Roberto Sassu
2022-06-28 12:27 ` [PATCH v6 2/5] KEYS: Move KEY_LOOKUP_ to include/linux/key.h Roberto Sassu
2022-06-28 12:27 ` Roberto Sassu [this message]
2022-06-28 12:27 ` [PATCH v6 4/5] bpf: Add bpf_verify_pkcs7_signature() helper Roberto Sassu
2022-07-06 16:03   ` Daniel Borkmann
2022-07-06 23:49     ` KP Singh
2022-07-07 11:00       ` Roberto Sassu
2022-07-08 12:12         ` Roberto Sassu
2022-06-28 12:27 ` [PATCH v6 5/5] selftests/bpf: Add test for " Roberto Sassu
2022-06-28 12:32   ` Roberto Sassu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220628122750.1895107-4-roberto.sassu@huawei.com \
    --to=roberto.sassu@huawei.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dhowells@redhat.com \
    --cc=john.fastabend@gmail.com \
    --cc=kafai@fb.com \
    --cc=keyrings@vger.kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=songliubraving@fb.com \
    --cc=yhs@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.