[v1,2/2] pci: explain how empty strings are rejected in DBDF
Checks
Commit Message
Empty strings are forbidden as input to rte_pci_addr_parse().
It is explicitly enforced in BDF parsing as parsing the bus
field will immediately fail. The related check is commented.
It is implicitly enforced in DBDF parsing, as the domain would be
parsed to 0 without error, but the check `end[0] != ':'` afterward
will return -EINVAL.
Enforcing consistency between parsers by reading the code is not helped
by this property being implicit. Add a comment to explain.
Signed-off-by: Gaetan Rivet <grive@u256.net>
---
lib/librte_pci/rte_pci.c | 4 ++++
1 file changed, 4 insertions(+)
Comments
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Gaetan Rivet
> Sent: Wednesday, May 13, 2020 12:48 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v1 2/2] pci: explain how empty strings are rejected
> in DBDF
>
> Empty strings are forbidden as input to rte_pci_addr_parse().
> It is explicitly enforced in BDF parsing as parsing the bus
> field will immediately fail. The related check is commented.
>
> It is implicitly enforced in DBDF parsing, as the domain would be
> parsed to 0 without error, but the check `end[0] != ':'` afterward
> will return -EINVAL.
>
> Enforcing consistency between parsers by reading the code is not helped
> by this property being implicit. Add a comment to explain.
>
> Signed-off-by: Gaetan Rivet <grive@u256.net>
> ---
Acked-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
On Wed, May 13, 2020 at 12:48 PM Gaetan Rivet <grive@u256.net> wrote:
>
> Empty strings are forbidden as input to rte_pci_addr_parse().
> It is explicitly enforced in BDF parsing as parsing the bus
> field will immediately fail. The related check is commented.
>
> It is implicitly enforced in DBDF parsing, as the domain would be
> parsed to 0 without error, but the check `end[0] != ':'` afterward
> will return -EINVAL.
>
> Enforcing consistency between parsers by reading the code is not helped
> by this property being implicit. Add a comment to explain.
>
> Signed-off-by: Gaetan Rivet <grive@u256.net>
Acked-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Applied, thanks.
@@ -84,6 +84,10 @@ pci_dbdf_parse(const char *input, struct rte_pci_addr *dev_addr)
errno = 0;
val = strtoul(in, &end, 16);
+ /* Empty string is not an error for strtoul, but the check
+ * end[0] != ':'
+ * will detect the issue.
+ */
if (errno != 0 || end[0] != ':' || val > UINT16_MAX)
return -EINVAL;
dev_addr->domain = (uint16_t)val;