From: Stanislav Fomichev <stfomichev@gmail.com>
To: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Eric Dumazet <edumazet@google.com>,
Qianqiang Liu <qianqiang.liu@163.com>,
davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] net: check the return value of the copy_from_sockptr
Date: Wed, 11 Sep 2024 11:49:32 -0700 [thread overview]
Message-ID: <ZuHmPBpPV7BxKrxB@mini-arch> (raw)
In-Reply-To: <ZuHU0mVCQJeFaQyF@pop-os.localdomain>
On 09/11, Cong Wang wrote:
> On Wed, Sep 11, 2024 at 07:15:27PM +0200, Eric Dumazet wrote:
> > On Wed, Sep 11, 2024 at 6:58 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > >
> > > On Wed, Sep 11, 2024 at 11:12:24AM +0200, Eric Dumazet wrote:
> > > > On Wed, Sep 11, 2024 at 10:23 AM Qianqiang Liu <qianqiang.liu@163.com> wrote:
> > > > >
> > > > > > I do not think it matters, because the copy is performed later, with
> > > > > > all the needed checks.
> > > > >
> > > > > No, there is no checks at all.
> > > > >
> > > >
> > > > Please elaborate ?
> > > > Why should maintainers have to spend time to provide evidence to
> > > > support your claims ?
> > > > Have you thought about the (compat) case ?
> > > >
> > > > There are plenty of checks. They were there before Stanislav commit.
> > > >
> > > > Each getsockopt() handler must perform the same actions.
> > >
> > >
> > > But in line 2379 we have ops->getsockopt==NULL case:
> > >
> > > 2373 if (!compat)
> > > 2374 copy_from_sockptr(&max_optlen, optlen, sizeof(int));
> > > 2375
> > > 2376 ops = READ_ONCE(sock->ops);
> > > 2377 if (level == SOL_SOCKET) {
> > > 2378 err = sk_getsockopt(sock->sk, level, optname, optval, optlen);
> > > 2379 } else if (unlikely(!ops->getsockopt)) {
> > > 2380 err = -EOPNOTSUPP; // <--- HERE
> > > 2381 } else {
> > > 2382 if (WARN_ONCE(optval.is_kernel || optlen.is_kernel,
> > > 2383 "Invalid argument type"))
> > > 2384 return -EOPNOTSUPP;
> > > 2385
> > > 2386 err = ops->getsockopt(sock, level, optname, optval.user,
> > > 2387 optlen.user);
> > > 2388 }
> > >
> > > where we simply continue with calling BPF_CGROUP_RUN_PROG_GETSOCKOPT()
> > > which actually needs the 'max_optlen' we copied via copy_from_sockptr().
> > >
> > > Do I miss anything here?
> >
> > This is another great reason why we should not change current behavior.
>
> Hm? But the current behavior is buggy?
>
> >
> > err will be -EOPNOTSUPP, which was the original error code before
> > Stanislav patch.
>
> You mean we should continue calling BPF_CGROUP_RUN_PROG_GETSOCKOPT()
> despite -EFAULT?
>
> >
> > Surely the eBPF program will use this value first, and not even look
> > at max_optlen
> >
> > Returning -EFAULT might break some user programs, I don't know.
>
> As you mentioned above, other ->getsockopt() already returns -EFAULT, so
> what is breaking? :)
>
> >
> > I feel we are making the kernel slower just because we can.
>
> Safety and correctness also matter.
Can you explain what is not correct?
Calling BPF_CGROUP_RUN_PROG_GETSOCKOPT with max_optlen=0 should not be
a problem I think? (the buffer simply won't be accessible to the bpf prog)
next prev parent reply other threads:[~2024-09-11 18:49 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-11 5:04 [PATCH] net: check the return value of the copy_from_sockptr Qianqiang Liu
2024-09-11 6:51 ` D. Wythe
2024-09-11 7:13 ` Eric Dumazet
2024-09-11 8:23 ` Qianqiang Liu
2024-09-11 9:12 ` Eric Dumazet
2024-09-11 10:24 ` Qianqiang Liu
2024-09-11 12:40 ` Eric Dumazet
2024-09-11 16:58 ` Cong Wang
2024-09-11 17:15 ` Eric Dumazet
2024-09-11 17:35 ` Cong Wang
2024-09-11 18:49 ` Stanislav Fomichev [this message]
2024-09-11 19:48 ` Cong Wang
2024-09-11 20:05 ` Stanislav Fomichev
2024-09-14 0:49 ` Cong Wang
2024-09-14 18:01 ` Stanislav Fomichev
2024-09-18 13:11 ` David Laight
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=ZuHmPBpPV7BxKrxB@mini-arch \
--to=stfomichev@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=qianqiang.liu@163.com \
--cc=xiyou.wangcong@gmail.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.