Linux 5.4.57
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.57 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/include/asm/percpu.h | 2 arch/arm64/include/asm/pointer_auth.h | 8 ++- drivers/char/random.c | 1 fs/ext4/inode.c | 5 ++ include/linux/bpf.h | 13 ++++- include/linux/prandom.h | 78 ++++++++++++++++++++++++++++++++ include/linux/random.h | 63 +------------------------ include/linux/skmsg.h | 13 +++++ kernel/bpf/syscall.c | 4 - kernel/time/timer.c | 8 +++ lib/random32.c | 2 net/core/sock_map.c | 50 ++++++++++++++++++-- tools/testing/selftests/bpf/test_maps.c | 12 ++-- 14 files changed, 184 insertions(+), 77 deletions(-)
Greg Kroah-Hartman (1):
Linux 5.4.57
Grygorii Strashko (1):
ARM: percpu.h: fix build error
Jiang Ying (1):
ext4: fix direct I/O read error
Linus Torvalds (2):
random32: remove net_rand_state from the latent entropy gcc plugin
random32: move the pseudo-random 32-bit definitions to prandom.h
Lorenz Bauer (2):
selftests: bpf: Fix detach from sockmap tests
bpf: sockmap: Require attach_bpf_fd when detaching a program
Marc Zyngier (1):
arm64: Workaround circular dependency in pointer_auth.h
Willy Tarreau (2):
random32: update the net random state on interrupt and activity
random: fix circular include dependency on arm64 after addition of percpu.h
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 56 +SUBLEVEL = 57 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/include/asm/percpu.h +2 -0
@@ -5,6 +5,8 @@#ifndef _ASM_ARM_PERCPU_H_#define _ASM_ARM_PERCPU_H_ +#include <asm/thread_info.h> +/* * Same as asm-generic/percpu.h, except that we store the per cpu offset * in the TPIDRPRW. TPIDRPRW only exists on V6K and V7
arch/arm64/include/asm/pointer_auth.h +7 -1
@@ -3,7 +3,6 @@#define __ASM_POINTER_AUTH_H#include <linux/bitops.h> -#include <linux/random.h> #include <asm/cpufeature.h> #include <asm/memory.h>
@@ -30,6 +29,13 @@ struct ptrauth_keys {struct ptrauth_key apga; }; +/* +* Only include random.h once ptrauth_keys_* structures are defined +* to avoid yet another circular include hell (random.h * ends up +* including asm/smp.h, which requires ptrauth_keys_kernel). +*/ +#include <linux/random.h> +static inline void ptrauth_keys_init (struct ptrauth_keys *keys) {if (system_supports_address_auth ()) {
drivers/char/random.c +1 -0
@@ -1330,6 +1330,7 @@ void add_interrupt_randomness(int irq, int irq_flags)fast_mix (fast_pool);add_interrupt_bench (cycles); +this_cpu_add (net_rand_state.s1, fast_pool->pool[cycles &3 ]);if (unlikely (crng_init ==0 )) { if ((fast_pool->count >= 64) &&
fs/ext4/inode.c +5 -0
@@ -3836,6 +3836,11 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter)struct inode *inode = mapping->host;size_t count =iov_iter_count (iter);ssize_t ret; +loff_t offset = iocb->ki_pos; +loff_t size =i_size_read (inode); + +if (offset >= size) +return 0 ;/* * Shared inode_lock is enough for us - it protects against concurrent
include/linux/bpf.h +11 -2
@@ -956,11 +956,14 @@ static inline void bpf_map_offload_map_free(struct bpf_map *map)#endif /* CONFIG_NET && CONFIG_BPF_SYSCALL */ #if defined(CONFIG_BPF_STREAM_PARSER ) -int sock_map_prog_update (struct bpf_map *map,struct bpf_prog *prog,u32 which); +int sock_map_prog_update (struct bpf_map *map,struct bpf_prog *prog, +struct bpf_prog *old,u32 which);int sock_map_get_from_fd (const union bpf_attr *attr,struct bpf_prog *prog); +int sock_map_prog_detach (const union bpf_attr *attr,enum bpf_prog_type ptype);#else static inline int sock_map_prog_update (struct bpf_map *map, -struct bpf_prog *prog,u32 which) +struct bpf_prog *prog, +struct bpf_prog *old,u32 which) {return -EOPNOTSUPP ; }
@@ -970,6 +973,12 @@ static inline int sock_map_get_from_fd(const union bpf_attr *attr, {return -EINVAL ; } + +static inline int sock_map_prog_detach (const union bpf_attr *attr, +enum bpf_prog_type ptype) +{ +return -EOPNOTSUPP ; +}#endif #if defined(CONFIG_XDP_SOCKETS )
include/linux/prandom.h new file +78 -0
78 lines not on this page · raw message
include/linux/random.h +4 -59
75 lines not on this page · raw message
include/linux/skmsg.h +13 -0
@@ -450,6 +450,19 @@ static inline void psock_set_prog(struct bpf_prog **pprog,bpf_prog_put (prog); } +static inline int psock_replace_prog (struct bpf_prog **pprog, +struct bpf_prog *prog, +struct bpf_prog *old) +{ +if (cmpxchg (pprog, old, prog) != old) +return -ENOENT ; + +if (old) +bpf_prog_put (old); + +return 0 ; +} +static inline void psock_progs_drop (struct sk_psock_progs *progs) {psock_set_prog (&progs->msg_parser,NULL );
kernel/bpf/syscall.c +2 -2
@@ -2029,10 +2029,10 @@ static int bpf_prog_detach(const union bpf_attr *attr) ptype =BPF_PROG_TYPE_CGROUP_DEVICE ;break ;case BPF_SK_MSG_VERDICT : -return sock_map_get_from_fd (attr,NULL ); +return sock_map_prog_detach (attr,BPF_PROG_TYPE_SK_MSG );case BPF_SK_SKB_STREAM_PARSER :case BPF_SK_SKB_STREAM_VERDICT : -return sock_map_get_from_fd (attr,NULL ); +return sock_map_prog_detach (attr,BPF_PROG_TYPE_SK_SKB );case BPF_LIRC_MODE2 :return lirc_prog_detach (attr);case BPF_FLOW_DISSECTOR :
kernel/time/timer.c +8 -0
@@ -43,6 +43,7 @@#include <linux/sched/debug.h> #include <linux/slab.h> #include <linux/compat.h> +#include <linux/random.h> #include <linux/uaccess.h> #include <asm/unistd.h>
@@ -1742,6 +1743,13 @@ void update_process_times(int user_tick)scheduler_tick ();if (IS_ENABLED (CONFIG_POSIX_TIMERS ))run_posix_cpu_timers (); + +/* The current CPU might make use of net randoms without receiving IRQs +* to renew them often enough. Let's update the net_rand_state from a +* non-constant value that's not affine to the number of calls to make +* sure it's updated when there's some activity (we don't care in idle). +*/ +this_cpu_add (net_rand_state.s1,rol32 (jiffies,24 ) + user_tick); }/**
lib/random32.c +1 -1
@@ -48,7 +48,7 @@ static inline void prandom_state_selftest(void) }#endif -static DEFINE_PER_CPU(struct rnd_state, net_rand_state) __latent_entropy; +DEFINE_PER_CPU(struct rnd_state, net_rand_state);/** * prandom_u32_state - seeded pseudo-random number generator.
net/core/sock_map.c +45 -5
79 lines not on this page · raw message
tools/testing/selftests/bpf/test_maps.c +6 -6
@@ -793,19 +793,19 @@ static void test_sockmap(unsigned int tasks, void *data) } err =bpf_prog_detach (fd,BPF_SK_SKB_STREAM_PARSER ); -if (err) { +if (!err) {printf ("Failed empty parser prog detach\n" ); goto out_sockmap; } err =bpf_prog_detach (fd,BPF_SK_SKB_STREAM_VERDICT ); -if (err) { +if (!err) {printf ("Failed empty verdict prog detach\n" ); goto out_sockmap; } err =bpf_prog_detach (fd,BPF_SK_MSG_VERDICT ); -if (err) { +if (!err) {printf ("Failed empty msg verdict prog detach\n" ); goto out_sockmap; }
@@ -1094,19 +1094,19 @@ static void test_sockmap(unsigned int tasks, void *data)assert (status ==0 ); } - err =bpf_prog_detach (map_fd_rx, __MAX_BPF_ATTACH_TYPE); + err =bpf_prog_detach2 (parse_prog, map_fd_rx, __MAX_BPF_ATTACH_TYPE);if (!err) {printf ("Detached an invalid prog type.\n" ); goto out_sockmap; } - err =bpf_prog_detach (map_fd_rx,BPF_SK_SKB_STREAM_PARSER ); + err =bpf_prog_detach2 (parse_prog, map_fd_rx,BPF_SK_SKB_STREAM_PARSER );if (err) {printf ("Failed parser prog detach\n" ); goto out_sockmap; } - err =bpf_prog_detach (map_fd_rx,BPF_SK_SKB_STREAM_VERDICT ); + err =bpf_prog_detach2 (verdict_prog, map_fd_rx,BPF_SK_SKB_STREAM_VERDICT );if (err) {printf ("Failed parser prog detach\n" ); goto out_sockmap;