Messages in this thread | | | From | Eric Dumazet <> | Date | Wed, 6 Jul 2022 16:04:51 +0200 | 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@gmail.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@gmail.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 >
| |