All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jay Vosburgh <jay.vosburgh@canonical.com>
To: Simon Horman <horms@kernel.org>
Cc: Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Paolo Abeni <pabeni@redhat.com>,
	Andy Gospodarek <andy@greyhouse.net>,
	netdev@vger.kernel.org
Subject: Re: [PATCH] bonding: Always assign be16 value to vlan_proto
Date: Thu, 20 Apr 2023 12:47:33 -0700	[thread overview]
Message-ID: <9836.1682020053@famine> (raw)
In-Reply-To: <20230420-bonding-be-vlan-proto-v1-1-754399f51d01@kernel.org>

Simon Horman <horms@kernel.org> wrote:

>The type of the vlan_proto field is __be16.
>And most users of the field use it as such.
>
>In the case of setting or testing the field for the
>special VLAN_N_VID value, host byte order is used.
>Which seems incorrect.
>
>Address this issue by converting VLAN_N_VID to __be16.
>
>I don't believe this is a bug because VLAN_N_VID in
>both little-endian (and big-endian) byte order does
>not conflict with any valid values (0 through VLAN_N_VID - 1)
>in big-endian byte order.

	Is that true for all cases, or am I just confused?  Doesn't VLAN
ID 16 match VLAN_N_VID (which is 4096) if byte swapped?

	I.e., on a little endian host, VLAN_N_VID is 0x1000 natively,
and network byte order (big endian) of VLAN ID 16 is also 0x1000.

	Either way, I think the change is fine; VLAN_N_VID is being used
as a sentinel value here, so the only real requirement is that it not
match an actual VLAN ID in network byte order.

	-J

>Reported by sparse as:
>
> .../bond_main.c:2857:26: warning: restricted __be16 degrades to integer
> .../bond_main.c:2863:20: warning: restricted __be16 degrades to integer
> .../bond_main.c:2939:40: warning: incorrect type in assignment (different base types)
> .../bond_main.c:2939:40:    expected restricted __be16 [usertype] vlan_proto
> .../bond_main.c:2939:40:    got int
>
>No functional changes intended.
>Compile tested only.
>
>Signed-off-by: Simon Horman <horms@kernel.org>
>---
> drivers/net/bonding/bond_main.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
>index db7e650d9ebb..7f4c75fe58e1 100644
>--- a/drivers/net/bonding/bond_main.c
>+++ b/drivers/net/bonding/bond_main.c
>@@ -2854,13 +2854,13 @@ static bool bond_handle_vlan(struct slave *slave, struct bond_vlan_tag *tags,
> 	struct net_device *slave_dev = slave->dev;
> 	struct bond_vlan_tag *outer_tag = tags;
> 
>-	if (!tags || tags->vlan_proto == VLAN_N_VID)
>+	if (!tags || tags->vlan_proto == cpu_to_be16(VLAN_N_VID))
> 		return true;
> 
> 	tags++;
> 
> 	/* Go through all the tags backwards and add them to the packet */
>-	while (tags->vlan_proto != VLAN_N_VID) {
>+	while (tags->vlan_proto != cpu_to_be16(VLAN_N_VID)) {
> 		if (!tags->vlan_id) {
> 			tags++;
> 			continue;
>@@ -2936,7 +2936,7 @@ struct bond_vlan_tag *bond_verify_device_path(struct net_device *start_dev,
> 		tags = kcalloc(level + 1, sizeof(*tags), GFP_ATOMIC);
> 		if (!tags)
> 			return ERR_PTR(-ENOMEM);
>-		tags[level].vlan_proto = VLAN_N_VID;
>+		tags[level].vlan_proto = cpu_to_be16(VLAN_N_VID);
> 		return tags;
> 	}

---
	-Jay Vosburgh, jay.vosburgh@canonical.com

  reply	other threads:[~2023-04-20 19:47 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-20 15:29 [PATCH] bonding: Always assign be16 value to vlan_proto Simon Horman
2023-04-20 19:47 ` Jay Vosburgh [this message]
2023-04-20 20:23   ` Vladimir Oltean
2023-04-20 21:23     ` Jay Vosburgh
2023-04-21  7:01       ` Simon Horman
2023-04-21  9:17         ` Vladimir Oltean
2023-04-21 22:34           ` Jay Vosburgh

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=9836.1682020053@famine \
    --to=jay.vosburgh@canonical.com \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.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.