All of lore.kernel.org
 help / color / mirror / Atom feed
* [net] devlink: report 0 after hitting end in region read
@ 2020-02-04 23:59 Jacob Keller
  2020-02-05  6:18 ` Jiri Pirko
  2020-02-05 13:25 ` David Miller
  0 siblings, 2 replies; 3+ messages in thread
From: Jacob Keller @ 2020-02-04 23:59 UTC (permalink / raw)
  To: netdev; +Cc: jiri, valex, parav, Jacob Keller

commit fdd41ec21e15 ("devlink: Return right error code in case of errors
for region read") modified the region read code to report errors
properly in unexpected cases.

In the case where the start_offset and ret_offset match, it unilaterally
converted this into an error. This causes an issue for the "dump"
version of the command. In this case, the devlink region dump will
always report an invalid argument:

000000000000ffd0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
000000000000ffe0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
devlink answers: Invalid argument
000000000000fff0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

This occurs because the expected flow for the dump is to return 0 after
there is no further data.

The simplest fix would be to stop converting the error code to -EINVAL
if start_offset == ret_offset. However, avoid unnecessary work by
checking for when start_offset is larger than the region size and
returning 0 upfront.

Fixes: fdd41ec21e15 ("devlink: Return right error code in case of errors for region read")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
I noticed this while working on adding the new region reading support at

https://lore.kernel.org/netdev/20200130225913.1671982-1-jacob.e.keller@intel.com/https://lore.kernel.org/netdev/20200130225913.1671982-1-jacob.e.keller@intel.com/

This is fairly cosmetic at least for the devlink userspace tools in iproute2
suite, but it is annoying. It appears to only happen with the dump-based
logic that does not specify a range or initial offset.

 net/core/devlink.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/net/core/devlink.c b/net/core/devlink.c
index ca1df0ec3c97..549ee56b7a21 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -3986,6 +3986,12 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
 		goto out_unlock;
 	}
 
+	/* return 0 if there is no further data to read */
+	if (start_offset >= region->size) {
+		err = 0;
+		goto out_unlock;
+	}
+
 	hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
 			  &devlink_nl_family, NLM_F_ACK | NLM_F_MULTI,
 			  DEVLINK_CMD_REGION_READ);
-- 
2.25.0.rc1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [net] devlink: report 0 after hitting end in region read
  2020-02-04 23:59 [net] devlink: report 0 after hitting end in region read Jacob Keller
@ 2020-02-05  6:18 ` Jiri Pirko
  2020-02-05 13:25 ` David Miller
  1 sibling, 0 replies; 3+ messages in thread
From: Jiri Pirko @ 2020-02-05  6:18 UTC (permalink / raw)
  To: Jacob Keller; +Cc: netdev, valex, parav

Wed, Feb 05, 2020 at 12:59:50AM CET, jacob.e.keller@intel.com wrote:
>commit fdd41ec21e15 ("devlink: Return right error code in case of errors
>for region read") modified the region read code to report errors
>properly in unexpected cases.
>
>In the case where the start_offset and ret_offset match, it unilaterally
>converted this into an error. This causes an issue for the "dump"
>version of the command. In this case, the devlink region dump will
>always report an invalid argument:
>
>000000000000ffd0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>000000000000ffe0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>devlink answers: Invalid argument
>000000000000fff0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>
>This occurs because the expected flow for the dump is to return 0 after
>there is no further data.
>
>The simplest fix would be to stop converting the error code to -EINVAL
>if start_offset == ret_offset. However, avoid unnecessary work by
>checking for when start_offset is larger than the region size and
>returning 0 upfront.
>
>Fixes: fdd41ec21e15 ("devlink: Return right error code in case of errors for region read")
>Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>

Acked-by: Jiri Pirko <jiri@mellanox.com>

Thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [net] devlink: report 0 after hitting end in region read
  2020-02-04 23:59 [net] devlink: report 0 after hitting end in region read Jacob Keller
  2020-02-05  6:18 ` Jiri Pirko
@ 2020-02-05 13:25 ` David Miller
  1 sibling, 0 replies; 3+ messages in thread
From: David Miller @ 2020-02-05 13:25 UTC (permalink / raw)
  To: jacob.e.keller; +Cc: netdev, jiri, valex, parav

From: Jacob Keller <jacob.e.keller@intel.com>
Date: Tue,  4 Feb 2020 15:59:50 -0800

> commit fdd41ec21e15 ("devlink: Return right error code in case of errors
> for region read") modified the region read code to report errors
> properly in unexpected cases.
> 
> In the case where the start_offset and ret_offset match, it unilaterally
> converted this into an error. This causes an issue for the "dump"
> version of the command. In this case, the devlink region dump will
> always report an invalid argument:
> 
> 000000000000ffd0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> 000000000000ffe0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> devlink answers: Invalid argument
> 000000000000fff0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> 
> This occurs because the expected flow for the dump is to return 0 after
> there is no further data.
> 
> The simplest fix would be to stop converting the error code to -EINVAL
> if start_offset == ret_offset. However, avoid unnecessary work by
> checking for when start_offset is larger than the region size and
> returning 0 upfront.
> 
> Fixes: fdd41ec21e15 ("devlink: Return right error code in case of errors for region read")
> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>

Applied and queued up for -stable, thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-02-05 13:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-04 23:59 [net] devlink: report 0 after hitting end in region read Jacob Keller
2020-02-05  6:18 ` Jiri Pirko
2020-02-05 13:25 ` David Miller

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.