[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CANn89iKxoSDOO3gx2qVXPaQ2g+6rJi8Q0CN2GAW-nf4WTo1GBw@mail.gmail.com>
Date: Wed, 6 Jul 2022 16:04:51 +0200
From: Eric Dumazet <edumazet@...gle.com>
To: Leonard Crestez <cdleonard@...il.com>
Cc: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Soheil Hassas Yeganeh <soheil@...gle.com>,
Wei Wang <weiwan@...gle.com>,
Joanne Koong <joannelkoong@...il.com>,
netdev <netdev@...r.kernel.org>,
LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] net: Shrink sock.sk_err sk_err_soft to u16 from int
On Sun, Jul 3, 2022 at 10:07 PM Leonard Crestez <cdleonard@...il.com> wrote:
>
> These fields hold positive errno values which are limited by
> ERRNO_MAX=4095 so 16 bits is more than enough.
>
> They are also always positive; setting them to a negative errno value
> can result in falsely reporting a successful read/write of incorrect
> size.
>
> Signed-off-by: Leonard Crestez <cdleonard@...il.com>
> ---
We can not do this safely.
sk->sk_err_soft can be written without lock, this needs to be a full integer,
otherwise this might pollute adjacent bytes.
> include/net/sock.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> I ran some relatively complex tests without noticing issues but some corner
> case where this breaks might exist.
>
> diff --git a/include/net/sock.h b/include/net/sock.h
> index 0dd43c3df49b..acd85d1702d9 100644
> --- a/include/net/sock.h
> +++ b/include/net/sock.h
> @@ -480,11 +480,11 @@ struct sock {
> u16 sk_protocol;
> u16 sk_gso_max_segs;
> unsigned long sk_lingertime;
> struct proto *sk_prot_creator;
> rwlock_t sk_callback_lock;
> - int sk_err,
> + u16 sk_err,
> sk_err_soft;
> u32 sk_ack_backlog;
> u32 sk_max_ack_backlog;
> kuid_t sk_uid;
> u8 sk_txrehash;
> --
> 2.25.1
>
Powered by blists - more mailing lists