All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Biggers <ebiggers@kernel.org>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: Network Development <netdev@vger.kernel.org>,
	Stephen Hemminger <stephen@networkplumber.org>,
	bpf <bpf@vger.kernel.org>,
	Linux Crypto Mailing List <linux-crypto@vger.kernel.org>,
	Ard Biesheuvel <ardb@kernel.org>
Subject: Re: [PATCH iproute2-next v2] lib/bpf_legacy: Use userspace SHA-1 code instead of AF_ALG
Date: Wed, 1 Oct 2025 16:33:04 -0700	[thread overview]
Message-ID: <20251001233304.GB2760@quark> (raw)
In-Reply-To: <CAADnVQKKQEjZjz21e_639XkttoT4NvXYxUb8oTQ4X7hZKYLduQ@mail.gmail.com>

On Wed, Oct 01, 2025 at 03:59:31PM -0700, Alexei Starovoitov wrote:
> On Mon, Sep 29, 2025 at 12:48 PM Eric Biggers <ebiggers@kernel.org> wrote:
> >
> > Add a basic SHA-1 implementation to lib/, and make lib/bpf_legacy.c use
> > it to calculate SHA-1 digests instead of the previous AF_ALG-based code.
> >
> > This eliminates the dependency on AF_ALG, specifically the kernel config
> > options CONFIG_CRYPTO_USER_API_HASH and CONFIG_CRYPTO_SHA1.
> >
> > Over the years AF_ALG has been very problematic, and it is also not
> > supported on all kernels.  Escalating to the kernel's privileged
> > execution context merely to calculate software algorithms, which can be
> > done in userspace instead, is not something that should have ever been
> > supported.  Even on kernels that support it, the syscall overhead of
> > AF_ALG means that it is often slower than userspace code.
> 
> Help me understand the crusade against AF_ALG.
> Do you want to deprecate AF_ALG altogether or when it's used for
> sha-s like sha1 and sha256 ?

Altogether, when possible.  AF_ALG has been (and continues to be)
incredibly problematic, for both security and maintainability.

> I thought the main advantage of going through the kernel is that
> the kernel might have an optimized implementation for a specific
> architecture, while the open coded C version is generic.
> The cost of syscall and copies in/out is small compared
> to actual math, especially since compilers might not be smart enough
> to use single asm insn for rol32() C function.

Not for small amounts of data, since syscalls are expensive these days.

(Aren't BPF programs usually fairly small?)

BTW, both gcc and clang reliably lower rol32() to a single instruction.

> sha1/256 are simple enough in plain C, but other crypto/hash
> could be complex and the kernel may have HW acceleration for them.
> CONFIG_CRYPTO_USER_API_HASH has been there forever and plenty
> of projects have code to use that. Like qemu, stress-ng, ruby.
> python and rust have standard binding for af_alg too.
> If the kernel has optimized and/or hw accelerated crypto, I see an appeal
> to alway use AF_ALG when it's available.

Well, userspace programs that want accelerated crypto routines without
incorporating them themselves should just use a userspace library that
has them.  It's not hard.

But iproute2 should be fine with just the generic C code.

As for why AF_ALG support keeps showing up in different programs, it's
mainly just a misunderstanding.  But I think you're also overestimating
how often it's used.  Your 5 examples were 4 bindings (not users), and 1
user where it's disabled by default.

There are Linux systems where it's only iproute2 that's blocking
CONFIG_CRYPTO_USER_API_HASH from being disabled.  This patch is really
valuable on such systems.

- Eric

  reply	other threads:[~2025-10-01 23:33 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-29 19:46 [PATCH iproute2-next v2] lib/bpf_legacy: Use userspace SHA-1 code instead of AF_ALG Eric Biggers
2025-10-01 22:59 ` Alexei Starovoitov
2025-10-01 23:33   ` Eric Biggers [this message]
2025-10-02 17:12     ` Alexei Starovoitov
2025-10-02 17:36       ` Eric Biggers
2025-10-02 17:53         ` Alexei Starovoitov
2025-11-12  4:07 ` Eric Biggers
2025-11-16 17:45   ` David Ahern
2025-12-17 23:44     ` Eric Biggers
2025-12-18 19:58       ` David Ahern
2025-11-12 20:12 ` Stephen Hemminger
2025-11-12 20:22   ` Eric Biggers
2025-11-13  7:25   ` Ard Biesheuvel
2025-11-13  8:51     ` Simon Richter
2025-11-13 15:35       ` Ard Biesheuvel

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=20251001233304.GB2760@quark \
    --to=ebiggers@kernel.org \
    --cc=alexei.starovoitov@gmail.com \
    --cc=ardb@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=stephen@networkplumber.org \
    /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.