Go to file
Linus Torvalds f122a08b19 capability: just use a 'u64' instead of a 'u32[2]' array
Back in 2008 we extended the capability bits from 32 to 64, and we did
it by extending the single 32-bit capability word from one word to an
array of two words.  It was then obfuscated by hiding the "2" behind two
macro expansions, with the reasoning being that maybe it gets extended
further some day.

That reasoning may have been valid at the time, but the last thing we
want to do is to extend the capability set any more.  And the array of
values not only causes source code oddities (with loops to deal with
it), but also results in worse code generation.  It's a lose-lose
situation.

So just change the 'u32[2]' into a 'u64' and be done with it.

We still have to deal with the fact that the user space interface is
designed around an array of these 32-bit values, but that was the case
before too, since the array layouts were different (ie user space
doesn't use an array of 32-bit values for individual capability masks,
but an array of 32-bit slices of multiple masks).

So that marshalling of data is actually simplified too, even if it does
remain somewhat obscure and odd.

This was all triggered by my reaction to the new "cap_isidentical()"
introduced recently.  By just using a saner data structure, it went from

	unsigned __capi;
	CAP_FOR_EACH_U32(__capi) {
		if (a.cap[__capi] != b.cap[__capi])
			return false;
	}
	return true;

to just being

	return a.val == b.val;

instead.  Which is rather more obvious both to humans and to compilers.

Cc: Mateusz Guzik <mjguzik@gmail.com>
Cc: Casey Schaufler <casey@schaufler-ca.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Paul Moore <paul@paul-moore.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2023-03-01 10:01:22 -08:00
arch LoongArch changes for v6.3 2023-03-01 09:27:00 -08:00
block Driver core changes for 6.3-rc1 2023-02-24 12:58:55 -08:00
certs Kbuild updates for v6.3 2023-02-26 11:53:25 -08:00
crypto Networking changes for 6.3. 2023-02-21 18:24:12 -08:00
Documentation This pull request contains the following changes for UML: 2023-03-01 09:13:00 -08:00
drivers sh updates for v6.3 2023-03-01 09:44:22 -08:00
fs capability: just use a 'u64' instead of a 'u32[2]' array 2023-03-01 10:01:22 -08:00
include capability: just use a 'u64' instead of a 'u32[2]' array 2023-03-01 10:01:22 -08:00
init Kbuild updates for v6.3 2023-02-26 11:53:25 -08:00
io_uring capability: just use a 'u64' instead of a 'u32[2]' array 2023-03-01 10:01:22 -08:00
ipc Merge branch 'work.namespace' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2023-02-24 19:20:07 -08:00
kernel capability: just use a 'u64' instead of a 'u32[2]' array 2023-03-01 10:01:22 -08:00
lib kunit: Fix 'hooks.o' build by recursing into kunit 2023-02-27 14:49:03 -08:00
LICENSES
mm memblock: small optimizations 2023-02-27 09:34:53 -08:00
net 9p patches for 6.3 merge window (part 1) 2023-03-01 08:52:49 -08:00
rust Kbuild updates for v6.3 2023-02-26 11:53:25 -08:00
samples LoongArch changes for v6.3 2023-03-01 09:27:00 -08:00
scripts Kbuild updates for v6.3 2023-02-26 11:53:25 -08:00
security capability: just use a 'u64' instead of a 'u32[2]' array 2023-03-01 10:01:22 -08:00
sound ARM: SoC drivers for 6.3 2023-02-27 10:04:49 -08:00
tools capability: just use a 'u64' instead of a 'u32[2]' array 2023-03-01 10:01:22 -08:00
usr
virt KVM/riscv changes for 6.3 2023-02-15 12:33:28 -05:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes .gitattributes: use 'dts' diff driver for *.dtso files 2023-02-26 15:28:23 +09:00
.gitignore
.mailmap 12 hotfixes, mostly against mm/. Five of these fixes are cc:stable. 2023-02-13 14:09:20 -08:00
.rustfmt.toml
COPYING
CREDITS There is no particular theme here - mainly quick hits all over the tree. 2023-02-23 17:55:40 -08:00
Kbuild
Kconfig
MAINTAINERS f2fs-for-6.3-rc1 2023-02-27 16:18:51 -08:00
Makefile Kbuild updates for v6.3 2023-02-26 11:53:25 -08:00
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.